前回はEthereumが分散化を進めるためにノードのディスク要件を引き下げる必要があるということ、ディスク要件を引き下げる方法のうち「History expiry」と「Weak statelessness」の2つについて、比較的早期のリリースが検討されているということを解説しました。今回はこの2つのうち、History expiryについて詳しく見ていきたいと思います。
History expiryは、ノードが一定以上古くなったトランザクションデータやブロックヘッダなどの履歴データを破棄できるようにする技術です。現在ノードはすべての期間のトランザクションデータとブロックヘッダを保存しているため、History expiryを導入することによってディスク要件を引き下げることが可能になります。
History expiryはEIP-4444としても提案されており、2024年8月時点でのEIP-4444では1年以上前のトランザクションデータやブロックヘッダを破棄するものとして定義されています。ただし、EIP-4444は半年以上更新がないことを示す「Stagnant」ステータスになっており、今後内容が変更される可能性があります。
History expiry(EIP-4444)はステートの仕様を変更するものではないため、技術的にはすぐに実装することができます。しかし、History expiryを実装した後にどのようなエンティティから履歴データを取得するのかといった点において現在も議論が行われており、具体的なリリースの時期については定まっていない状況となっています。
ブロックチェーンエクスプローラーや暗号資産取引所、レイヤー2などのエンティティは履歴データを保存しておくインセンティブを持っているため、何も策を講じなかったとしても履歴データの提供を行うことができるエンティティは一定数残ると考えられています。最も単純な方法は、このようなエンティティから履歴データを取得することになります。
しかし、この方法を用いる場合は少数のエンティティへ依存することになります。分散化の促進を目指してHistory expiryを導入したにも関わらず、ある側面においてより中央集権化することになるため、Ethereumのコミュニティ内ではこの方法を用いることに懸念を表明する開発者が多く存在します。
次に考えられるのは、IPFSやTorrentなどのP2Pネットワークに履歴データを保存しておく方法です。この方法は中央集権化せずに履歴データを取得できるため、有力な候補の1つとされています。一方で、このような既存のP2Pネットワークを履歴データの取得元として利用する場合、ノードクライアントとの互換性に問題がある場合があります。例として、Torrentを用いる場合にはTorrentのクライアントをノードクライアントに統合する必要がありますが、ノードクライアントのプログラミング言語によってはTorrentのクライアントが存在しない可能性があります。
Ethereumの分散化はノードクライアントのプログラミング言語や開発チームの多様性によって成り立っている側面もあり、ノードクライアントの数が減少してしまうと分散化が損なわれることになります。既存のP2Pネットワークを履歴データの取得元として利用する場合、このようなトレードオフが存在します。
これらの問題を解決する3つ目の方法として、開発中のPortal NetworkというP2Pネットワークを用いることが現在Ethereumのコミュニティ内で検討されています。Portal NetworkはEthereumの履歴データを保存することを目的としたもので、複数のクライアントを用意しているなど分散化に注力したP2Pネットワークとなっています。また開発中であるということもあり、ノードクライアントとの統合についても行いやすいといったことから、Portal Networkを用いる方法が現在最も有力視されています。NethermindやNimbusなどといったノードクライアントがPortal Networkとの統合について開発中であるということもあり、History expiryが正式に実装される日も近いのかもしれません。
次回は、Ethereumノードのディスク要件を引き下げるためのもう一つの方法である、「Weak Statelessness」について解説したいと思います。
※ニュースレターを無料購読していただくと、毎週月曜日の17:00にイーサリアム技術解説シリーズを含む最新のニュースレターをお届けいたします。
過去のイーサリアム技術解説
アカウント・アブストラクション(AA)特集
・ウォレットのUXを向上させる、Account Abstractionとその近況(第1回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第2回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第3回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第4回)
ダンクシャーディング特集
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第1回)
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第2回)
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第3回)
ステートレスクライアント特集
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第1回)