ビットコイン・インスティテュート

Re: レイテンシーと​局所性

人物: Red
Red 2010年8月7日00:19 UTC

このアイデアを頭ごなしに否定する理由を探せば、見つかるだろう。しかし、なぜ一部のP2Pシステムは成功し、多くは失敗するのかを理解するためにこの例を使えば、何かしらの洞察が得られるはずだ。

その精神で、質問に直接答えよう。

ギャビン・アンドレセンの投稿(2010年8月6日23:32 UTC)

どちらのトランザクションが先だったかについて意見が分かれたらどうなるのか? 多数決か? 誰が多数派を決定するのか、そして5つのノードのうち4つがネットワークを離れ、別の5つのノードに置き換わった場合、結果は変わりうるのか?

そのout-pointを使う他のトランザクションが1つでも見つかれば二重支払いだ。現在のBitcoinシステムと同じルールだ。意見の不一致が起こり得るのは、競合するトランザクションが同時にブロードキャストされ、一方がノードAに先に到着し、競合する方がノードEに先に到着した場合だけだ。2つの5ノードブロードキャストが完了するまでに、双方が二重支払いを発見する。

ではどちらが有効か? どちらでもいい。コインを投げればいい。Bitcoinはこの状況でまさにそうしている。自分のノードがあるトランザクションを含むブロックに取り組んでいて、あなたのノードが競合するトランザクションを含むブロックに取り組んでいる場合、先にブロックを解いた方が勝つ。分散コイン投げアルゴリズムは自明だ。これらすべてはほぼ即座に実行できる。10分間のウィンドウよりはるかに速い。だから4ノードが離脱しても多数派は変わらない。合意はすでに達成され、ノードは整合性が取れた状態になっているからだ。

ちなみに、標準的なDHTはノードが離脱した時のデータ保持と、ノードが参加した時のデータ分散にすでに対応している。

ギャビン・アンドレセン

また、大きなトランザクションを作成しようとしていることが分かっている場合、そのトランザクション(まだ送信していない)が自分の支配下にあるノードにハッシュされるよう、ノードIDを事前に計算しておくことはできるだろうか? トランザクションを保存するすべてのノードを支配していれば、「はい、間違いなく、そのトランザクションは有効で二重支払いはありません」と回答するだけで済む……

いや、これは要件上の制約だ。同じBitcoinアドレスに一致する公開鍵を2つ生成するのが不可能なのと同じ理由で、可能だ。以前の私の失言を参照してほしい。

ノードはBitcoinアドレスと全く同じように秘密鍵に基づいてノードアドレスを生成する。これによりノードのなりすましは非現実的になる。out-pointハッシュへのすべての入力は受取人を除いて固定されており、受取人は事前に指定されている。唯一の柔軟性は支払い額だろう。すべての可能な金額を反復して同時に5方向のハッシュ衝突を作ろうとするなら、どうぞ好きにしてくれ。

ギャビン・アンドレセン

Bitcoinの背後にある素晴らしい洞察は、分散型タイムスタンプの仕組みだ。全員がトランザクションの順序に合意する。あなたの方式がその問題をどう解決するのか、私には分からない。

実は全く同じ方法で問題を解決する。ただCPUパワーがはるかに少なくて済む。

Bitcoinの分散タイムスタンプメカニズムの背後にある素晴らしい洞察は、絶対的なタイムスタンプは全く必要ないということだ! 必要なのは相対的な順序だけだ。短いウィンドウ内での競合については、気にする必要すらない。単に任意に1つを選べばいい。

私の解決策はまさに同じことをする。トランザクション間の相対的な順序を維持する。競合については任意に合意に達する。どちらの方法も、無関係なトランザクションを時間順に正確に並べる必要はない。繰り返すが、あれは素晴らしい洞察だった。