ビットコインは、どうやって二重取引を防いでいる?
ビットコインを発明し、未だその正体が分かっていないサトシ・ナカモト。そんなサトシが残した約2年間の文章を、小宮自由氏の解説と共に紹介する連載「サトシ・ナカモトが残した言葉〜ビットコインの歴史をたどる旅」の第8回。
まずサトシのメールの前に、本連載の元になっている書籍『ビットコイン バイブル:サトシナカモトとは何者か?』の著者フィル・シャンパーニュ氏の解説も掲載する。
フィル・シャンパーニュ氏の解説
この投稿で、サトシは、対立する二つの取引が採掘者に届いたら何が起きるかを説明している。受信した最初の取引が、採掘者が次のプルーフ・オブ・ワークに編入する取引となる。
サトシ・ナカモト 2008年11月09日 日曜日 11時14分17秒 -0800
それでは2008年11月9日11時14分17秒のサトシのメールをみていこう。
========================
Re:ビットコイン ピア・ツー・ピア 電子キャッシュ 論文
サトシ・ナカモト 2008年11月09日 日曜日 11時14分17秒 -0800
重要なことは、誰がどのビットコインの所有者かについて、完璧で一貫性のある情報が多くのノードに保存されているという点です。
しかし、一貫性の維持というのはきわどい話です。ある取引を誰かがネットワーク維持者(ノード)の一人に伝え、別の取引を別の誰かが別のネットワーク維持者に伝えると何が起きるのでしょうか。
取引は、グローバルに共有された過去の全取引に編入されるまでは有効にはなりませんし、一定の時間が経過して多くの新しい取引が到着するまでは、グローバルに共有された過去の全取引が、グローバルに共有されている事実は、誰も知りえません。
この仕組みは説明しましたか? ちょうどこの点が私の頭をよぎったところでした。あるいは、それが可能だと確信していたけれど、詳細については少しあいまいだったのでしょうか?
プルーフ・オブ・ワークのチェーンが同期問題の解決策であり、第三者への信用を必要とせずに、グローバルに共有される全取引履歴を知るとはどういうことか、という問題への解答です。
取引は速やかにネットワーク中に伝達されます。ですので、もし同一の取引の二つのバージョンがほぼ同時刻に伝達されたら、先にスタートした方が、より多くのノードにとっての最初に受け取る取引となります。
ノードが受け入れるのは最初に見た取引分のみで、二番目の到着分は拒否しますので、できるだけ早い取引の方が、次のプルーフ・オブ・ワークへの編入作業中の多くのノードを獲得できます。実際に、どちらの取引を先に見たかの観点から、各ノードは、先着分をプルーフ・オブ・ワークの作業に編入する形で一票を投じます。
もし、複数の取引が完全に同時刻に到着したら、どちらが最初にプルーフ・オブ・ワークに編入されるか確率半々のコイントスとなり、それでどちらが有効かを決めます。
ノードがプルーフ・オブ・ワークを見つけると、新たなブロックがネットワーク中に伝達され、それを全員がチェーンに加え、後続の次のブロックの作業をスタートさせます。もう片方の取引を作業していたノードは全員、そのブロックの編入作業は停止します。なぜなら、別のチェーンが承認されたことにより、その作業途中の分は無効となってしまうからです。
プルーフ・オブ・ワークのチェーンそれ自体が、グローバルに共有された全取引履歴に由来することの自己証明になります。ネットワークの過半数の側だけが、非常に難しいプルーフ・オブ・ワークのチェーンの生成に十分なCPUパワーを持っています。
プルーフ・オブ・ワーク・チェーンを受け入れることで、何がネットワークの過半数によって承認されたかを、利用者は知ることができます。取引がリンクへハッシュ化され、チェーン内で数リンク分、過去になったとき、グローバルの履歴に確実に刻印されることになります。
サトシ・ナカモト
暗号学メーリングリスト
========================
解説
いわゆる二重取引(二重支払)の問題をサトシが説明しています。簡単な例を挙げると、「1ビットコインだけ持っているときに、BさんとCさんに1ビットコインを送る取引を生成した場合、どちらが有効になるか?」です。
答えは単純であり、「先に多数が承認した方が有効になる」です。有効とならなかった取引は、永遠に無視されるため、事実上なかったことになります。
どの取引が有効になるかは、いうならば「計算速度による早いもの勝ちの投票」です。多数の票を得た取引が有効となります。計算能力によってしか投票ができないため、人の意志は介在せず完全に機械的に取引の有効性は決定されます。
小宮自由
(image:iStock/Adrian-Vidal)