ホームページ  >  記事  >  Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

WBOY
WBOY転載
2024-05-06 09:40:02460ブラウズ

トランザクションのスケーラビリティは常にホットなトピックです。過去数週間にわたり、私たちはモナドが TPS のスケールにどのように役立つかを模索してきました。

これは、Saurabh Deshpande によって書かれたモナドの仕組みの詳細な説明です。

Monadの仕組みを詳しく解説

TPSは私たちが注目しているインジケーターです。チェーンはより多くのユーザーとアプリケーションをサポートできるため、より高い TPS をサポートできるようにしたいと考えています。以下のグラフは、イーサリアムと L2 の TPS 数値を示しています。 100 TPS マークを突破したチェーンはありません。 TPS はスケールを測定するために使用される一般的な用語であることに注意してください。すべてのトランザクションが同じではなく、複雑さが異なるため、TPS は不正確です。ただし、簡単にするために、スケールの尺度として TPS を使用します。

Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

TPSを上げたい場合はどうすればよいですか?

  • 最初の方法は、Solana がやったように、まったく新しいシステムを構築することです。速度と比較して EVM の互換性が犠牲になります。シングルスレッド実行ではなくマルチスレッド実行を使用し (マルチコア CPU とシングルコア CPU を考えてください)、トランザクションを並列化し、異なるコンセンサス メカニズムを使用します。

  • 2 番目のアプローチは、オフチェーン実行を使用し、集中シーケンサーで Ethereum をスケールすることです。

  • 3 番目のアプローチは、EVM を個別のコンポーネントに分解し、それらを最適化してスケーラビリティを向上させることです。

Monad は、最近 2 億 2,500 万ドルを調達した新しい EVM 互換 L1 で、EVM を直接使用するのではなく、ゼロから構築しています。スケーラビリティを高めるために、この 3 番目のアプローチを選択しました。

私たちはモナドによってもたらされたいくつかの大きな変化について話し合いました。

並列実行

イーサリアム仮想マシン (EVM) はトランザクションを順番に実行します。 1 つのトランザクションが実行される前に、次のトランザクションが待機する必要があります。このように考えてください。オートバイ組立工場のプラットフォームを考えてみましょう。複数のトラックがオートバイの部品を配送します (各トラックには 50 台のオートバイを組み立てるのに必要なすべての部品が搭載されています)。組立工場は、荷降ろし、仕分け、組立て、積み込みという 4 つの異なる機能を実行します。

Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

現在の EVM セットアップではプラットフォームが 1 つだけあり、ロードとアンロードに同じ場所が使用されます。そのため、トラックが駐車している間に、オートバイの部品が降ろされ、分類され、組み立てられ、同じトラックに積み込まれます。分類チームが作業している間、他のチームが待機しています。したがって、各チームの作業を別のスロットとして考えると、各チームは 4 つのスロットに 1 回しか作業しません。その結果、大幅な非効率が生じ、より合理化されたアプローチの必要性が浮き彫りになります。

ここで、4 つの異なる積み下ろしエリアがあるプラットフォームを想像してください。荷降ろしチームが一度に 1 台のトラックしか作業できない場合でも、次の 3 つのスロットを待つ必要はありません。次のトラックに直接積み替えることができます。

仕分け、組み立て、積み込みチームも同様です。荷降ろしが完了すると、トラックは積み込みベイに移動し、積み込みチームが組み立てられたバイクを積み込むのを待ちます。したがって、1 つのプラットフォームとロード/アンロード エリアのみを備えた倉庫はすべての操作を順番に実行しますが、4 つのプラットフォームと異なるロード/アンロード エリアを備えた倉庫は並列化を実行します。

Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

モナドは、複数のトラックのプラットフォームを備えた倉庫に相当するインフラストラクチャと考えてください。しかし、それは単純ではありません。トラックに依存すると複雑さが増します。たとえば、1 台のトラックに 50 台のオートバイを組み立てるためのすべての部品がなかったらどうなるでしょうか?トランザクションは常に独立しているとは限りません。したがって、モナドは、並列実行する場合、相互に依存するトランザクションを処理する必要があります。

どうやって対処すればいいですか?オプティミスティック並列実行と呼ばれる手法を実装しています。このプロトコルは、独立したトランザクションのみを並行して実行できます。たとえば、Joel の残高が 1 ETH である 4 つのトランザクションを考えます。

  • Joel は Saurabh に 0.2 ether を送信します

  • Sid が NFT を生成します

  • Joel は Sid

  • に 0.1 ether を送信します
  • Shlokペペを購入

これらのトランザクションはすべて並行して実行され、保留中の結果が 1 つずつ送信されます。保留中の結果の出力がトランザクションの元の入力と競合する場合、トランザクションは再実行されます。トランザクション 2 と 4 は互いに独立しているため、他のトランザクションからの入力と競合する保留中の結果はありません。ただし、トランザクション 1 と 4 は独立していません。

4 つのトランザクションはすべて同じ状態から開始されるため、焦点は Joel の残高 1 ETH にあることに注意してください。 Joel が 0.2 ETH を送金した後の残高は 0.8 ETH でした。ジョエルがシドに 0.1 ETH を送金すると、残高は 0.9 ETH になります。結果は 1 つずつ送信され、出力が入力と競合しないことが保証されます。保留中の結果 1 を送信した後のジョエルの新しい残高は 0.8 ETH です。

この出力は 3 番目のトランザクションの入力と競合します。したがって、0.8 ETH を入力して 3 が再実行されます。 3 を実行した後のジョエルの残高は 0.7 ETH です。

MonadDb

Monad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解する

この時点で明らかな疑問は、ほとんどのトランザクションを再実行する必要がないことをどのようにして知ることができるかということです。答えは、再実行がボトルネックではないということです。ボトルネックはイーサリアムのメモリへのアクセスです。イーサリアムがデータベースに状態を保存する方法により、状態へのアクセスが困難になることがわかりました(時間がかかり、したがってコストが高くなります)。これは Monad のもう 1 つの改良点です: MonadDb。モナドがデータベースを構造化する方法により、読み取り操作に関連するオーバーヘッドが削減されます。

トランザクションを再実行する必要がある場合、すべての入力はすでにキャッシュ メモリ内にあるため、全体の状態と比較してアクセスが簡単です。

Solana のテストネットでは 50,000 TPS がありましたが、メインネットでは約 1,000 TPS しかありません。 Monad は、内部テストネットで 10,000 現実世界の TPS を達成したと主張しています。これは必ずしも現実世界のパフォーマンスを表すわけではありませんが、Monad が現実世界のアプリケーションでどのようにパフォーマンスするかを見るのが待ちきれません。

以上がMonad 入門ガイド: 並列 EVM とパフォーマンスの向上をすぐに理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。