Re: (knightmbのコンテキスト投稿)

参加者: knightmb

Quote from: InterArmaEnimSil on July 14, 2010, 07:07:03 PM

なるほど、全員のマシンが別々の問題のハッシュに取り組んでいるなら、運が要素になるのはわかる。しかし、自分のマシンが取り組んでいる問題と、あなたのマシンの問題の間のバリエーションの源は何だろうか? 以前のある返信では、その個人が最近参加したトランザクションに関係があるようなことを示唆していた……しかし、最近のトランザクションに参加していない人はどうなるのだろうか?(自分の最新のものは少なくとも2日前だ)

コイン生成に関しては、ネットワークに接続さえしていればいい。それだけで、あなたのコンピュータが「見つけた!」というメッセージをブロードキャストし、他のコンピュータがそれが有効かどうかチェックできる。ブロックは常に生成されているので、オフラインでのコイン生成は現実的ではない。なぜなら、2日前にあなたのコンピュータがブロックを見つけたが、私のPCもそうで、私のPCはずっとオンラインだった場合、ネットワーク全体が私のPCを勝者/所有者と認定するからだ。あなたのPCが2日後にやってきて同じ解を見つけたとブロードキャストしても、他のコンピュータは「遅すぎる、XYZがすでに解いた、次は頑張れ」と返すだけだ。

問題のバリエーションに関して言えば、ブロックが見つかると、全員が次のブロックに取りかかる。だから、あなたのコンピュータがブロック68000の解決に向けて1%しか進んでいない時に「XYZが数分前にブロック68000を解いた」というメッセージを受け取ると、あなたのPCは「じゃあ次に行こう」と思う。すでに誰かが解いたブロックにCPUを浪費しない。そこが検証の部分だ。そうでなければ、誰かがクライアントを改ざんして「ブロック68000、68001、68002などを解いた」とブロードキャストして全範囲の所有権を主張することになる。クライアントがブロックを解いたと言うと、他のすべてのコンピュータが「わかった、じゃあ証明しろ、結果を送れ」と言う。十分な数が互いにそれについて話し合うと、「はい、あなたのPCがブロック68000を解いた、新しい所有者だ、おめでとう」と合意する。

重要なポイントは、我々のPCがブロックを解くのに数時間/数日かかるが、他の全員がそれが本当かどうかチェックするのはミリ秒しかかからないということだ。これにより、ネットワーク上での「偽ブロック発見」攻撃が防止される。

別の例を挙げよう。何百人もいる部屋がある。全員にランダムに混ぜられたルービックキューブが渡される。最初に解いた人が50コインもらえる。

誰かが「解いた!」と叫んだら、周りの人が一目見るだけで本当かどうかわかる(全面に単色)。誰かが「解いた!」と叫んでもまだグチャグチャなら、全員その人を無視して続ける。「本当に」解いた最初の人が賞を獲得し、全員が現在のルービックキューブを捨て、天井からさらにランダムに混ぜられたルービックキューブが落ちてきて、プロセスが再開される。