ビットコインでは、最終的に全参加者が一つの取引履歴を共有します。また、誰かが不正な取引をネットワークにねじ込もうとしても、ノード間で多数決投票(のようなもの)が行われ、少数派は負けます。それらのメカニズムを解説します。
5 ネットワーク
本ネットワークは、次に示すステップで動作する。
- 取引を行うと、その情報がすべてのノードに広められる。
- 各ノードは、取引情報を集めてブロックを生成する。
- 各ノードは、ブロックに対する演算量証明を開始する。
- 演算量証明に成功した最初のノードは、そのブロックを全ノードに広める。
- 各ノードは、ブロックを、多重使用が無く正しい取引だけを含むことを確認して、受け付ける。
- 各ノードは、受け付けたブロックのハッシュ値を埋め込んで、次のブロックを生成し始める。これが、ブロックを受け付けたことの表明ともなる。
各ノードは、最も長いチェーンのみを正当なものと見なし、その最終ブロックから演算量証明を開始して、さらにチェーンを伸ばそうとする。2つのノードが、内容の異なるブロックを同時に広めている場合は、受信順序の食い違いにより、演算量証明の対象チェーンが集団で統一されていないかもしれない。その場合、各ノードは演算しない側のブロックも保存しておく。この引き分けの状況は、次に誰かが演算を終えチェーンを伸ばしたときに解消する。演算量証明に負けた側のチェーンを計算していたノードは、長いチェーンに乗り換える。
取引情報は、必ずしも全てのノードに行き渡る必要は無い。一定数のノードに情報が届き、ある程度の時間が経てば、ブロックに取り込まれるからである。ブロック化された後も、多少の通信障害には耐えて拡散する。ノードがブロックを受信できなかった場合は、次のブロックが届いたときにそのことを知り得るので、欠けたブロックを他のノードに要求できる。
チェーンを伸ばす・乗り換えるなどの操作は、言葉だけでは理解しにくいので、引き続きWikipediaの図などをご覧下さい。
取引は、不正がないかどうか2段階でチェックされます。1段目は各ノードがブロックを生成する過程で、整合性がない取引がブロックに入るのを防ぎます。しかし、ノード自体が不正を行ったらどうなるか。それが2段目で、不正な取引を含むブロックをどこかのノードが生成しても、他のノードは受け付けません。でたらめな取引を全体に拡散させるのは、ほぼ不可能でしょう。
ただしノードは、自分が支払った取引を無効にすることが可能です。例えば、その送金以前に、ダミーのアドレスに対して全額を送金したというデータを作れば良いわけです。ですから、受取人はブロックが生成されるまでの10分間、さらに安全を期すなら、不正ノードの演算量証明が追いつけなくなるだろう数十分間を待って、取引を確認すべきです。どの程度待てばどれだけリスクが下がるかは、11節で検証します。
なお、どれほどCPU能力を持つノードでも、他人が自分に大金を支払ったというように取引情報をねつ造するのは、不可能です。取引データを作るには支払い側の秘密鍵が必要だからで、それが無い場合署名を検証できず、2段階のうちいずれかで却下されます。
最近のコメント