BIP 144
Segregated Witness(ピアサービス層)
原題: Segregated Witness (Peer Services)
- Status
- Deployed
- Type / Layer
- Specification / Peer Services
- Author
- Eric Lombrozo, Pieter Wuille
- 割り当て日
- Status 検証日
- 原文
- github.com/bitcoin/bips/blob/master/bip-0144.mediawiki
要約
SegWit を P2P ネットワーク上で運ぶための、通信と直列化の取り決め。BIP141 がコンセンサスルールとしての witness を定義するのに対し、こちらは witness を扱えるノードがどう名乗り合い、どう転送するかを定める。新しい直列化形式では version の直後に marker(必ず 0)と flag(0 以外)の 2 バイトを置き、入力ごとの witness を locktime の前に並べる。旧来のパーサから見ると marker の 0 は入力数 0 に見えて不正な形式になるため、witness を理解しないノードが誤って受理することがない。witness を持たないトランザクションは従来どおりの形式で直列化する。トランザクション ID は引き続き witness を含まない旧形式から計算し、witness を含む新形式のハッシュは別の識別子として扱う。ノードは witness を扱えることを NODE_WITNESS というサービスビットで広告し、要求側が getdata で MSG_WITNESS_TX / MSG_WITNESS_BLOCK を指定したときにだけ witness 付きで送られる。指定がなければ witness を削いだ形で届くため、更新していないノードも従来どおり動き続けられる。
技術的意義
ソフトフォークとしての SegWit を「全ノードの同時更新なしに展開できる」ものにしている層である。旧ノードには従来どおり解釈できる形で届き、対応ノードどうしだけが witness をやり取りする。能力を名乗り合ってから、要求されたときにだけ拡張形式を返すという型は、以後のネットワーク層の拡張の下敷きにもなった。
関連する BIP
関連する解説記事
このページに掲載しているのは原文の翻訳ではなく日本語の要約です。BIP は原文が正であり、Status を含むメタデータは上記の検証日時点で bips リポジトリから転記した値です。実装・検証の際は必ず原文を参照してください。