Re: ビットコイン P2P 電子キャッシュ論文

ジェームズ・A・ドナルドの投稿(2008年11月2日 23:46 UTC)
サトシ・ナカモトの投稿(2008年11月10日 22:18 UTC)

同じトランザクションの複数の二重支払いバージョンがある場合、1 つだけが有効となる。

それは私が問うている問いではない。

私が懸念しているのは信頼ではない。全員が行儀よく振る舞ったとしても、どうやってグローバルに共有された見解を持ちうるのか、という点だ。

誰がどのビットゴールド・コインを所有しているかについて、グローバルに共有された見解へ到達するプロセスが、十分に規定されていない。

確かに、これらの事柄がどう扱われるのか、説明はまだ完全には明確でないと思うんだ。サトシも、設計をはっきりさせる一番の方法はソースコードを公開することかもしれないと言っているね。自分で細部を追ってみると、ルールはなかなか複雑になってきて、挙動をきちんと規定するには少なくとも擬似コードくらいは要ると分かったよ。だから、いっそ本物のコードを書いてしまうのは悪くない進め方じゃないかな。調べてみたら bitgold 用の SourceForge プロジェクトが立ち上がっていたんだ。まだコードは何もないけれどね。

ジェームズの具体的な質問——不完全なブロードキャストのために、異なるノードが異なるトランザクション集合を見たとき何が起きるか——だけど、私の理解はこうなんだ。各ノードは、いずれ最長になって勝つ可能性のある複数の「候補」ブロックチェーンを、潜在的にいくつも抱えられるよう備えておく必要がある。あるブロックチェーンが競合相手より十分に長くなったら、短い方は削除してしまっていいんだ。この長さの差は、攻撃者がどれだけの計算力を——「誠実な」ピアツーピアネットワークの処理能力に占める割合として——動員できるか、というノードの脅威モデル次第のパラメーターで、論文の中で見積もられているね。要するに、あるチェーンが最長のものから十分に引き離されてしまえば、もう追いつける見込みは実質的になくなる、というわけだ。

ジェームズが提起した問題を解くには、各ノードが候補チェーンごとに別々の保留トランザクションリストを持つ必要があると思うんだ。このリストには、ノードが(送金する側のブロードキャストで)受け取ったけれど、まだそのブロックチェーンには取り込まれていないトランザクションが全部入る。どの時点でも、ノードは最長のブロックチェーンを伸ばそうと頑張っていて、ハッシュ衝突を探しているブロックには、そのチェーンに紐づく保留トランザクションが全部含まれることになるんだ。

こうしておけば、候補チェーンが最長のものより短くなりすぎて削除されても、その中のトランザクションは失われずに済む。最初のトランザクションのブロードキャストを聞いたノードでは、最長チェーンに紐づく保留トランザクションリストにちゃんと残り続けるんだ。(他のノードからのブロックを通じて知ったトランザクションを、たとえそのブロックが最終的に最長ブロックチェーンに入らなくても保留リストに加えるべきか、とも考えてみたんだけど、それが要るのか、役に立つのかは正直まだ分からないな。)

こうしたルールがはっきりしてくれば、不完全な信頼性のもとでネットワークがどう振る舞うかを理解するのに、もっと形式的なモデル化が役立つだろうね。たとえば、あるトランザクションのブロードキャストを平均して割合 f のピアツーピアノードが受け取るとすると、そのトランザクションが最長になる運命のチェーンに現れるまでに、ブロック生成時間の 1/f くらいが経過すると見ていいんじゃないかな。それに、ピアツーピアネットワークのブロードキャスト自体も完全には信頼できないとなると、あるノードは平均していくつの候補チェーンを同時に把握しておけばいいのか、という問いも出てくる。あるいはジェームズが先に挙げたように、ブロードキャストは信頼できても、遅くなりがちなフラッディングアルゴリズムに頼る場合、それが性能にどう響くのか——気になるところだね。

さらにその上で、合意が生じるように振る舞う動機を全員が持つ必要がある。だが、動機づけられるべき振る舞いが分からないのに、彼らに動機があるとは思えない。

動機のほうは、私はそこまで心配していないんだ。システムが次の条件を満たしてくれれば、それで十分だと思っている。

  1. 単一のノード運用者、あるいはネットワーク全体のリソースのごく一部しか支配しない少数のノード運用者の集まりが、他の参加者が誠実である限り、効果的に不正を行えないこと。

  2. ノード運用者のロングテールが十分に大きく、少数のノードの集まりが全体リソースのごく一部しか支配できないこと。(ここで「テール」とは、各運用者が支配するリソース量に基づくランキングを指す。)

  3. ビットコインのシステムが社会的に有用で価値あるものとなり、ノード運用者が自らの働きによって世界に有益な貢献をしていると感じられること(人々が善き目的のために計算資源を提供する各種の「@Home」計算プロジェクトに似ているね)。

そうであれば、単純な利他心だけでもネットワークをちゃんと動かし続けるのに十分だと、私には思えるんだ。

分散データベースは、すべてのデータベースが単一の所有者の意思に完全に従う場合でさえ、難しい。メッセージは失われ、リンクは切れ、同期の遅延は異常になり、マシンが丸ごと炎上することもある。そしてネットワーク全体は、これらすべてを難なくこなさなければならない。

これはとても良い指摘だね。こういう不完全さにネットワークがどう応じるのかを理解するには、もっと完全な仕様が要る。これからどんな詳細が出てくるのか、楽しみにしているよ。

一つ言っておきたいんだけど、ビットコインは多くの点で二つの独立したアイデアなんだ。ジェームズがここで挙げている種類の問題を解決する方法、つまりグローバルに一貫性がありながら分散型のデータベースを作ること。そしてそれをウェイ・ダイの b-money(論文中で参照されている)に類似したシステムに使うこと、ただしアカウントベースではなくトランザクション/コインベースだ。グローバルで大規模に分散されたデータベース問題を解決することが、ジェームズが強調するように、おそらくより難しい部分なんだ。この目的のためのプルーフ・オブ・ワークの使用は、私見では、さらなる検討に値する新しいアイデアだと思うよ。

ハル・フィニー