本文へスキップ
buybitcoinsmart

用語集 / トランザクションと手数料

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ブロック高は、コンセンサスが要求するため、その同じ数値をブロック自身のデータの中に書き込んだものです。一方はブロックがどこにあるかについての観測であり、もう一方はマイナーが誤り得て、そのためにブロックを失い得るフィールドです。

混同しやすい用語

よくある質問

数えるだけで済む高さを、なぜブロックが記載する必要があるのですか?

数えるにはチェーン全体が必要であり、また以前は同一のcoinbaseトランザクションが同一のトランザクションIDを生み出していたからです。高さをブロックの中に置くことで、すべてのcoinbaseが一意になり、高さをブロック単独で証明できるようになります。

マイナーが誤った高さを書き込むとどうなりますか?

すべてのノードがbad-cb-heightエラーでそのブロックを拒否し、マイナーは何も得られません。この誤りは通常、プールが1つの高さに対するテンプレートを組み立てている間に、競合するブロックが到着してチェーンの先端が移動することで生じます。

次に読む

関連用語

トランザクションと手数料のその他の用語

このページを英語で読む