127 / 691WIT

Witness data

Witness data содержат доказательства для расходования входов SegWit. Они входят в транзакцию, хотя исходное вычисление txid их исключает.

Witness — поле элементов стека для отдельных входов. Его смысл определяют версия и условие расходуемого выхода; это не обязательно отдельно исполняемый скрипт.

У каждого входа свой список элементов в сериализации witness. Проверка подписи использует сообщение, определяемое соответствующей версией скрипта; само наличие данных не доказывает действительность. [BIP 141 — Segregated Witness] [BIP 143 — SegWit signature hashing]

txid вычисляют из исходной сериализации без witness. wtxid охватывает полную сериализацию с witness; у транзакции без witness идентификаторы совпадают. [BIP 141 — Segregated Witness]

Witness program — условие с версией в расходуемом выходе. Witness предоставляет последующая расходующая транзакция; это не то же поле и не резервная копия набора UTXO. [BIP 141 — Segregated Witness]

Нативный SegWit версии 0 требует пустого scriptSig. В обёртке P2SH scriptSig помещает witness program в стек; доказательства расходования остаются в witness. [BIP 141 — Segregated Witness]

P2WPKH предоставляет подпись и открытый ключ. У P2WSH последний элемент — witnessScript, хеш которого должен соответствовать программе; предыдущие элементы задают начальный стек. [BIP 141 — Segregated Witness] [BIP 143 — SegWit signature hashing]

После удаления annex, если он есть, Taproot различает один элемент подписи для ключевого пути и скриптовый путь со скриптом и контрольным блоком. Правила версии 0 нельзя механически переносить на версию 1. [BIP 341 — Taproot]

BIP 141 связывает witness через дерево wtxid и обязательство в coinbase. Для этого дерева coinbase имеет нулевой wtxid; обязательство объединяет корень с зарезервированным значением в 32 байта. [BIP 141 — Segregated Witness]

Изменение только witness не меняет txid. Но отделение не гарантирует неизменность всех остальных полей или сочетаний входов; изменённое доказательство всё равно должно пройти проверку. [BIP 141 — Segregated Witness] [Bitcoin Core — Segregated Witness benefits]

Байты, добавленные сериализацией witness, дают 1 WU против 4 WU базового байта. Full Node по-прежнему нужны эти данные для соответствующей проверки; это не бесплатные данные вне цепочки. [BIP 141 — Segregated Witness] [Bitcoin Core v29.0 — Script interpreter]

Witness может публично раскрыть подпись, открытый ключ или использованную ветвь скрипта. Это не зашифрованное хранилище, оно не предназначено для закрытых ключей и не заменяет Seed Phrase или резервную копию кошелька. [BIP 341 — Taproot] [Bitcoin Developer Reference — Transactions]

Для полной картины прочитайте эту статью вместе с SegWit, Block weight, Bitcoin Script, Taproot. На эту статью также ссылаются Virtual byte (vbyte), Block weight.

DOC · 001BIP 141 — Segregated WitnessСпецификация ↗DOC · 002BIP 143 — SegWit signature hashingСпецификация ↗DOC · 003BIP 341 — TaprootСпецификация ↗DOC · 004Bitcoin Developer Reference — TransactionsДокументация ↗DOC · 005Bitcoin Core v29.0 — Script interpreterДокументация ↗DOC · 006Bitcoin Core — Segregated Witness benefitsДокументация ↗
Сначала источники · Не является инвестиционной рекомендацией