Глоссарий / Адреса и ключи
P2WSH
Другие названия: Pay-to-Witness-Script-Hash, скрипт свидетеля.
- Что такое P2WSH?
- P2WSH привязывает биткоины к 32-байтовому обязательству SHA-256 в отношении скрипта свидетеля, что дает контрактам гораздо больше места, чем P2SH, и скидку на скрипт при его раскрытии.
Определено в BIP-141.
Pay to witness script hash представляет собой выход SegWit версии 0 для всего, что сложнее одного ключа, и записывается как адрес bc1q из 62 символов. Bitcoin Core ретранслирует трату, скрипт свидетеля которой достигает 3600 байт, а свидетель содержит до 100 элементов стека, тогда как скрипт погашения P2SH ограничен 520 байтами. Именно из-за этого дополнительного места серьезные контракты перешли сюда.
Как это работает
Выход P2WSH состоит из байта 0x00 для версии свидетеля 0, за которым идет вставка 32 байта, всего 34 байта. Эти 32 байта представляют собой простой SHA-256 сериализованного скрипта свидетеля, а не RIPEMD-160 от SHA-256, который используется в других местах биткоина.
Этот выбор сделан намеренно. Обязательство на 160 бит дает примерно 80 бит стойкости к коллизиям, что неудобно, когда контрагент помогает выбирать содержимое скрипта и мог бы искать два скрипта с общим хешем. Обязательство на 256 бит снимает эту проблему. P2WPKH с одним ключом сохраняет более короткий хеш, потому что ключ выбирает только одна сторона, и в результате адрес остается на 20 символов короче.
При трате аргументы помещаются в стек свидетеля, а в конце добавляется сериализованный скрипт. Узел хеширует этот последний элемент, сравнивает его с обязательством, а затем выполняет скрипт с тем, что осталось. Политика ретрансляции Bitcoin Core задает границы в файле policy.h: 3600 байт для скрипта, 100 элементов в стеке и 80 байт на элемент.
Комиссии объясняют этот переход. Трата 2-из-3 здесь занимает около 104,5 vbytes, потому что обе подписи и весь скрипт размером 105 байт идут в свидетеле по одной единице веса на байт. Та же политика в P2SH стоит примерно 297 vbytes. Также достижим консенсусный предел в 20 ключей для OP_CHECKMULTISIG, поскольку двадцать ключей занимают менее 700 байт.
Где это встречается
Каждый канал Lightning финансируется в выход P2WSH 2-из-2, что делает его одним из самых распространенных типов скриптов в блокчейне, хотя мало кто когда-либо вводит этот адрес. Институциональное хранение, политики miniscript и условия наследования с временной блокировкой тоже его используют.
В обозревателе блоков неизрасходованный выход P2WSH выглядит как строка bc1q из 62 символов и не более того. Он выглядит одинаково независимо от того, охраняет ли он два ключа или двадцать, а условия проявляются только тогда, когда биткоины перемещаются.
Резервные копии должны включать скрипт. Сид-фраза восстанавливает ключи, а не произвольные скрипты, поэтому храните дескриптор или точные байты скрипта вместе с сид-фразой и убедитесь, что можете восстановить все из них, прежде чем на адресе появятся реальные деньги.
P2WSH vs скрипт свидетеля
P2WSH является выходом; скрипт свидетеля представляет собой содержимое, к которому он привязан. Выход содержит 32 байта хеша и ничего больше, поэтому он не несет никакой информации об условиях, связанных с выходом, и ничто из скрипта не появляется в блокчейне, пока трата его не опубликует. В результате обязательство оказывается неравным. Отправителю нужен только адрес, и он может заплатить, ничего не понимая. Получателю нужны точные байты скрипта навсегда, потому что их потеря делает биткоины неспособными к трате, сколько бы приватных ключей ни сохранилось.