今回から数回にわたり、
Ethereumの分散化を進めるために必要となる技術である、
ステートレスクライアントとVerkle Treesについて解説していきます。
「分散化」はブロックチェーンが持つ大きな特徴であり、主にネットワークを構築するノードというコンピューターの多様性によって実現されるものです。ノードの多様性は、ノードの物理的な台数を増やしたり、ノードを動かすためのクライアントの種類を増やしたり、ノードを制御するユーザーや組織の数を増やしたりすることによって確保することができます。
ブロックチェーンは分散化されていることによって、
単一障害点を持つ可能性が減り、
攻撃への耐性が高くなるといったメリットを持つことができます。
ほとんどすべてのブロックチェーンがこの分散化を特徴として持っていますが、その中でもEthereumはロードマップ単位で分散化の進展を目指しているなど、分散化に注力しているブロックチェーンの代表例となっています。
Ethereumが分散化を進めるためにロードマップの中で目指しているのは、誰でも持っているような一般的なハードウェアでノードを動かすことができるようにする、ということです。ここでいう一般的なハードウェアには、PCだけでなくスマートフォンなどの携帯端末や、Raspberry Piなどのマイクロコンピューターなども含まれています。
一般的なハードウェアでノードを動かすことができるようになると、ノードの物理的な台数も増えて、ノードを制御するユーザーや組織の数も増えるためさらに分散化が進むようになります。逆に言えば、特殊なハードウェアやハイスペックなハードウェアでしかノードを動かせないようにしてしまうと、資金力を持った特定のユーザーや組織にノード運用者が集中してしまい、分散化が阻害されるようになります。
ここで、
現在のEthereumノードの推奨要件を見てみましょう。
ノードを動かすために必要なExecution Clientの1つである
Gethのドキュメントによると、
推奨要件は以下のようなものとなっています。
OS:Linux, Mac OS X, Windows
メモリ:16GB以上
ディスク:SSD 2TB以上
CPU:4コア以上
ネットワーク:25Mbps以上
上記の推奨要件からは、
現在ノードとして運用できるのはPCのみであるということと、
ディスク要件において比較的高いスペックを要求しているというこ
とが読み取れます。このうちディスク要件の高さについては、
ブロックの状態(ステート)
をほぼすべて保存し続けるというEthereumの仕様に起因す
るものです。
ステートにはそれぞれの
ウォレットアドレスやスマートコントラク
トにおけるETH残高であったり、
トランザクションの実行回数などが含まれています。
Ethereumには主にフルノードとアーカイブノードという2つのノードがありますが、フルノードの場合はすべてのトランザクションデータとブロックヘッダに加えて直近128ブロックのステートを、アーカイブノードの場合はすべてのトランザクションデータとブロックヘッダに加えてすべてのステートを保存しています。このような仕様のままでは、トランザクションデータやステートの容量は時間が経つにつれて無限に増えていき、ディスク要件はさらに高くなっていくことになります。
一般的なハードウェアでノードを動かすことができるようにするためには、このような高いディスク要件を引き下げる必要があります。ディスク要件を引き下げるための方法として、現在Ethereumの開発者コミュニティによって以下の4つが議論されています。
- History expiry:履歴の有効期限
- ステートの仕様は変更せずに、ノードが一定以上古くなったトランザクションデータやブロックヘッダを破棄できるようにする方法
- State expiry:ステートの有効期限
- Weak statelessness:弱いステートレス性
- 一部のノードのみがすべてのステートを保存することで、他のノードはステートレスで検証を行えるようにする方法
- Strong statelessness:強いステートレス性
この4つのうちリリースの準備ができているものはまだありませんが、比較的早期にリリースが検討されているものとして「History expiry」と「Weak statelessness」の2つを挙げることができます。
次回のEthereum技術解説では、まずHistory expiryについて詳しく見ていきたいと思います。
「MCB Web3カタログ」でウォレット関連のサービス一覧を確認する
※ニュースレターを無料購読していただくと、毎週月曜日の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回)
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第2回)
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第3回)