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

Глоссарий / Протокол и обновления

Трата по пути скрипта

Что такое трата по пути скрипта?
Трата по пути скрипта разблокирует выход Taproot, раскрывая один скрипт листа, входные данные, которые его удовлетворяют, и блок управления, доказывающий, что этот лист был зафиксирован адресом.

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

Траты по пути скрипта являются запасным маршрутом из выхода Taproot и применяются тогда, когда кооперативная подпись, на которую все рассчитывали, так и не появилась. Доказательство содержится в блоке управления размером 33 байта плюс еще 32 байта на каждый уровень дерева, а BIP-341 ограничивает это дерево 128 уровнями. Выбор этого маршрута публикует использованную вами ветвь, поэтому то единственное условие, на которое вы фактически опирались, перестает быть приватным.

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

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

Этот последний элемент является блоком управления, и его длина проверяется раньше всего остального. Она должна составлять ровно 33 + 32m байт для целого числа m от 0 до 128, а любая другая длина сразу приводит к отказу. BIP-341 устанавливает потолок в 128, потому что оптимально упакованное дерево становится глубже только для листа с вероятностью использования менее 1 из 2^128.

Первый байт несет две несвязанные вещи. Примените к нему маску 0xfe, и вы получите версию листа, 0xc0 для правил tapscript; замаскированный бит является четностью координаты Y ключа выхода и присутствует, чтобы трату можно было проверять пакетно. Следующие 32 байта являются внутренним публичным ключом, тем самым, который подписал бы кооперативную трату; все, что после, является путем Меркла, 32 байта на уровень.

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

Один байт может изменить все, что перед ним. Если свидетель содержит не менее двух элементов и последний начинается с 0x50, этот элемент отбрасывается как анекс до начала проверки. BIP-341 не определяет для него никакого смысла и предупреждает, что его включение может привести к "PERMANENT FUND LOSS" (безвозвратной потере средств).

Где это видно

Трату по пути скрипта можно распознать в обозревателе блоков как вход Taproot, свидетель которого, не считая анекса, содержит более одного элемента.

Собственный пример BIP-341 представляет собой дерево из пяти скриптов, от A до E. Трата скриптом D публикует D, а также блок управления с внутренним ключом и тремя хешами: C, E и объединенным хешем A и B. Этот блок управления занимает 129 байт для контракта из пяти условий, а остальные четыре скрипта никогда не публикуются.

Доказательство еще и кое-что выдает. Раздел безопасности BIP-341 отмечает, что глубина раскрытого листа выдает минимальную глубину дерева, и это "suggests specific wallet software that created the output and helps clustering" (указывает на конкретное кошельковое ПО, создавшее выход, и помогает кластеризации). Защита, которую предлагает BIP-341, состоит в отклонении от дерева, которое вероятности листьев иначе сделали бы оптимальным.

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

Трата по пути скрипта vs tapscript

Трата по пути скрипта является маршрутом; tapscript является языком, на котором говорят в его конце. BIP-341 определяет все вплоть до момента начала выполнения: блок управления, сортированное свертывание Меркла, проверку подстройки, бит четности. То, что выполняется дальше, определяется версией листа.

Сейчас только 0xc0 означает tapscript. Лист с любой другой версией не является ошибкой, потому что BIP-341 требует, чтобы выполнение завершилось успешно для неизвестных версий листа. Это тот крючок, который позволяет более позднему мягкому форку определить другой язык скриптов внутри того же формата адреса bc1p, что делает трату по пути скрипта долговечной половиной пары.

Не путать с

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

Может ли кто-нибудь увидеть условия траты, которые я не использовал?

Нет. Трата по пути скрипта публикует один скрипт листа плюс хеши соседних узлов на его пути, а все остальные ветви навсегда остаются нечитаемым хешем. Публичным становится то, что путь скрипта вообще существовал и на какой глубине дерева находился раскрытый лист.

Почему блок управления несет бит четности?

Чтобы стала возможна пакетная проверка. Младший бит первого байта записывает, является ли координата Y ключа выхода четной или нечетной, что позволяет проверяющему поднять 32 байта из адреса обратно к единственной точке кривой вместо проверки обеих.

Читайте далее

Источники

Последняя проверка: 6 сентября 2026 г.

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

Еще в разделе «Протокол и обновления»

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