Re: 提案ではなく

人物: Red
サトシ・ナカモトの投稿(2010年8月11日 17:46 UTC)
Redの投稿(2010年8月11日 16:10 UTC)

最初はそう思った。しかしその後、そうではないと自分を納得させた。

既存のBitcoinシステムの話に戻ったのか?

いや、仮想システムの話をしている。

私が提案したシステムでは、ブロックが生成されるたびに、すべての検証ノードがトランザクションを検証しブロック内のハッシュを確認することで、そのブロックを受け入れるか拒否しなければならない。実質的に、現在のシステムと同じ作業に加えて、アウトポイントハッシュのチェックが加わる。他の検証者はすでにブロック生成を競っていたので、(少なくともほとんどの)トランザクションをすでに持っている。

現在のシステムと同様に、トランザクションが検証に失敗すれば(加えて含まれるアウトポイントハッシュと一致しなければ)他のノードはブロックを拒否する。ブロックが少なくとも 50%の CPU パワーによって受け入れられなければ、ブロックリストに入らない。

したがって、ブロックリスト内のハッシュの存在は、その時点で少なくとも 50%の既存の検証者がすべてのトランザクションとアウトポイントハッシュを確認し検証したことを意味する。

よって(ハッシュ衝突を除けば)、未使用のアウトポイントに一致する先行トランザクションを誰かが提出すれば、それは有効でなければならない。

その先行トランザクションの先行トランザクションも有効だったはずだ。そうでなければ先行トランザクション自体が拒否されていただろう。以下同様。

それが当てはまらないためには、アウトポイントハッシュに対するブロックの検証が行われていなかった期間が存在したことを仮定しなければならない。しかし、CPU 競争システムではそれは合理的に考えにくい。

サトシ・ナカモトの投稿(2010年8月11日 17:46 UTC)

クライアントが最近まで存在していなかった場合、トランザクションに有効な過去があることを納得させる 2 つの方法は: 1) 元の生成されたコインまでの全履歴を見せる。 2) 十分に深いブロックまでの履歴を見せ、それまでの履歴が正しいと多くのノードが言ったなら正しいに違いないと信頼する。

クライアントが最近ネットワークに参加した場合、以前の検証者がルールに従い、既存のすべてのブロックが有効であると仮定して参加している。(既知の不正ネットワークに誰も参加しないだろう)

確かに現在のシステムでは、トランザクションが削除されなければ、新しいノードはすべての以前のブロックの自己整合性を検証できる。しかしそれでも絶対的な真実を証明することはできない。ボットネットが乗っ取り、いくつかのトランザクションを消去して「新しい真実」を残し、不幸なユーザーを生む可能性がある。上記のケース 1)と同等だ。

現在のシステムで、トランザクションがマークルツリーで削除された場合は上記のケース 2)だ。新参者はプロセスを信頼しなければならない。欠けているものについては心配する必要がない。全員が有効であると推定しなければならない。

私が言う独自の点は、Bitcoin 検証競争プロセスに信頼がある場合(そしてある!)、実際には「2)の十分に深いブロック」がそれほど深い必要がないということだ。誰かが別のスレッドで、クライアントは 2時間以上前のブロックへの変更を拒否すると言っていた。だから 12 ブロック深く埋まったすべてのブロックには絶対的な信頼が持てる。

したがって、トランザクションが未使用で 12 ブロック深く埋まっていれば、すべての祖先を削除できる。祖先は安心感を与えるが、追加の検証にはならない。我々はそれらに頼るしかない。単純に後戻りしてコースを変えることはできない。

その後、後続のすべてのブロックは先行するすべてのブロックが真実であると仮定する。そうでなければフォークであり、後続ブロックではない。したがって、先行ブロック内のアウトポイントに対して検証されたトランザクションについて、それらのアウトポイントが存在し未使用であれば、有効と推定されなければならない。それらが有効と推定されるなら、削除されていてもその祖先も有効と推定されなければならない。


提案されたシステムでも、まったく同じことが当てはまる。

先行するアウトポイントハッシュが未使用で 12 ブロック深く埋まっていれば、それは絶対に未使用だ。その事実は何も変えられない。祖先を確認する意味はない。トランザクションの検証を完了し、インポイントハッシュを取り消し、新しいアウトポイントハッシュを作成できる。

興味深いことに、先行するアウトポイントハッシュが未使用で 12 ブロック未満の深さに埋まっている場合、それは相対的に未使用だ。不思議なことに、この場合も祖先を確認する意味はない。先行トランザクションの有効性を変えうるのは、より長いチェーンへの分岐スワップだけだ。検証中のトランザクションの先行トランザクションの祖先がスワップアウトされたら、このトランザクションもスワップアウトされるだろう。

安っぽいタイムマシン映画の筋書きみたいなものだ。誰かがタイムスリップして私の祖先を使ってしまった。今、私は存在しない!

=====

つまり、両方のシステム(既存と提案)で検証者が行うべき唯一のことは、先行するアウトポイントが(現在のブロックチェーンに対して)存在し未使用であることを検証することだ。プロセスが他のすべてが相対的または絶対的に有効であることを保証する。

残りはただの安心感だ。

— 追伸 —

長すぎて冗長だとわかっているが、疲れすぎて編集できない。 :-)