用語集 / マイニングとコンセンサス
ステールブロック
- ステールブロックとは?
- ステールブロックとは、完全に有効でありながら競争に敗れたブロックのことです。同じ高さの別のブロックが先に採用されたため、ネットワークはそのブロックの上に構築され、このブロックは放棄されました。
2人のマイナーが1秒以内の差で解を見つけることはよくあり、その瞬間、ネットワークには2つの候補となる先端が存在します。先に伸びた方の枝が勝ち、2013年にビットコインを計測した研究者たちは、およそ1.7%のブロックが敗れた側に終わることを確認しました。読者にとってこれは見えません。ステールブロック内の支払いはメモリプールに戻り、再びマイニングされます。
仕組み
ステールブロックはブロック自体の欠陥ではなく、遅延によって生じます。
マイニングは調整のない抽選です。あるマシンが解を見つけると、そのプールがブロックを告知しますが、その告知が地球を越えるには時間がかかります。届くまでの間、他のすべてのマイナーはなお前の先端を掘り続けており、そのうちの誰でも同じ高さで2つ目の有効な解を見つける可能性があります。ここで真実の2つの版が存在し、どちらも正しく、次にどちらかの上にブロックを公開した者が引き分けを決します。もう一方はステールになります。
その時間の窓は計測できます。Christian DeckerとRoger Wattenhoferは2013年にネットワークを計測し、ブロックがノードの過半数に届くまでの中央値が6.5秒であり、その結果およそ1.7%のブロックが放棄されることを確認しました。それ以降、リレーは大幅に改善しました。BIP152で規定され、2016年8月にBitcoin Core 0.13.0で導入されたコンパクトブロックリレーでは、ピアがメモリプールにすでに保持しているトランザクションからブロックを再構成できるため、1~2メガバイトではなく数キロバイトを送信するだけで済み、専用のリレーネットワークによって通常の伝播は1秒未満になっています。
敗れるとプールはブロック全体を失います。ステールブロックのコインベース出力は承認された履歴に決して含まれないため、その補助金も手数料もまったく価値がありません。プロトコルもこれが起こり得ることを前提としています。ブロックで生成されたコインはさらに100ブロック、およそ16時間ロックされ、まさに、後に誤った枝にあったと判明する報酬を誰も使えないようにしています。
どこで確認できるか
ステールブロックが目に見えるのはブロックエクスプローラーやプールのダッシュボードで、通常は別の名前で表示されます。
いくつかのエクスプローラーは破棄されたブロックの一覧を公開し、それを孤児ブロック(orphaned blocks)として分類しています。ビットコインのこの分野における用語の混乱のほとんどはここから来ています。プールのダッシュボードは、マイナーが提出したシェアについてステール率や拒否率を報告します。ペイ・パー・シェアの仕組みでは、個々のマイナーにはその作業分が依然として計上され、プールが損失を吸収します。これはプール手数料で支払われるものの1つです。
Bitcoin Coreはこれを明確に示します。ノードに既知のチェーン先端を問い合わせると、最近のステールブロックは別の先端として現れ、valid fork(有効なフォーク)と表示されます。完全に検証され、あらゆる点で正しく、ただ、累積のプルーフ・オブ・ワークが最も大きいチェーンではないというだけです。
また、確認数が存在する理由そのものとしても目にします。確認1回の支払いは、まだ競争に敗れる可能性があるブロックに入っています。6ブロックの深さにある支払いはそうではなく、取引所が入金ポリシーを分ではなくブロック数で示すのはそのためです。
ステールブロックvsチェーン再編成
ステールブロックはオブジェクトであり、再編成は行為です。両者は同じ出来事を異なる立場から述べています。ノードがたまたま勝ったブロックを先に受け取った場合、敗れた方は単にチェーンの一部にならず、再編成は発生しません。敗れた方を先に受け取った場合、ノードはそれを切り離して切り替える必要があり、これが1ブロックの再編成です。このような単一ブロックの出来事は年に数回起こり、何も問題がないことを意味します。数ブロックに及ぶ再編成は話が別で、ビットコインのメインチェーンではごくまれにしか起きていません。