Monad の概要
Monad(モナド)は、Ethereum仮想マシン(EVM)の処理をパイプライン化し、並列実行を可能にしたレイヤー1のパブリックブロックチェーンです。今までのEVM互換チェーンと比べてもパフォーマンスが非常に高く、10,000 TPSの処理容量と1秒のファイナリティを確保します。
EVMの処理を高速化するにあたり、Monadは主に5つの独自技術を盛り込んでいます。
- MonadBFT (パイプライン化されたHotStuffコンセンサスと独自改善)
- 繰延執行 (コンセンサスと実行の間をパイプライン化)
- 並列実行(トランザクションの並列実行)
- MonadDb (非同期入出力に対応したDB)
Monadでは、Ethereumと同様に、ユーザーはMetaMaskのようなウォレットを使うことができ、これまでと同じウォレットアドレスを使い続けることができます。また、開発者はEthereum用に作られたアプリケーションをコード変更なしにMonadに移植できるようになっています。
Monadの高速性の要となる技術の一つがパイプライン化です。パイプライン化を理解するために、洗濯のタスクを例に見ていきます。
洗濯における一連のタスクは、洗濯→乾燥→畳む→収納 という工程で進んで行きます。パイプライン化をしていない状態が図の上側です。一連のタスクが終わったらまた同じことを繰り返すため、4回のタスク繰り返すと合計で12時間を要します。
そして、パイプライン化した例が図の下側です。パイプライン化では、1回目のタスクの洗濯が終了すると、洗濯機は空きになるため、2回目のタスクの洗濯をすぐに実行します。このとき、裏では1回目のタスクの乾燥が行われています。パイプライン化では合計で7時間で4回のタスクが完了します。
MonadではEVMの処理を段階分けし、それらをパイプライン化することで並列実行を可能にします。
MonadとEthereumの比較
項目 | Ethereum | Monad |
---|---|---|
TPS(スマートコントラクトの呼び出し、転送) | ~10 | ~10,000 |
ブロック生成時間 | 12秒 | 1秒 |
ファイナリティ | 2エポック (12-18分) | シングルスロット (1秒) |
バイトコード標準 | EVM (Shanghaiフォーク) | EVM (Shanghaiフォーク) |
RPC API | Ethereum RPC API | Ethereum RPC API |
暗号化技術 | ECDSA | ECDSA |
アカウント | ECDSAの公開鍵のkeccak-256の最後の20バイト | ECDSAの公開鍵のkeccak-256の最後の20バイト |
コンセンサスメカニズム | Gasper (Casper-FFG finality gadget + LMD-GHOST fork-choice rule) | MonadBFT (パイプライン化されたHotStuffコンセンサスと独自改善) |
メモリプール | あり | あり |
トランザクションの順序付け | リーダーの裁量(実際にはPBS) | リーダーの裁量(デフォルトの動作:優先ガスオークション) |
シビル耐性メカニズム | PoS | PoS |
デリゲートの許可 | なし(LSTによる擬似的なデリゲート) | あり |
フルノードのハードウェア要件 | 4コア CPU / 16GB RAM / 1TB SSD / 25Mbps 帯域幅 | 16コア CPU / 32GB RAM / 2TB SSD / 100Mbps 帯域幅 |
Monad の高速化技術
MonadBFT
MonadBFTは、部分同期環境でビザンチン耐性がある高速なコンセンサスメカニズムです。かつてMetaが開発していたブロックチェーンDiemで採用されていたHotStuffを改良し、リーダーのタイムアウト時に3ラウンドではなく2ラウンドで合意を達成できるようにしました。また、パイプライン化により、ブロック間の通信を効率化し、ブロックk+1の提案にブロックkのQuorum Certificate (QC)やTimeout Certificate (TC)を乗せることができるようになっています。
繰延執行(Deferred Execution)
Monadブロックチェーンは、トランザクションの順序と実行を分離します。トランザクションの順序はMonadのノードがコンセンサスによって決めますが、トランザクションの実行は後から行われます。これにより、リーダーとバリデータノードは、トランザクションの結果を知らなくても、ブロックチェーンのステートを更新できます。
並列実行(Parallel Execution)
Monadでは、先行するトランザクションが完了する前に次のトランザクションを実行し始めます。トランザクションが不正確なデータを使用した場合は、正しいデータを使って再実行します。
また、ブロックチェーンでは複数の処理をまとめて実行することができるため、トランザクションに依存関係が発生する場合があります。Monadでは静的コードアナライザーを使って依存関係を予測し、必要なトランザクションが完了したときにのみトランザクションを実行するようにスケジュールします。
MonadDb
Monadは複数のトランザクションを並行して実行します。あるトランザクションがディスクからステートを読み取る必要がある場合、その操作が完了するのを待つべきではなく、代わりに読み取りを開始してその間に別のトランザクションを処理します。このような処理を行うためには、データ非同期入出力に対応したデータベースが必要になります。
既存のEthereumクライアントでは非同期処理に対応していないため、Monadでは非同期入出力の最新カーネルサポートを利用します。これにより、大量のカーネルスレッドを生成して保留中の入出力リクエストを非同期に処理しようとする必要がなくなります。
Monadのトークン
2024年1月3日現在、Monadのトークンの情報は公開されていません。
Monadに関する情報