用語集 / トランザクションと手数料
Coinbaseブロック高
- Coinbaseブロック高とは?
- coinbaseブロック高とは、ブロック自身の高さをcoinbaseフィールドの先頭バイトとして書き込んだものであり、BIP34が2013年3月以降のすべてのブロックに義務付けているものです。
BIP-34で規定されています。
これは、実際のバグに対するビットコインの最も安価な修正です。このルール以前は、coinbaseトランザクションが同一の2つのブロックが同一のトランザクションIDを生み出し、それが2010年のブロック91,842と91,880で発生しました。高さを書き込むことで、すべてのcoinbaseが一意になり、誰でもブロック自身からそのブロックの位置を読み取れるようになります。
仕組み
高さはスクリプトのプッシュとして保存されるため、パーサーは長さを表す1バイトを読み、続けてそのバイト数分の数値を読み取ります。
数値はリトルエンディアンで最小限の符号化により、ビットコインスクリプトがあらゆる整数を符号化するのと同じ方法で書き込まれます。現在の高さでは3バイトを要するため、プッシュは03に続けて高さを読み取ります。半減期のブロックであるブロック840,000は、したがってそのcoinbaseを03 40 d1 0cで開始します。3バイトのプッシュに続き、最下位バイトを先頭にして840,000が続きます。3バイトは8,388,607までのあらゆる高さをカバーし、10分ブロックではこれは1世紀以上先のことですが、その日が来れば符号化はひとりでに4バイトへと広がります。
BIP34は、ブロックのバージョン番号を基準とするマイナー起動のソフトフォークとして展開されました。バージョン2を宣言するブロックは1,000の移動窓で数えられ、直近1,000のうち750に達すると、高さを欠いたバージョン2のブロックは無効となり、950に達すると旧バージョン1の形式は完全に拒否されました。受け入れられた最後のバージョン1のブロックは227,835で、タイムスタンプは2013年3月24日であり、Bitcoin Coreは今も有効化の高さを227,931としてハードコードしています。
このルールはまた、高コストな検査を無コストな検査に置き換えました。BIP30はすでに、新しいトランザクションが既存の未使用トランザクションのIDを再利用することを禁じていましたが、それを強制するにはすべてのブロックのすべてのトランザクションについてデータベース参照が必要でした。すべてのcoinbaseが構造上異なるものになれば、重複したIDは発生し得ないため、ノードは切り替え後にマイニングされたすべてについてその参照を省略します。検証を遅くするのではなく速くするコンセンサスルールは、注目に値するほど珍しいものです。
目にする場所
どのブロックエクスプローラーもデコードされたcoinbaseを表示し、その先頭にあるのが高さです。
影響が表れるのはマイニングです。プールはノードが提供するテンプレートから独自のcoinbaseトランザクションを組み立てますが、誤った高さを挿入したプールは、通常は到着したばかりのブロックとの競争の最中に、すべてのノードがbad-cb-heightエラーで破棄するブロックを生成します。電気は消費され、プルーフ・オブ・ワークは有効で、報酬はゼロです。
これは、チェーン全体を持たずにブロックについて何かを証明しようとする人にとっても重要です。ブロックヘッダーは自身の高さを記載していません。それはジェネシスブロックまで遡って数えることで知ります。完全なブロックはそれを記載しており、その場所はマークルルートに含まれ、したがってプルーフ・オブ・ワークにも含まれるため、coinbaseとマークルブランチに裏付けられた高さの主張は単独で成立します。サイドチェーン、タイムスタンプサービス、ライトクライアントのプロトコルはすべてこの性質に依拠しています。
Coinbaseブロック高vsブロック高
ブロック高はチェーン内の位置であり、Satoshiが2009年1月3日にマイニングしたブロックまで遡って数えれば誰でもたどり着ける数値です。coinbaseブロック高は、コンセンサスが要求するため、その同じ数値をブロック自身のデータの中に書き込んだものです。一方はブロックがどこにあるかについての観測であり、もう一方はマイナーが誤り得て、そのためにブロックを失い得るフィールドです。