MegaETH の概要
MegaETH(メガETH)は、Web2レベルのリアルタイムパフォーマンスをもたらす初のEVM互換のブロックチェーンです。Ethereumレイヤー2のパフォーマンスをハードウェアの限界まで押し上げ、ブロックチェーンと従来のクラウドコンピューティングとのギャップを埋めることを目指しています。
現在、ブロックチェーンの開発フレームワークが増えてきており、新しいチェーンを作成する障壁が下がっています。RaaS(Rollup as a Service)の登場により、数クリックでチェーンを作成できるソリューションが提供されています。しかしながら、新興のEVMチェーンでもトランザクションのスループットは未だに低いままです。例えば、パフォーマンスが優れているとされるopBNBでも、1秒あたりのパフォーマンスはUniswapで650回のスワップ、ERC20トークンの転送で3,700回程度に留まります。これは、現代のデータベースが持つ100万TPSには遠く及びません。さらに、計算能力の不足やブロック時間の長さから、高頻度の更新や高速フィードバックが必要なアプリケーションは、EVMブロックチェーンでは未だに実現できていません。これらの課題を解決するための新たな技術開発が求められています。
MegaETHは、「Measure, Then Build(計測してから構築する)」という設計哲学を掲げ、既存のシステムの実際の問題を特定するための徹底的なパフォーマンス測定を行い、洞察を固め、すべての問題に対処するための手法を設計しています。これにより、EVMのチェーンとしては、極めて高パフォーマンスな10万TPS以上の処理容量を確保し、1ミリ秒未満のレイテンシとブロック時間を確保します。
MegaETHにおけるノードの責任分離
MegaETHでは、ノードの責任を分離することでコンセンサスのオーバーヘッドを削減します。具体的には、他のレイヤー2と同様に、シーケンサー、プルーバー、フルノードの3つの役割に分離します。
MegaETHのネットワークにおいて、トランザクションを実行するアクティブなシーケンサーは1つだけです。これにより、実行時のコンセンサスのオーバーヘッドを排除します。
フルノードは、ステートの差分を受け取り、トランザクションを再実行することなくローカルステートを更新します。トランザクションを再実行しない代わりに、プルーバーが提供する証明を使うことで間接的にブロックを検証します。
また、プルーバーネットワークでは、ブロックを非同期かつ順序どおりに検証します。
上記のようなノードの責任分離により、MetaETHでは各タイプのノードハードウェア要件を個別に設定することができるようになります。シーケンサーは重い処理を実行するので、ハイエンドサーバーが要求される一方で、証明の検証やフルノードは比較的低いハードウェア要件で済むようになっています。以下が、MegaETHにおけるノードの想定ハードウェア要件です(ZKプルーバーノードは、証明スタックにより異なるために表から除外)。
CPU | メモリ | ネットワーク | ストレージ | |
---|---|---|---|---|
シーケンサー(Sequencer) | 100 コア | 1~4 TB | 10 Gbps | SSD |
プルーバー(Prover (OP)) | 1 コア | 0.5 GB | 低速 | なし |
フルノード(Full node) | 4-8 コア | 16 GB | 100 Mbps | SSD |
MegaETHの対処項目
チームによると、よく言われている「EVMが遅いという」ということは真実ではなく、revm(Rustで実装されたEVM)では約14,000TPSを達成できるとしています。しかし、MegaETHではこの速度でも不十分とし、さらなる最適化を行います。
高性能なシーケンサーを準備
リアルタイムのI/Oを実現するためには、ストレージの速度が重要な要素となり、これがレイテンシに影響を及ぼします。MegaETHのシステムでは、この問題を解決するために、シーケンサーノードに大量のメモリを搭載し、メモリ上にステート全体を保持します。これにより、SSDの読み取りレイテンシーが影響しなくなり、ステートへのアクセス速度が大幅に向上します。MegaETHのリサーチペーパーが発表された現在、Ethereumのステートは約100GB程度であり、MetaETHのシーケンサーノードが必要とするメモリ容量は1~4TBです。つまり、シーケンサーのメモリ容量は十分な量であると言えます。
高い並列実行度を確保
EVMの並列化については、当初Diem向けに開発された並列実行エンジンのBlock-STMを用いて、EVMで並列実行を実現する試みられています。しかし、これらの試みでは、ブロックの平均並列度は2未満で、ブロックを大きなバッチにマージしても、その数値は2.75にしかなりません。
この原因は、Ethereumのワークロードにおいて長い依存関係チェーンが多いことにあります。そのため、MegaETHでは、これらの競合を解決し、さらなる並列化を実現するための取り組みを行っています。これにより、EVMの並列化の効率とパフォーマンスが向上することを目指しています。
インタープリタのオーバーヘッドを減らす
MegaETHでは、AOT/JITコンパイルを使用し、EVMのシングルスレッドにおける計算集約的なコントラクトの実行を高速化します。
ステートの同期を最適化する
MegaETHでは、ステートの同期をより高速に行うための特定の要件が設定されています。例えば、ERC20トークンを1秒間に10万回転送するというシナリオでは、フルノードは152.6Mbpsの帯域幅が必要となります。同様に、Uniswapで1秒間に10万回スワップを行うシナリオでは、476.1Mbpsの帯域幅が必要となります。これらの要件は、利用可能なフルノードの数を制限する可能性があります。
そのため、MegaETHでは、限られた帯域幅でステートの更新を同期するための圧縮技術が採用されます。これにより、帯域幅の制約がある状況でも、効率的にステートの同期を行えるようにします。
ステートルート更新の最適化
Ethereumをはじめとする多くのブロックチェーンでは、データの検証を可能にするために、Merkle Patricia Trie(MPT)のようなツリー構造を用いてデータを管理しています。このステートルートと呼ばれるコミットメントを更新するためには、大量のI/Oが必要となり、それが高コストとなってしまいます。
MegaETHではこの問題に対処するため、最適化されたMPTであるNOMTを採用します。これにより、I/Oの使用量を削減し、ステートルートの更新をより効率的にします。
ブロックガス制限の最適化
MegaETHでは、まずコンパイルのオーバーヘッドと、コンパイルのメリットがないオペコードのガス価格を再設定します。この再設定の後、ブロックガスの制限を増やすことで、計算集約型のアプリケーションの実行をより効率的に行えるようにします。