ブロックの中身:ヘッダー、ブロック高、サイズ、ブロック補助金
ブロックは小さな固定のヘッダーと、トランザクションからなる本体でできています。どちらがどちらかを知ると、マイニングが実際に何をハッシュしているのか、そしてその理由がわかります。
2 つの部分があり、ハッシュされるのは一方だけ
ブロックにはヘッダーとボディがあります。ボディはトランザクションで、チェーンの混雑具合によって数百バイトのこともあれば数メガバイトのこともあります。ヘッダーはブロックの固定サイズの要約で、ほとんどのチェーンではちょうど 80 バイトです。
マイニングでハッシュされるのはヘッダーだけです。これがこの記事で最も役に立つ事実です。そうでなければ不可能に見えることを説明してくれるからです。マイナーは 1 秒に何十億もの組み合わせを試しますが、試すたびにトランザクションでいっぱいのブロックをハッシュし直すのであれば、それはできません。実際にはそうしていません。ハッシュし直すのは 80 バイトです。
ヘッダーの 6 つのフィールド
ヘッダーにはバージョン、前のブロックのハッシュ、マークルルート、タイムスタンプ、難易度ビット、nonce が入っています。どれにも存在する理由があり、そのうち 2 つがほとんどの仕事をしています。
前のブロックのハッシュが、これをチェーンにしているものです。各ヘッダーは 1 つ前のブロックを指しているので、古いブロックを書き換えるとそのハッシュが変わり、次のヘッダーが壊れ、その次も壊れ、先端まで続きます。プルーフ・オブ・ワークの安全性の議論は、このフィールド 1 つにすべて詰まっています。
マークルルートは、ボディのすべてのトランザクションを要約する 1 つのハッシュです。トランザクションを 1 つでも、たとえ 1 バイトでも変えるとマークルルートが変わり、ヘッダーが変わり、それまでに試したハッシュはすべて無価値になります。80 バイトがどんな大きさのブロックの代わりを正当に務められるのはこのためです。
難易度ビットは、ハッシュが下回らなければならない目標値を圧縮した形で表したものです。タイムスタンプはおおよそのブロック作成時刻で、近似でかまいません。nonce はマイナーが自由に変えられるフィールドで、これがあるからこそ探索がそもそも可能になります。
nonce は使い切られるが、それで問題ない
nonce は小さなカウンターで、現代のマイナーはそれが取りうるすべての値をほぼ一瞬で使い切ります。行き止まりのように聞こえますがそうではありません。nonce は変えるのに最も都合がよいものにすぎず、変えられる唯一のものではないからです。
使い切ると、マイナーはヘッダーに影響する別のものを変えます。タイムスタンプを動かすことができます。coinbase トランザクションを少し変えるとマークルルートが変わり、まったく新しいヘッダーを探索できます。プールでは、まさにこのために extranonce があります。プールが各マイナーに異なる開始点を渡すので、2 人が同じ数字を掘ることはありません。
ブロック高はフィールドではなく位置
ブロック高とは、あるブロックの前にいくつのブロックがあるかです。ジェネシスブロックがブロック高 0、次が 1、というように続きます。プールの「ブロック」ページやどのエクスプローラーでも、各項目の横に表示される数字です。
ブロック高は実はヘッダーに保存されていないことを知っておく価値があります。ブロックがチェーンのどこにあるかから導かれます。ほとんどの現代的なチェーンではブロック高が coinbase トランザクションにも書き込まれます。これはブロック高の異なる 2 つのブロックが決してバイト単位で同一にならないよう後から追加されたルールですが、ブロック高の正式な答えはやはりその位置です。
承認数を語るのにブロック高が自然な方法なのもこのためです。6 ブロックの深さに埋まったトランザクションとは、そのブロック高が先端より 6 低いもので、ブロックが 1 つ加わるたびに書き換えのコストがそれだけ高くなります。
サイズはボディのことで、埋まっていくのはそこ
ブロックサイズは実質的にボディのサイズです。ヘッダーはそれに比べれば誤差の範囲だからです。チェーンにブロックサイズの上限があると言うとき、話しているのはヘッダーではなく、入るトランザクションの数です。
満杯のブロックと空のブロックに必要なマイニングの作業量はまったく同じです。難易度はブロックを見つける難しさを決め、サイズはブロックが運ぶ量を決めます。この 2 つは無関係で、混同すると手数料についての誤った直感が数多く生まれます。
サイズが影響するのは手数料市場です。入る量より多くのトランザクションが入りたがると、高い手数料を提示するものが先に入り、ブロック内の手数料の合計が上がります。それはそのままブロックの支払額に反映されます。
coinbase トランザクションとブロック補助金
すべてのブロックの最初のトランザクションは特別です。送信者がなく、無からコインを生み出し、それをブロックを作った人に支払います。これは coinbase トランザクションと呼ばれ、同名の取引所とは関係ありません。
支払われるのは、ブロック補助金にブロック内のほかのすべてのトランザクションの手数料を加えたものです。ブロック補助金は新たに発行される部分で、チェーンの発行スケジュールで決まり、ほとんどのコインでは時間とともに減ります。手数料は、ユーザーが取り込んでもらうためにトランザクションに付けたものです。この 2 つを合わせたものがブロック報酬です。
プールでは coinbase がプールに支払い、プールはその報酬を、そのラウンドにシェアを提供したすべての人に分配します。これは回り道ではありません。分割できない 1 回の支払いとして届く報酬を、プールが多くの人に支払えるのはこの仕組みによるものです。
マイニング中にこれが重要な理由
ブロックの形がわかると 3 つのことが明らかになり、その 3 つはどれも頻繁に話題になります。
- 新しいブロックが来るとすぐに作業が無効になる理由。前のブロックのハッシュのフィールドが変わったので、探索していたヘッダーはもう存在しません。その後に提出したものはステイルシェアになり、どれだけ速くてもそれは直せません。
- プールが頻繁に新しい作業を送ってくる理由。プールが取り込みたい新しいトランザクションのたびにマークルルートが変わり、より新しいテンプレートはより多くの手数料を含むので、同じ労力でより多くの報酬になります。
- 収益の見積もりにブロックサイズが出てこない理由。収益を決めるのは難易度、ブロック補助金、手数料であり、ボディに何バイト入っていたかではありません。
このプールの「ブロック」ページにはブロック高、報酬、発見時刻が表示されます。上の内容のうち役に立つ部分が 1 行にまとめられたものです。エクスプローラーでは、それを支払った coinbase トランザクションを含め、残りを見ることができます。