MSTR Cat

ブロックチェーン/レベル III · ネットワーク/3.1 ノード/レッスン 4

プルーニングノードとライトクライアント(SPV)

信頼のアーキテクチャ:完全な検証からメルクルプルーフまで

用意するものprune=550で設定したBitcoin Coreノード(任意)軽量ウォレットブロックエクスプローラー

問い

  1. ノードは、すべてのブロックを永遠に保存することなく、ビットコインの全履歴をどのように検証するのでしょうか?
  2. 数百ギガバイトものデータをダウンロードせずに、スマートフォンのウォレットが残高を確認できるのは、具体的にどのような暗号学的メカニズムによるのでしょうか?
  3. 軽量ウォレット向けの当初のプライバシー保護フィルターがユーザーの身元を漏洩させてしまったのはなぜでしょうか。また、その欠陥はどのように修正されたのでしょうか?

探究

  1. 完全な検証と完全な保存は切り離すことができます。検証を行うノードはすべて、現在の未使用アウトプットの集合を構築するために各ブロックを一度は処理しなければなりませんが、その後に古いブロックを保持し続ける必要はありません。さらに一歩進んで検証そのものを省略し、トランザクションが十分なプルーフ・オブ・ワークを持つブロックに含まれていることだけを確認するクライアントもあります。これらの選択は、ディスク容量、帯域幅、プライバシーと、独立性とのトレードオフです。
  2. プルーニングノードは、ジェネシスブロック以降のすべてのブロックに対して同じ初期検証を行いますが、その後、ディスク容量を節約するために古いブロックデータを削除します。Bitcoin Coreの`prune`設定では、検証済みの古いブロックを破棄しつつ、直近のブロックを少なくとも550MB分保持します。このノードは依然として完全なバリデーターであり、コンセンサスルールを適用し、独立した検証によって所有者のウォレットを保護することができます。ただし、他のピアに過去のブロックデータを提供したり、`txindex`のようにチェーンを深くさかのぼる検索を必要とする機能をサポートしたりすることはできなくなります。
  3. ライトクライアント、つまりSPVノードは、ルールセット全体を検証しないという別のアプローチをとります。これらはブロックヘッダーだけをダウンロードし、ヘッダーにはそのブロック内の全トランザクションのメルクルルートが含まれています。特定のトランザクションが含まれていることを確認するには、クライアントはピアにメルクルプルーフを要求し、それをヘッダーのルートと照合します。これは累積作業量が最も多いチェーンが有効であるという前提に基づいており、独立したルール適用を手放す代わりに、ストレージと帯域幅の要件を大幅に削減しています。
  4. 初期のSPV実装では、ウォレットがピアから関連するトランザクションだけを要求できるように、BIP37のブルームフィルターが使用されていました。ウォレットは自身のアドレスを表すフィルターを送信し、ピアはメンプールをスキャンして一致するトランザクションを送ります。この設計ではプライバシーが漏洩しました。悪意のあるピアがフィルターを観察することで、どのアドレスがユーザーのものかを推測し、その活動を追跡できたのです。Bitcoin Coreは2019年(バージョン0.19)に、ブルームフィルターの提供をデフォルトで停止しました。
  5. コンパクトブロックフィルター(BIP157/158)は、プライバシーを取り戻すためにこの流れを逆転させました。ウォレットが自分のアドレスを開示する代わりに、フルノードが各ブロックのコンパクトなフィルターを公開します。クライアントはこれらのフィルターをダウンロードし、自分の鍵と照らし合わせてローカルでテストします。フィルターが一致した場合、クライアントはブロック全体をダウンロードします。単一のトランザクションだけを要求すると、それがピアに知られてしまうからです。これにより、ウォレットがどのアドレスを監視しているかをピアが知ることはできなくなり、効率的な同期を保ちながらユーザーのプライバシーが大幅に向上します。
  6. 多くのモバイルウォレットは、データについてはElectrumサーバーなどのサードパーティのサーバーに依存しつつ、メルクルプルーフのブロックヘッダーとの照合は自ら行っています。トレードオフは明確で、利便性と少ないリソース消費か、独立した検証とプライバシーかです。プルーニングノードを運用するユーザーは完全な検証能力を保持しますが、過去データの提供能力は限られます。一方、SPVウォレットは必要なリソースを最小限に抑えられますが、関連するすべてのトランザクションを提示してくれるピアに依存し、最も作業量の多いチェーンが有効であると検証せずに仮定します。

重要な事実

  • プルーニングノードは、ジェネシスブロック以降のすべてのブロックを検証しますが、古いデータは削除し、直近のブロックを少なくとも550MB分保持します。
  • SPVクライアントはブロックヘッダーのみをダウンロードし、そのヘッダーのルートハッシュに対するメルクルプルーフを用いてトランザクションを検証します。
  • BIP37のブルームフィルターは、ウォレットがどのアドレスを監視しているかをピアに明かしてしまうことで、ユーザーのプライバシーを漏洩させました。
  • コンパクトブロックフィルター(BIP157/158)により、クライアントはアドレスのプライバシーを保ちつつ、サーバーが提供するフィルターをローカルでテストすることができます。
  • SPVウォレットは、すべてのコンセンサスルールを独立して適用するのではなく、累積されたプルーフ・オブ・ワークが最も多いチェーンが有効であると信頼しています。
  • プルーニングノードは引き続き完全なバリデーターとして機能し、所有者の資金を保護できますが、他のピアに過去のブロックデータを提供することはできません。

演習 九・六・三・一

9集めるビットコインノードまたはクライアント実装を9種類挙げてください。それぞれについて、ストレージ要件、検証能力(フルかSPVか)、主な用途を記録してください。
6まとめる9つを、独立した検証のレベルとデータ保持の観点から6つのカテゴリーに分類してください。
3絞り込む6つのグループを、プライバシー、セキュリティ、リソース消費の間にある3つの異なるトレードオフに絞り込んでください。
1結晶化するライトクライアントの信頼モデルがフルノードのものと根本的に異なる理由を1文で説明してください。

事実確認

日付、数字、主張は、下記に記載された公表資料と照合して確認しました。

インタラクティブ版で開く →

EN PT ES ZH KO RU DE FR MS