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 は wtxid ツリーと coinbase のコミットメントで witness を拘束する。このツリーでは 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.