前回の連載で「マイニング(採掘)」とは、新しいブロックを過去のすべての取引記録が記載されたチェーンの最後尾にガチャンとはめ込むための鍵を見つける作業だと説明しました。具体的にどのような作業をしているのでしょうか。
ノンス値を片っ端から試して「鍵」を見つける
個々のトランザクションがハッシュ関数によって64ケタのハッシュ値に置き換えられているように、実は、個々のブロックもハッシュ関数によって64ケタのハッシュ値に置き換えることができます。
そして、新たにブロックを追加するときは、「直前のブロックのハッシュ値+今回のブロックに含まれる全取引データ+任意の文字列(ノンス値)」を同様に64ケタのハッシュ値に置き換えたうえで、その最初の16、ないし17ケタがすべて0になるようなノンス値を見つけなければいけないと決まっているのです。
ノンス値はランダムな32ビットの値なので自由に決めることができますが、ノンス値が1ケタでも違えば、生成されるハッシュ値もまったく違ったものになります。つまり、任意のノンス値を片っ端から当てはめて、しらみつぶしに調べる必要があるのです。
先ほど二つのハッシュ値の例をあげましたが、たまたま生成されたハッシュ値の最初の16ケタが0になる確率がどれだけ低いか、想像もつきません。気が遠くなるような回数の試行錯誤が必要なのです。
何億回、何兆回にも及ぶ試行錯誤を、わずか10分のうちに行うわけですから、膨大なマシンパワーと電力が必要です。しかし、何か意味のある計算をしているわけではなく、たまたまハッシュ値の最初の16ケタが0になるようなノンス値を探しているだけです。これがマイニングの実際です。
10分ごとに繰り広げられる承認レース
マイニングはひとりで行っているわけではなく、10分ごとに、世界中のマイナー(採掘者)が参加してレース形式で行われています。そして、そのようなノンス値を最初に見つけた人が勝者となり、その報酬としてビットコインがもらえるのです。レースの勝者だけがビットコインを「掘り当てる」ことができるわけです。
残念ながら、一番になれなかった二番手以降の人たちは、たしかにそれが正しい鍵かどうかを確かめます。鍵を見つけるまでは大変ですが、その鍵が正しいかどうかは一発でわかる。それがこのマイニングレースのおもしろいところです。
だいたい6人が承認した段階で、それは正式なブロックと認められて、ブロックチェーンの最後尾に新たに追加されます。そのような競争を10分ごとに繰り広げているのです。
毎レースはおよそ10分で決着がついてしまうので、誰かが勝者になるたびに、新しいレースが「ヨーイ、ドン」ではじまります。鍵を見つける作業は、総当たり方式でひたすら試行錯誤するだけなので、ハイスペックなマシンを駆使したマイナーのほうが有利ですが、必ずしも大金をかけてシステムを組んだほうが勝つとは限らないところも、このレースの魅力です。
とはいえ、マイニングの難易度は時間がたつにつれて、どんどん上がっていきます。考え方としては、円周率のπを計算するときに、1億ケタ目の数字を見つけるのと、1億1ケタ目、1億2ケタ目の数字を見つけるのでは、ケタ数が増えるほど難易度が上がっていくのと同じです。現在は0が16個並ぶハッシュ値を探していますが、これを17個に増やせば、格段に見つかる可能性が減るわけです。
勝者だけが報酬としてビットコインをもらう
cakesは定額読み放題のコンテンツ配信サイトです。簡単なお手続きで、サイト内のすべての記事を読むことができます。cakesには他にも以下のような記事があります。