先週、ビットコインの2重支払いがあったという騒ぎで価格が急落しました。もちろんこれはFUDで、二重支払いはなかったのですが、多くの人が信じてしまいました。つまり、ほとんどの人はビットコインの動作原理について理解していないということなのです。そこで、もう一度、基本から、二重支払いの問題について解説します。
二重支払いの基礎知識
まず、二重支払いを防ぐ一番簡単な方法をがあります。それはすべて中央の権限者の元でトランザクションがチェックされて、不正を弾くというものです。つまりこれは銀行システムです。銀行のデータベースに不整合がおきないように銀行がチェックします。しかし、分散型のシステムではこのような権限者を儲けてしまったら分散ではありません。たまに、中央のチェックシステムがあるXXXのほうが2重支払いがなく優れているというような論をみますが、それはまったくわかったない証拠です。たとえば、リップルのシステムは、リップル社のノードがすべてのチェックをしているため、早くて、ファイナイティもすぐに得られます。
ビットコインの二重支払い解決法
次に、ビットコインのシステムを見てみましょう。簡単にいうと、「2重払いがおきることを前提として、ただし、事後にそれを無効にすることで、解決するシステム」といえます。つまり、2重払い自体は防げない。不正なトランザクションを発行することは防げないが、それを事後に無効にして整合性をとるということです。その、整合性をとるという作業が、つまりマイニングになります。1承認がつくということは1ブロック分の検証作業が行われたことになります。さて、ここからはビットコインのややこしいところです。ビットコインでは、ほぼ同時にマイナーが別々のブロックを見つけることがあります。そうすると、一時的にブロックチェーンが分岐することがあります。こうした一時的な分岐は日常的におきており、一日に1回レベルでおきています。さて、チェーンが分岐してしまうと、どちらのチェーンの内容を正当とすべきかがわからなくなります。有るユーザーにとっては、チェーンAが正当な世界で、有るユーザーチェーンBが正当な世界に見えます。つまり、おかしなことになってしまっているのです。この場合は、ユーザーは、もう1ブロック採掘されるのを待つことになります。マイナーは、分岐したチェーンのどちらかをランダムに選んで、そのあとにブロックを続けようと採掘をがんばります。どちらかのチェーンの続きが採掘された時点で、そちらのチェーンのほうが長くなりますので、そちらが正当なチェーンになり、他方は捨てられます。これが、ビットコインの動きです。次に、2重支払いが何処に含まれるかということですが、ポイントは、一時的にブロックチェーンが分岐した時点にあります。このとき、それぞれのブロックに、矛盾した2つのトランザクションが同時に取り込まれている状態が発生します。これが2重支払いです。ブロックA(チェーンA)には、たとえばアドレスYへの支払いが含まれていますが、ブロックB(チェーンB)には、おなじコインをアドレスZへ送ったものが含まれている。こういう状態が二重支払いになります。