Пройти цепочку решений · От адреса к скрипту

P2SH: адрес, за которым спрятались условия траты

До P2SH сложный способ получения BTC создавал неудобный вопрос: кто должен описывать все условия — отправитель или будущий получатель? В 2012 году BIP 16 предложил отправлять средства не на открытый сценарий, а на его короткий хеш. Полный сценарий раскрывался только во время траты. Решение выглядит технической деталью, но оно изменило распределение ответственности между участниками платежа.

Биткоин платит не человеку, а условию

Выход транзакции содержит программу Script, которая определяет условия следующей траты. В простом раннем варианте достаточно было предъявить подпись для одного открытого ключа. Но Script позволял выразить и более сложные схемы, например требование двух подписей из трёх.

Если отправитель должен получить и вставить весь сложный сценарий, повышается риск ошибки. Ему приходится работать с длинными данными, платить за дополнительное место и поддерживать типы условий, которые нужны не ему, а получателю.

Идея: платить хешу сценария

P2SH заменил полный сценарий в выходе на короткую конструкцию: хеш должен совпасть с хешем сценария, который позднее предъявит получатель. Адрес из BIP 13 стал удобной записью этого 20-байтового значения с контрольной суммой.

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

Что происходит при расходовании

Получатель публикует redeemScript — исходный сценарий — вместе с данными, которые его выполняют: подписями, ключами или другими элементами. Узел сначала проверяет, что хеш раскрытого сценария совпадает со значением в старом выходе.

Затем сценарий исполняется уже как условие траты. Одного совпадения хеша недостаточно: подписи и остальные правила тоже должны пройти проверку. Подменить сценарий другим практически невозможно без нахождения коллизии используемой хеш-функции.

Кому досталась сложность

BIP 16 прямо формулировал цель: перенести ответственность за предоставление условий с отправителя на получателя. Получатель выбирает схему защиты и обязан сохранить redeemScript вместе с ключами.

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

Почему обновление было спорным

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

Обсуждались и другие варианты, включая OP_EVAL. Автор BIP 16 признавал конструкцию неидеальной, но считал её менее рискованной и более совместимой с уже созданной инфраструктурой адресов.

Как сеть показывала готовность

Майнеров просили помещать строку /P2SH/ в coinbase-транзакции. По доле таких блоков оценивали поддержку. Первая предложенная дата активации была перенесена, а окончательное применение новых правил связали с 1 апреля 2012 года.

Сигнал майнера не был голосом владельца BTC и не переписывал программу пользователя автоматически. Он помогал оценить риск раскола в момент, когда производители блоков должны были начать применять одно правило одновременно.

Наследие P2SH

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

Позднее SegWit и Taproot развили идею обязательства перед скрытыми условиями другими способами. Но принцип сохранился: короткое обязательство появляется при получении, а необходимые детали раскрываются при расходовании.

Отправителю нужен короткий адрес. Получатель сам отвечает за условия, которые за ним стоят.

Источники и проверка

  1. BIP 16: Pay to Script Hash
  2. BIP 13: формат P2SH-адреса
  3. BIP 11: стандартные multisignature-транзакции
  4. Исходное обсуждение P2SH на BitcoinTalk

Исторический и технический материал. Не создавайте собственные сценарии хранения без проверенного программного обеспечения и проверяемого плана восстановления.

Вернуться к рубрике