Материал проверен 5 ноября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / BITCOIN TAPROOT SCRIPT PATH: КАК ПРОВЕРИТЬ СКРИПТ И CONTROL BLOCK

Bitcoin Taproot script path: как проверить скрипт и control block

При Taproot script-path spend транзакция раскрывает выбранную скриптовую ветвь и данные, доказывающие, что она входила в дерево, закоммиченное в выходном ключе. Проверка начинается с witness, отделяет возможный annex, затем валидирует script, control block, Merkle path и правила leaf version. Недостаточно убедиться, что раскрытый скрипт выглядит знакомо.

Структура witness

После optional annex скрипт и control block находятся в конце стека

BIP341 сначала проверяет наличие annex по позиции и маркеру. После возможного удаления один witness item означает key path, два или более – script path. Для script path предпоследний элемент – скрипт, последний – control block, а предыдущие элементы передают начальный стек аргументов.

Сверьте порядок элементов, длины и hex-значения. Ошибка сериализации или перестановка script и control block меняет проверяемую структуру. Источник данных должен показывать witness конкретного входа, а не только preview кошелька.

Control block

Control block связывает leaf и внутренний ключ с Taproot tree

Control block начинается байтом с leaf version и parity выходного ключа, затем содержит 32-байтовый internal key и Merkle path. Допустимая длина – 33 + 32m байт, где m – целое число от 0 до 128 включительно по BIP341. Неверная длина или некорректный internal key делают проверку неуспешной.

Валидатор вычисляет TapLeaf commitment из версии и скрипта, сворачивает Merkle path до корня, затем применяет tweak к internal key. Полученный output key должен совпасть с программой P2TR выхода с соответствующей чётностью. Witness доказывает включение leaf в commitment, а не просто предъявляет независимый скрипт.

  • control block length соответствует 33 + 32m
  • internal key декодирован
  • Merkle path свёрнута до output key
Leaf version и tapscript

Текущий tapscript проверяется по правилам BIP342

Leaf version задаёт правила интерпретации скрипта. Для tapscript BIP342 использует версию 0xc0 с учётом parity-бита, упакованного в control block. Неизвестную leaf version нельзя автоматически читать как обычный Bitcoin Script или проверять по догадке.

В tapscript действуют Schnorr signature opcodes, CHECKSIGADD, правила обработки подписей и sigops budget. CHECKMULTISIG и CHECKMULTISIGVERIFY отключены. Перед анализом условных ветвей выясните фактическую версию leaf и применимый набор правил.

  • leaf version сверена
  • правила BIP342 применены только к tapscript
  • финальное условие стека прошло
Исполнение и диагностика

После проверки commitment отдельно валидируйте результат скрипта

Затем tapscript исполняется на аргументах witness согласно BIP342. Проверьте, какая ветвь выполняется, какие подписи относятся к каким ключам, как обрабатываются пустые подписи и каким условием завершается скрипт. Верная Merkle proof ещё не означает, что условие траты выполнено.

Для аудита сохраните scriptPubKey исходного выхода, полный witness, raw transaction, block version и данные подписей. Независимо пересчитайте leaf hash и дерево совместимым узлом или инструментом. До подписи дополнительно сверьте получателя, сумму и сдачу: корректность Script не подтверждает благонадёжность контрагента.

FAQ

Частые вопросы

Что доказывает control block?

Он связывает раскрытые leaf и internal key с Taproot output key через Merkle path и parity.

Какие элементы witness относятся к script path?

После optional annex два последних элемента – script и control block; предшествующие дают стек.

Любая версия leaf является tapscript?

Нет. BIP342 относится к определённой версии leaf; другие нельзя толковать по предположению.

Если Merkle proof верна, средства можно потратить?

Нет. Также должны пройти исполнение скрипта и проверки подписей.

Раскрывается ли всё дерево по адресу?

Нет. Адрес несёт commitment, а witness расходования раскрывает выбранный путь.

Итоговая проверка

Чек-лист: bitcoin taproot script path: как проверить скрипт и control block

  • исходный output подтверждён как native P2TR;
  • optional annex обработан по BIP341;
  • script и control block извлечены без перестановки;
  • длина control block и leaf version допустимы;
  • Merkle root и tweaked output key совпадают;
  • правила BIP342 применены к tapscript leaf;
  • аргументы и исполнение скрипта проверены.

Материал подготовлен редакцией сайта и проверен 5 ноября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.