メインコンテンツへスキップ

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 リポジトリから転記した値です。実装・検証の際は必ず原文を参照してください。

bitcoin/bips で原文を読む