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

BIP 9

タイムアウトと遅延を伴うバージョンビット

原題: Version bits with timeout and delay

Status
Deployed
Type / Layer
Informational
Author
Pieter Wuille, Peter Todd, Greg Maxwell, Rusty Russell
割り当て日
Status 検証日
原文
github.com/bitcoin/bips/blob/master/bip-0009.mediawiki

要約

ソフトフォークを有効化するための仕組みで、複数の変更を同時並行で進められるようにした提案です。それまでの BIP34 方式はブロックの nVersion を整数として比較していたため、一度に一つの変更しか扱えず、しかも有効なバージョン番号を恒久的に消費してしまっていました。BIP9 は nVersion をビットベクトルとして解釈し、bit 0 から 28 までのそれぞれを独立した変更の追跡に割り当てます。各デプロイは対象ビット・開始時刻・タイムアウト時刻をパラメータに持ち、DEFINED / STARTED / LOCKED_IN / ACTIVE / FAILED という状態を、2016 ブロックの難易度調整期間を単位として遷移します。STARTED の期間中に該当ビットを立てたブロックが閾値(mainnet では 2016 ブロック中 1916、およそ 95%)に達すると LOCKED_IN となり、さらに 1 期間を置いてから ACTIVE になります。この遅延は、まだ更新していないノードやマイナーが有効化前に対応するための猶予です。タイムアウトまで閾値に届かなければ FAILED となり、そのビットは別の提案に再利用できます。

技術的意義

マイナーのシグナリングによって有効化の可否とタイミングを決めるという、その後のソフトフォーク展開の共通様式を作った規格です。SegWit(BIP141)の展開に使われ、Taproot でも、期間を短く区切って早期に成否を確定させる Speedy Trial という形で使われました。一方、少数のハッシュレートがシグナルを控えるだけで提案を失効させられるという性質は批判を受け、BIP8 の設計につながっています。

関連する BIP

関連する解説記事

このページに掲載しているのは原文の翻訳ではなく日本語の要約です。BIP は原文が正であり、Status を含むメタデータは上記の検証日時点で bips リポジトリから転記した値です。実装・検証の際は必ず原文を参照してください。

bitcoin/bips で原文を読む