Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

Адрес P2SH

Другие названия: Pay-to-Script-Hash, Выход P2SH.

Что такое адрес P2SH?
Адрес P2SH начинается с цифры 3 и фиксирует хеш скрипта погашения, поэтому условия расходования остаются тайной, пока кто-либо не раскроет скрипт.

Определено в BIP-16.

Pay to script hash появился с BIP-16, применяется с блока 173 805 с 1 апреля 2012 года, и он изменил то, кто несет издержки сложности. До него отправитель должен был записать весь контракт в выход. После него отправитель записывает 23 байта, а получатель платит за раскрытие скрипта позже, поэтому адрес с префиксом 3 может скрывать хранилище на пять ключей или обычный кошелек с одним ключом.

Как это работает

Скрипт выхода короткий и одинаковый для любого адреса P2SH: OP_HASH160, затем 20-байтный хеш и OP_EQUAL, всего 23 байта. Хеш фиксирует скрипт погашения, который знает только получатель.

Расходование происходит в два прохода. scriptSig передает аргументы, нужные скрипту погашения, а последним элементом сам сериализованный скрипт погашения. Узел хеширует этот последний элемент, сверяет его с зафиксированным значением и, если они совпадают, десериализует скрипт и выполняет его над всем, что осталось в стеке. Оба этапа должны завершиться успешно.

То, что помещается, определяют два ограничения. Скрипт погашения является одним элементом стека, поэтому он не может превышать предел проталкивания 520 байт, который Bitcoin Core определяет как MAX_SCRIPT_ELEMENT_SIZE. Политика ретрансляции добавляет второй потолок: 15 операций подписи на один вход P2SH. Вместе они ограничивают такую схему значительно сильнее, чем язык скриптов позволяет в целом, где предел составляет скрипт на 10 000 байт.

Сам адрес представляет собой Base58Check с байтом версии 0x05, что дает начальную 3 и строку из 34 символов. BIP-13 определил этот формат отдельно от правила консенсуса в BIP-16.

Где это встречается

Формы вывода средств на биржах, которые называют опцию "SegWit", не говоря "native", обычно означают адрес с префиксом 3. Кошельки с мультиподписью, созданные до 2018 года, их используют. Их также используют атомарные свопы и контракты с блокировкой по времени и хешем, которым нужен скрипт, но которые хотят адрес, на который может платить обычный кошелек.

Следствием такой конструкции является неоднозначность, и она полная. Неизрасходованный выход с префиксом 3 раскрывает только хеш, поэтому обозреватель блоков не может сказать вам, содержит он обернутый одиночный ключ или корпоративный кворум, и отправитель тоже не может. Информация появляется только в расходующей транзакции.

Эта неоднозначность несет реальный риск потери. Для восстановления биткоинов из выхода P2SH нужен скрипт погашения, а не только приватные ключи. Одна сид-фраза не восстановит произвольный скрипт, поэтому любую схему P2SH сложнее стандартного вывода ключей кошелька необходимо резервировать как дескриптор или как сами байты скрипта. Люди теряли биткоины, имея все ключи и не имея скрипта.

Адрес P2SH vs мультиподпись P2SH

Мультиподпись P2SH является одной из вещей, которые можно поместить внутрь адреса P2SH, а не синонимом формата. Адрес представляет собой контейнер, и скрипт погашения, скрытый в нем, может быть мультиподписью m из n, хешем вложенного ключа SegWit, условием восстановления с блокировкой по времени или скриптом, который никто больше никогда не писал. Читать адрес с префиксом 3 как «адрес с мультиподписью» означает гадать, и это часто неверно, потому что вложенный SegWit сделал префикс 3 стандартным форматом для одного ключа на несколько лет после 2017 года и оставил миллионы обычных кошельков за этим префиксом.

Не путать с

Часто задаваемые вопросы

Что на самом деле находится внутри адреса с префиксом 3?

По адресу это определить невозможно. Выход содержит 20-байтный хеш скрипта погашения, и этим скриптом может быть кворум с мультиподписью, обернутый ключ SegWit или контракт с блокировкой по времени. Это становится видно только при расходовании биткоинов.

Нужен ли скрипт погашения для восстановления биткоинов P2SH?

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

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском