P2SH

Материал из BitcoinWiki
Это утверждённая версия страницы. Она же — наиболее свежая версия.
Перейти к: навигация, поиск
P2SH – Address, механизм

P2SH (Pay-To-Script Hash) – это лёгкий способ представить scriptPubKey как простой BitcoinScriptAddress, независимо от того, насколько он сложен с точки зрения его базовой настройки подписи m-of-N.

Используя P2SH, вы можете отправлять биткоины на адрес, который защищен различными необычными способами, не углубляясь в настройки безопасности. Вы просто отправляете биткоины на ~34-символьный P2SH-адрес. Получателю могут потребоваться подписи нескольких человек, чтобы потратить эти биткоины, или пароль, также требования могут быть полностью уникальными.

Что такое P2SH (Pay-To-Script Hash)?[править]

Какая информация закодирована в P2SH-адресе? Конкретный неизрасходованный Биткоин может иметь целый ряд различных условий, наиболее распространенным из которых является классический P2PKH. В P2PKH (или Pay-to-Pubkey Hash) требуется, чтобы получатель предоставил подпись, соответствующую хэшу открытого ключа. Разработчики Bitcoin core поняли, что люди смотрят на возможности языка скриптов Bitcoin и видят целый ряд возможностей в том, какие условия отправки могли бы приложить к выходу Bitcoin, чтобы создать гораздо более сложные транзакции, чем просто транзакции P2PKH.

Разработчики решили, что вместо того, чтобы позволить отправителям помещать длинные скрипты в scriptPubKey, они позволят каждому отправителю вместо этого поместить их в хэш условий трат монет. Эти условия известны как скрипт погашения. При этом, P2SH-транзакция финансирования содержит хэш этого сценария погашения в scriptPubKey. Сам скрипт погашения только раскрывается, проверяется по хэшу и оценивается во время транзакции расходов.

Pay-To-Script Hash – Bitcoin, адрес, segwit

Bitcoin-адрес[править]

BIP 13 стандартизирует формат адреса. Форматы адресов Bitcoin в P2SH начинаются с цифры 3 и могут напоминать следующее: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNly

Пример Pay-To-Script Hash[править]

Транзакция под номером 40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8 была оплачена на P2SH адрес 3P14159f73E4gFr7JterCCQh9QjiTjiZrG.

В транзакции 7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45 можно увидеть скрипт погашения, который тратит выход (output) транзакции при помощи OP_FALSE <sig> { OP_1 <pubkey> OP_1 OP_CHECKMULTISIG }.

История P2SH[править]

342ftSRCvFHfCeFFBuz4xwbeqnDw6BGUey – биткоин адрес, который является первым P2SH-совместимым адресом, получающим биткоины в производственной сети. Его оплата была добыта в блоке 16072. Что примечательно, награда была потрачена до исполнения BIP 16, поэтому это не самый лучший пример для понимания P2SH.

Механизм P2SH[править]

P2SH (Pay-To-Script Hash) транзакции были стандартизированы в BIP 16 и введены Гэвином Андресеном. Данное нововведение привело к новому "стандартному" типу транзакций для системы скриптов Bitcoin. Цель P2SH, по словам Андресена «перенести ответственность за предоставление условий по выкупу транзакции с отправителя средств на того, кто данные средства тратит».

В P2SH-транзакциях, блокировка скрипта заменяется на хэш скрипта погашения. Этот хэш является производным от скрипта погашения, который функционирует аналогично PubKey, так как он также содержит условия, которые должны быть выполнены, прежде чем BTC-вывод может быть потрачен. Когда транзакция, пытающаяся потратить UTXO, позже инициируется, ввод (input) должен содержать сценарий PubKey (который содержит хэш сценария погашения) и сценарий разблокировки.

В транзакциях P2SH сценарий, в котором содержатся условия использования выходных данных, то есть скрипт погашения, не представлен в скрипте блокировки. Вместо этого в скрипт блокировки включается только хэш, сам скрипт погашения представляется как часть скрипта разблокировки при расходовании выходных данных (output). Это приводит, как отметил Андресен в BIP 16, к переносу ответственности за предоставление условий для погашения транзакции с отправителя средств на того, кто эти средства тратит.

P2SH адрес, как работает в Bitcoin

В приведенном примере, Боб (Bob) генерирует скрипт погашения, затем хэширует его для хэша скрипта, и уже после этого отдает готовый хэш с Алисе (Alice). Теперь Алиса может создать P2SH-вывод, содержащий хэш скрипта погашения Боба[1].

P2SH vs. P2PKH[править]

Типичный биткоин-адрес вида 15Cytz9sHqeqtKCw2vnpEyNQ8teKtrTPjp на самом деле является адресом определенного типа, известным как Pay-To-Pubkey-Script Hash (P2PKH) адрес. Чтобы потратить биткоины, отправленные на данный тип адреса, получатель должен использовать закрытый ключ, связанный с открытым ключом хэша, указанный в этом адресе для создания цифровой подписи, которая устанавливается в scriptSig транзакции для разблокирования средств.

Pay-To-Script Hash (P2SH) выглядит и работает немного иначе. Пример типичного P2SH-адреса – 347N1Thc213QqfYCz3PZkjoJpNv5b14kbd. Биктоин-адрес формата P2SH всегда начинается с '3', вместо '1', как в адресах P2PKH. Это связано с тем, что адреса P2SH имеют префикс байта версии 0x05, а не префикс 0x00. В адресах P2PKH они выходят как '3' и '1' после base58check кодирования.

Преимущества P2SH[править]

У P2SH-транзакций существует определенный набор преимуществ перед аналогами:

  • Отправитель может финансировать любой произвольный сценарий погашения, не зная, каковы эти условия расходов. Это имеет смысл, потому что отправителю во многом все равно, как будут потрачены эти средства в будущем – это вопрос для получателя, которому небезразличны условия дальнейшего расходования средств. В случае транзакций с мультиподписью, отправитель может отправить средства, не зная необходимые открытые ключи (принадлежащие получателю) адреса получателя, которые раскрываются только тогда, когда получатель тратит средства. Подобный вид сделки повышает безопасность получателя.
  • Отправитель может использовать короткий 34-символьный адрес, подобный указанному выше, вместо длинного и громоздкого адреса, содержащего сведения о сценарии полного погашения. Это позволяет получателю разместить короткий адрес на платежной странице или в сообщении, что снижает вероятность человеческих ошибок в транскрипции.
  • Это снижает операционные сборы для отправителя средств. Комиссии за транзакцию пропорциональны размеру транзакции, а хэш фиксированной длины позволяет отправителю отправлять средства на любой произвольный скрипт погашения, не беспокоясь о выплате более высоких сборов. Это ответственность получателя, который создает скрипт погашения, чтобы определить, насколько велика будет их транзакция расходов и сколько это будет стоить. На данный момент это не является большой проблемой в связи с тем, что транзакционные издержки довольно малы. Однако они могут быть более важными в будущем, поскольку вознаграждение за блок в Bitcoin постоянно уменьшается.

Обычная реализация функции P2SH является мультиподписью адреса скрипта. В данном сценарии необходимо, чтобы транзакция обладала более чем одной цифровой подписью, чтобы доказать право собственности и, следовательно, потратить средства.

См. также на BitcoinWiki[править]

Ссылки[править]

  1. https://www.mycryptopedia.com/p2sh-pay-to-script-hash-explained/ – Mycryptopedia – P2SH or Pay-To-Script Hash Explained