ビットコインはすごく有望なアイデアだと思うんだ。正直な参加者のCPUパワーが攻撃者を上回る、という前提にセキュリティを置く考え方が気に入っているんだ。ロングテールの力を活用した、実に現代的な考え方だ。Wikipediaが始まった時、うまくいくとは思わなかったけど、同じような理由で大成功を収めた。
また、偽造できなくて、生産ペースが予測できて、腐敗した者たちに左右されないトークン――これには、価値が生まれる見込みがあると思うんだ。法定通貨よりもゴールドに近い。ニック・サボが何年も前に「ビットゴールド」[1]と呼んでいたものがあるけど、これはその構想の実装になりうるよ。重量級の非匿名システムの上に軽量な匿名決済スキームを構築する提案もあり、ビットコインを活用すれば、論文で述べられた仕組みを超える匿名性も実現できるだろう。
ただ残念ながら、このシステムを完全に理解するのに苦労しているんだ。論文は鍵となる概念といくつかのデータ構造を説明しているけど、システムの参加者が従わなければならないさまざまな規則や検証をはっきりとは定めていない。
特に分からないのは、P2Pのノードがほかのノードから新しいブロックを受け取ったとき、正確にどんな検証をするのか、そしてブロードキャストされてきたトランザクションをどう扱うのかだ。たとえば、ブロードキャストされたトランザクションがすべてのノードに届かなくても、じきにブロックチェーンに入るから問題ない、と書かれている。それはどうやって起きるんだろう。「次の」ブロックを作るノード(最初にHashcashの衝突を見つけたノード)がそのトランザクションを聞いていなくて、さらにそのトランザクションを聞いていないノードがいくつかブロックを足したら? そのトランザクションを聞いたノードはみんな、次の衝突を見つける幸運に恵まれたらブロックに入れようと、それを持ち続けるのかな。
あるいは、たとえばノードがどのチェーンが一番速く伸びるかを見守るあいだ二つ以上のチェーンを保持していて、チェーンAに、チェーンBにあるコインの二重支払いを含むブロックが届いたら? それはチェックされるのかな、されないのかな。(誰かが二重支払いをして、ノードの二つの集団が、同じコインを使った別々のトランザクションをそれぞれ聞いた場合に起こりうる。)
こうしたデータの管理や、飛び交うパケットをすべて扱うための規則が、論文にはほとんど書かれていない。
それから、正直な参加者全員を上回る計算能力を集められる優勢な攻撃者が、二重支払いやトランザクションの取り消しをどうやって実現するのかも、正確には分からない。新しいブロックを作って足し、最長のチェーンを作れるのは分かる。でも、チェーンの中の古いトランザクションをどうやって消したり足したりできるんだろう。攻撃者が新しいブロックを送り出すとき、何も消されていないことを確かめるために、正直なノードができる整合性のチェックはないのかな。この攻撃をもっと説明してもらえると、攻撃者がこれで得るものと、その計算能力を使って正直に新しいコインを発行する場合とを比べて判断するのに役立つだろう。
支払いのトランザクションについては、コインの受け取り手はどんなチェックをしなければならないのかな? コインの移転の履歴をすべてさかのぼって、リストのすべてのトランザクションが「タイムスタンプ」のブロックチェーンに本当につながっているかを確かめる必要があるのかな。それとも最新の一つだけでいいのかな。タイムスタンプのノードはトランザクションをチェックして、コインの前のトランザクションがチェーンにあることを確かめ、チェーンにあるトランザクションはすべて有効なコインを表すという規則を守らせるのかな。
質問ばかりですまない。でも、さっきも言ったように、これは本当に有望で独創的なアイデアに思えるし、この考えがこれからどう発展していくのかを楽しみにしている。アイデアを、もっと処理の流れに沿って説明したものがあると助かる。さまざまなオブジェクト(コイン、ブロック、トランザクション)のデータ構造、メッセージに含まれるデータ、そしてこのシステムで起こるさまざまな出来事を扱う手順のアルゴリズムを、具体的に書いたものだ。実装に取り組んでいると書いていたけど、次の一歩としては、システムのもっと形式的な、文章による説明が役に立つと思う。
ハル・フィニー
[1] http://unenumerated.blogspot.com/2005/12/bit-gold.html


