開発者向けMonad

Monadは、秒間10,000トランザクション、1秒のブロック時間、およびシングルスロットの最終確定を持つ、Ethereum互換のレイヤー1ブロックチェーンです。

MonadのEthereumバーチャルマシンの実装は、上海フォークに準拠しており、Monad実行環境での歴史的なEthereumトランザクションのシミュレーションは同一の結果を生み出します。また、Monadは完全なEthereum RPC互換性を提供するため、ユーザーはMetaMaskやEtherscanのような馴染みのあるツールを使用してMonadと対話できます。

Monadは、いくつかの主要な革新の導入を通じてこれらのパフォーマンスの改善を達成しています:

  • MonadBFT(追加の研究改善を備えたパイプライン化されたHotStuff合意)

  • 遅延実行(合意と実行の間のパイプライニングを大幅に増やすことで実行予算を大幅に増加させる)

  • MonadDb(高性能状態バックエンド)

Monadには並列実行とパイプライニングが特徴ですが、Monad内のブロックはリニアであり、各ブロック内のトランザクションはリニアに順序付けられていることに注意することが重要です。

トランザクション形式

スマートコントラクト

MonadはEVMバイトコードをサポートし、Ethereumとバイトコードが等価です。すべてのオペコード(上海フォーク時点)がサポートされています。

コンセンサス

実行

各ブロックの実行フェーズは、そのブロックについてのコンセンサスが得られた後に始まり、ノードは後続のブロックについてのコンセンサスを進めることができます。

並列実行

トランザクションはリニアに順序付けられており、実行の仕事は、そのトランザクションのリストを連続して実行することで得られる状態に到達することです。素朴なアプローチは、トランザクションを次々に実行することです。もっと良い方法はありますか?はい、あります!

Monadは並列実行を実装しています:

  • 実行者は、トランザクションを実行するための仮想マシンです。Monadは多くの実行者を並行して実行します。

  • 実行者はトランザクションを取り、結果を生成します。結果とは、トランザクションの入力出力のリストであり、入力は実行の過程でSLOADされた(ContractAddress、Slot、Value)のタプル、出力はトランザクションの結果としてSSTOREされた(ContractAddress、Slot、Value)のタプルです。

  • 結果は当初、保留状態で生成されます。その後、トランザクションの元の順序でコミットされます。結果がコミットされると、その出力が現在の状態を更新します。結果がコミットされる番になったとき、Monadはその入力が現在の状態とまだ一致するかを確認します。一致しない場合、Monadはトランザクションを再スケジュールします。この並行制御の結果、Monadの実行は、トランザクションが連続して実行された場合と同じ結果を生成することが保証されます。

  • トランザクションが再スケジュールされると、必要な入力の多くまたはすべてがキャッシュされるため、再実行は一般的に比較的安価です。再実行に際して、トランザクションが前回の実行で行ったのと異なる一連の入力を生成する可能性があることに注意してください。

MonadDb:高性能状態バックエンド

全てのアクティブな状態はMonadDbに保存されます。これは、メルクルトライデータの保存に最適化された、ソリッドステートドライブ(SSD)用のストレージバックエンドです。アップデートはバッチ処理され、メルクルルートを効率的に更新できるようになっています。

MonadDbはインメモリキャッシングを実装し、効率的な非同期読み書きのためにasioを使用します。ノードには最適なパフォーマンスのために32 GBのRAMが必要です。

Ethereumとの比較:ユーザーの視点

Last updated