用語集 / マイニングとコンセンサス
バージョン2ブロック
別名はV2ブロックです。
- バージョン2ブロックとは?
- バージョン2ブロックとは、ヘッダーのバージョンフィールドが2であるブロックのことです。これはBIP34がコインベーススクリプトの最初の項目にブロック自身の高さを要求するようになったアップグレードです。
BIP-34で規定されています。
ブロックのバージョン番号はかつては単純な意味を持っていました。1が元の形式で、2がルールを1つ追加し、新しい番号が登場するたびに古い形式はマイニングできなくなりました。バージョン2はBIP34とともに導入され、Bitcoin Coreがブロック227,931以降でこれを強制しています。購入者としての行動がこれに依存することはありませんが、すべてのブロックエクスプローラーがこれを表示しており、コインベーススクリプトが数字で始まる理由を説明するものでもあります。
仕組み
状況:バージョンフィールドがカウンターでなくなったのは2016年のことです。BIP9がその上位ビットをシグナリング用のビットフィールドとして再定義したため、現代のブロックは2、3、4ではなく0x20000000のような値を示します。バージョン2が導入したBIP34のルールは恒久的なものであり、現在もすべてのブロックで検査されています。
バージョン2のブロックは、識別子の重複という問題を解決するために存在します。コインベーストランザクションには、それを一意にする入力がないため、同じ出力スクリプトと同じ任意のコインベースバイトをたまたま使った2人のマイナーが、同じトランザクションIDを持つバイト単位で同一のトランザクションを生成する可能性がありました。これは仮定の話ではありません。ブロック91,842とブロック91,880にはそれぞれ、それより前のブロックのものと同一のコインベーストランザクションが含まれており、後のコピーが未使用出力セットの以前のエントリを上書きし、使用可能なコインを破壊しました。BIP30は暫定措置として重複を全面的に禁止し、BIP34がその可能性を根本から取り除きました。
仕組みは小規模なものです。バージョン2のブロックは、コインベーススクリプトをブロック自身の高さから始めなければならず、その高さは最小エンコードのスクリプト数値として書かれます。2つのブロックが同じ高さを共有することはないため、2つのコインベーストランザクションが再び衝突することはあり得ません。導入は特定の期日ではなくしきい値を用いて行われました。最近のブロックの圧倒的多数がバージョン2を帯びると、バージョン1のブロックは無効になり、ネットワークは2013年3月にその地点を通過しました。
同じパターンはさらに2回繰り返されました。バージョン3のブロックはブロック363,725で厳格なDER署名エンコーディングを必須とし、バージョン4のブロックはブロック388,381でOP_CHECKLOCKTIMEVERIFYをもたらしました。その後、この連続は止まりました。32ビットのフィールドをカウンターとして扱うことは、BIP9が並列のアップグレードシグナルに転用した31ビットを無駄にしていたからです。
どこで目にするか
バージョンは、任意のエクスプローラーのブロックページとgetblock RPCの両方に、versionとversionHexとして表示されます。2011年のブロックを見れば1が、2013年半ばのブロックを見れば2が、今日のブロックを見ればビットフィールドが見えます。
BIP34の高さは、バージョンそのものより見つけやすいものです。最近のコインベーススクリプトをデコードすると、最初のバイトは高さであり、通常はその後にプールの識別テキストと、マイニングハードウェアが反復するエクストラナンス空間が続きます。エクスプローラーはその末尾をASCIIで表示することが多く、これによってブロックのコインベースからどのプールがそれをマイニングしたかが分かります。
バージョン2ブロックvsバージョン2トランザクション
バージョン2ブロックとバージョン2トランザクションは数字を共有するだけで、それ以外の共通点はありません。トランザクションのバージョン2はBIP68に由来し、相対ロックタイムを有効にします。これは、入力が使用される前に親出力が一定の経過時間であることを要求できるようにするものです。ライトニングネットワークはチャネルのタイムアウトのためにこれに依存しています。ブロックのバージョン2はBIP34に由来し、コインベースの一意性に関係します。異なるオブジェクト、異なるBIP、異なる年であり、両方のカウンターが2に達したという偶然以外に関係はありません。