ГЛАВНАЯ / ИНСТРУКЦИИ / ANNEX В TAPROOT WITNESS: КАК РАСПОЗНАТЬ ДОПОЛНИТЕЛЬНЫЙ ЭЛЕМЕНТ
Annex в Taproot witness: как распознать дополнительный элемент
Annex – необязательный элемент Taproot witness. Узел распознаёт его по позиции и первому байту, убирает до выбора key path или script path, но учитывает в signature message и размере транзакции. Это не отдельная колонка базовой транзакции и не исполняемый Script.
Annex определяется по последнему элементу witness и маркеру 0x50
BIP341 рассматривает последний элемент witness как annex, если в witness не менее двух элементов и первый байт последнего элемента равен 0x50. После удаления annex протокол выбирает путь: один оставшийся элемент означает key path, два или больше – script path. Позиция элемента поэтому так же важна, как его байтовое содержимое.
Не любой байт 0x50 где-нибудь в транзакции означает annex. Убедитесь, что это Taproot-вход, проверьте число items и именно первый байт последнего witness элемента. Если нужного условия нет, annex не выделяется.
- вход подтверждён как P2TR
- последний witness item проверен по маркеру
- условие числа элементов соблюдено
Annex не заменяет аргументы скрипта или control block
Для script path структурные последние элементы после возможного удаления annex – tapscript и control block. Annex не становится начальной частью стека исполнения tapscript. Его содержимое не исполняется как opcodes и не заменяет аргументы ветви, скрипт или доказательство дерева.
При key path подпись остаётся нужным элементом witness. Annex – отдельный item, а не произвольное продолжение подписи. При ручном декодировании сверьте последовательность с BIP341, иначе можно принять annex за ещё один аргумент или ошибочно определить путь расходования.
Annex покрывается подписью и увеличивает witness
BIP341 включает присутствие или отсутствие annex и его содержимое в Taproot signature message. Поэтому добавление, удаление или изменение annex может сделать подпись недействительной. Сверьте witness до подписания и не редактируйте его после создания подписи.
Annex сериализуется в witness и влияет на вес транзакции, следовательно может изменить виртуальный размер и требуемую комиссию. Точный эффект зависит от размера элемента и прочих частей транзакции. Не считайте его бесплатным только потому, что содержимое не исполняется.
- annex включён в signature message
- witness size учтён в весе
- txid и wtxid различены
Сначала отделите annex, затем классифицируйте оставшийся witness
Сохраните исходную последовательность witness items и их длины. Примените условие BIP341, отметьте annex или его отсутствие, затем определите key path либо script path по оставшимся элементам. В script path отдельно проверяются tapscript, control block, leaf version и Merkle proof.
При аудите подписи сверьте hash type, входные данные, outputs и annex commitment. Проверяйте raw transaction или wtxid: txid не включает witness. Декодер должен поддерживать Taproot и не терять данные при упрощённом отображении.
Частые вопросы
Annex находится в scriptPubKey?
Нет. Это распознаваемый элемент witness Taproot-входа.
Первый байт 0x50 всегда означает annex?
Нет. Важны Taproot-контекст, позиция последнего элемента и число items.
Annex исполняется как tapscript?
Нет. Он удаляется до выбора пути и игнорируется при выполнении, но покрывается подписью.
Можно изменить annex после подписи?
Изменение может нарушить подпись, поскольку annex включён в signature message.
Annex влияет на вес?
Да. Он сериализуется в witness и учитывается в весе транзакции.
Чек-лист: annex в taproot witness: как распознать дополнительный элемент
- вход подтверждён как P2TR;
- позиция и маркер проверены;
- annex отделён от signature/script/control block;
- его commitment учтён до подписи;
- witness включён в расчёт веса;
- txid и wtxid не смешаны;
- raw witness сохранён.
Материал подготовлен редакцией сайта и проверен 5 ноября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.