確認が取れるまで軽く受け止めてほしいが、以下が自分の理解だ……
問題自体にバリエーションはない――すべてのノードが同時に同じブロックに取り組むことが意図されている(レイテンシーなどを考慮して)。運の要素は、各ノードが新しいブロックの解決を開始する際に生成するランダムな数値(ナンス)にある。新しいブロックを解く必要がある時、各ノードはランダムな値(ナンス)を生成し、それを使ってブロックをハッシュする。そのハッシュが正しくなければ、ナンスをインクリメントして、新しいインクリメント済みの値で再度ブロックをハッシュする。
ナンスと hash について言っていることは正しい。だが……
みんな別々のブロックに取り組んでいるんだ。
ブロック作成者に 50BTC を支払うには、その送り先となる Bitcoin Address を知っている必要がある。 ブロック作成者が自分の作り出した 50BTC を使えるようにするには、その 50 が支払われた bitcoin address に紐づく秘密鍵を持っている必要がある。
誰もがそれぞれ別の秘密鍵を持っているので(ランダムに生成される)、誰もがそれぞれ別の Bitcoin Address(紐づく公開鍵を hash したもの)を持っている。
ブロックの構成要素のひとつが、その 50BTC をブロック作成者の Bitcoin Address に支払うトランザクションの hash だ。
つまり、みんな別々のブロックを持っているということだ。
最初に自分のブロックを解いた者が「勝ち」となり、そのブロックは全員から「次」のブロックとして認められる。