Redの投稿(2010年8月12日01:10 UTC)最初は私もそう思った。しかし、その後、自分を説得して考えを変えた。
ここでまた既存のBitcoinシステムの話に戻っているのかな?
そう、仮想システムの話をしている。
私が提案したシステムでは、ブロックが生成されるたびに、すべての検証ノードがトランザクションを検証しブロック内のハッシュを確認することで、そのブロックを受け入れるか拒否しなければならない。実質的に、現在のシステムと同じ作業に加えて、アウトポイントハッシュのチェックが加わる。他の検証者はすでにブロック生成を競っていたので、(少なくともほとんどの)トランザクションをすでに持っている。
現在のシステムと同様に、トランザクションが検証に失敗すれば(加えて含まれるアウトポイントハッシュと一致しなければ)他のノードはブロックを拒否する。ブロックが少なくとも50%のCPUパワーによって受け入れられなければ、ブロックリストに入らない。
したがって、ブロックリスト内のハッシュの存在は、その時点で少なくとも50%の既存の検証者がすべてのトランザクションとアウトポイントハッシュを確認し検証したことを意味する。
よって(ハッシュ衝突を除けば)、未使用のアウトポイントに一致する先行トランザクションを誰かが提出すれば、それは有効でなければならない。
その先行トランザクションの先行トランザクションも有効だったはずだ。そうでなければ先行トランザクション自体が拒否されていただろう。以下同様。
それが当てはまらないためには、アウトポイントハッシュに対するブロックの検証が行われていなかった期間が存在したことを仮定しなければならない。しかし、CPU競争システムでは、それはもっともらしくありえない話だ。
サトシ・ナカモトクライアントが最近まで存在していなかった場合、トランザクションに有効な過去があることを納得させる2つの方法は:1) 元の生成されたコインまでの全履歴を見せる。2) 十分に深いブロックまでの履歴を見せ、それまでの履歴が正しいと多くのノードが言ったなら正しいに違いないと信頼する。
クライアントが最近ネットワークに参加した場合、以前の検証者がルールに従い、既存のすべてのブロックが有効であると仮定して参加している。(既知の不正ネットワークに誰も参加しないだろう)
確かに現在のシステムでは、トランザクションが削除されなければ、新しいノードはすべての以前のブロックの自己整合性を検証できる。しかしそれでも絶対的な真実を証明することはできない。ボットネットが乗っ取り、いくつかのトランザクションを消去して「新しい真実」を残し、不満を抱えるユーザーを生む可能性がある。上記のケース1)と同等だ。
現在のシステムで、トランザクションがマークルツリーで削除された場合は上記のケース2)だ。新参者はプロセスを信頼しなければならない。欠けているものについては心配する必要がない。全員が有効であると推定しなければならない。
私が言う独自の点は、Bitcoin検証競争プロセスに信頼がある場合(そしてある!)、実際には「2)の十分に深いブロック」がそれほど深い必要がないということだ。誰かが別のスレッドで、クライアントは2時間以上前のブロックへの変更を拒否すると言っていた。だから12ブロック深く埋まったすべてのブロックには絶対的な信頼が持てる。
したがって、トランザクションが未使用で12ブロック深く埋まっていれば、すべての祖先を削除できる。祖先は気休めにはなるが、追加の検証にはならない。我々はそれらに頼るしかない。単純に後戻りしてコースを変えることはできない。
その後、後続のすべてのブロックは先行するすべてのブロックが真実であると仮定する。そうでなければフォークであり、後続ブロックではない。したがって、先行ブロック内のアウトポイントに対して検証されたトランザクションについて、それらのアウトポイントが存在し未使用であれば、有効と推定されなければならない。それらが有効と推定されるなら、削除されていてもその祖先も有効と推定されなければならない。
提案されたシステムでも、まったく同じことが当てはまる。
先行するアウトポイントハッシュが未使用で12ブロック深く埋まっていれば、それは絶対に未使用だ。その事実は何も変えられない。祖先を確認する意味はない。トランザクションの検証を完了し、インポイントハッシュを取り消し、新しいアウトポイントハッシュを作成できる。
興味深いことに、先行するアウトポイントハッシュが未使用で12ブロックに満たない深さにしか埋まっていない場合、それはあくまで相対的に未使用だ。不思議なことに、この場合も祖先を確認する意味はない。先行トランザクションの有効性を変えうるのは、より長いチェーンへの分岐スワップだけだ。検証中のトランザクションの先行トランザクションの祖先がスワップアウトされたら、このトランザクションもスワップアウトされるだろう。
安っぽいタイムマシン映画の筋書きみたいなものだ。誰かがタイムスリップして私の祖先を使ってしまった。今、私は存在しない!
=====
つまり、両方のシステム(既存と提案)で検証者が行うべき唯一のことは、先行するアウトポイントが(現在のブロックチェーンに対して)存在し未使用であることを検証することだ。プロセスが他のすべてが相対的または絶対的に有効であることを保証する。
残りはただの気休めだ。
— 追伸 —
長すぎて冗長だとわかっているが、疲れすぎて編集できない。 :-)