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

BIP 34

ブロック v2 — コインベースへのブロック高の埋め込み

原題: Block v2, Height in Coinbase

Status
Deployed
Type / Layer
Specification / Consensus (soft fork)
Author
Gavin Andresen
割り当て日
Status 検証日
原文
github.com/bitcoin/bips/blob/master/bip-0034.mediawiki

要約

ブロックとトランザクションにバージョン番号を持たせて段階的な仕様変更の経路を作り、あわせて coinbase トランザクションの scriptSig の先頭にそのブロックの高さを入れることを義務づけた提案です。狙いは二つあります。ひとつは、ネットワーク全体が合意しながら構造を変えていくためのアップグレード機構を用意すること。もうひとつは、すべてのブロックを一意にすることです。coinbase の中身が完全に同じだと、まったく同じトランザクション ID を持つ coinbase が二度現れうるという問題がありましたが、必ず異なるブロック高が入るならこれは起こりません。加えて、鎖につながっていない状態で受け取ったブロックについても、どの高さのものかを内容だけから判断できるようになります。高さは最小限の長さで符号化した CScript として、長さ 1 バイトのあとにリトルエンディアンで書きます(genesis ブロックを 0 とする)。展開は二段階の閾値方式で行われ、直近 1000 ブロックのうち 750 が version 2 以上になった時点で不正な v2 ブロックを拒否し、950 に達した時点で version 1 のブロックそのものを拒否する運用に切り替えました。

技術的意義

バージョン番号でソフトフォークを展開するという発想の出発点であり、この方式を一般化して並行デプロイを可能にしたのが BIP9 です。coinbase に入るブロック高は現在も全ブロックに存在し、ブロックの内容だけから高さが分かるという前提は、検証やインデックス処理で当たり前に使われています。

関連する BIP

関連する解説記事

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

bitcoin/bips で原文を読む