モナドの理解

取引の拡張性は常に話題になっており、この記事ではMonadがどのようにTPS(1秒あたりの取引数)を拡大するのに役立つか、その仕組みの詳細な説明とともに探っています。ボトルネックは再実行ではなく、Ethereumのメモリへのアクセスにあります。 Ethereumは状態をデータベースに格納する方法が、状態へのアクセスを困難にしています(時間がかかり、したがって高価です)、これもMonadによる別の改善です。

こんにちは、

トランザクションの拡張性は話題になっています。過去数週間、MonadがどのようにTPSのスケーリングを支援するかを探ってきました。

以下のノートは、Monadの動作原理について書かれたものです@desh_saurabh. 登録を検討してくださいDecentralised.coもしWeb3に関するデータ駆動の解説を読むのが好きなら、その先でお会いしましょう!

TPSは私たちが過剰に気にする指標です。私たちのチェーンはより多くのユーザーやアプリケーションをサポートできるよう、より高いTPSをサポートしたいと考えています。以下のチャートは、EthereumとL2sのTPSの数値を示しています。1つのチェーンも100 TPSを超えたことはありません。TPSは規模を測定するための一般的な総合用語です。TPSはすべての取引が同じではないため、複雑さが異なるため、正確ではありません。しかし、私たちは簡便さのために規模の尺度としてTPSを使用しています。

TPSを増やしたい場合、どうすればよいですか?

  1. 一つのアプローチは、Solanaが行ったように完全に新しいシステムを構築することです。それは速度を重視してEVM互換性を犠牲にします。単一スレッドの代わりにマルチスレッドの実行(マルチコアCPUと単一コアCPUを考えてください)、トランザクションを並列化し、異なるコンセンサスメカニズムを使用します。
  2. 第2のアプローチは、オフチェーン実行を使用し、集中型シーケンサーでEthereumの規模を拡大することです。
  3. 第三は、EVMを別々のコンポーネントに分解し、スケーラビリティを向上させるために最適化することです。

最近2億2500万ドルを調達した新しいEVM互換のL1であるMonadは、EVMをそのまま使用せずにゼロから構築しています。スケーラビリティを向上させるために、この第3のアプローチを選択しました。

私たちは、Monadがテーブルにもたらすいくつかの重要な変更について話し合います。

並列実行

Ethereum Virtual Machine (EVM)はトランザクションを連続して実行します。1つのトランザクションが実行されるまで、次のトランザクションは待たなければなりません。これを考えると、例えばオートバイ組み立て倉庫にプラットフォームがあるとしましょう。複数のトラックがオートバイの部品を運びます(各トラックには50台のオートバイを作るための必要な部品がすべて含まれています)。組み立て倉庫には、それぞれが専任のチームで行う4つの異なる機能があります。これは、荷卸し、仕分け、組み立て、積み込みです。

現在のEVMセットアップでは、1つのプラットフォームしかなく、同じ場所が積み込みと積み下ろしに使用されています。したがって、トラックが駐車されると、オートバイの部品が積み下ろされ、整理され、組み立てられ、同じトラックに積み込まれます。整理チームが作業している間、他のチームはただ待機しています。したがって、彼らの仕事を異なるスロットと考えると、各チームは4つのスロットのうち1回しか作業しません。これにより、大幅な非効率が生じ、より効率的なアプローチが必要であることが明らかになります。

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

同じことが並べ替え、組み立て、および積み込みチームにも当てはまります。トラックの積み荷が降ろされると、トラックは積み込みエリアに移動し、組み立てられたオートバイを積み込むために積み込みチームを待ちます。したがって、一つのプラットフォームと積み降ろしエリアだけの倉庫はすべてを順次実行し、4つのプラットフォームと異なる積み降ろしエリアを持つ倉庫は並列化しています。

Monadを倉庫と複数のトラックプラットフォームを持つインフラと考えてください-しかし、それほど単純ではありません。トラックが依存関係にある場合、複雑さは増します。例えば、50台のバイクを作るために必要な部品を持っていないトラックが1つあるとどうなりますか?取引は常に独立しているわけではありません。したがって、Monadはそれらを並列で実行する際に、お互いに依存する取引を扱わなければなりません。

どのようにして?それは楽観的並行実行と呼ばれるものを実行します。プロトコルは独立したトランザクションのみを並行して実行できます。たとえば、Joelの残高が1 ETHである4つのトランザクションを考えてみてください。

  1. JoelがSaurabhに0.2 ETHを送信しました。
  2. SidはNFTを作成します。
  3. JoelはSidに0.1 ETHを送金します。
  4. ShlokがPEPEを購入します。

すべてのこれらの取引は、1つずつ確定される保留中の結果と並行して実行されます。保留中の結果の出力が他の取引の元の入力と競合する場合、取引は再実行されます。取引2と4は互いに独立しているため、他の取引の入力と競合する保留中の結果を持っていません。しかし、1と3は独立していません。

4つの取引がすべて同じ状態から始まるため、ここで関心があるのはJoelの1 ETHの残高です。 Joelが0.2 ETHを送信した結果、0.8 ETHになります。 JoelがSidに0.1 ETHを送金した後、残高は0.9 ETHになります。結果は1つずつ確定され、出力がいずれの入力とも競合しないようにします。1の保留中の結果が確定した後、Joelの新しい残高は0.8 ETHになります。

この出力は3の入力と競合しています。したがって、3は今、0.8 ETHの入力で再実行されます。3が実行された後、Joelの残高は0.7 ETHです。

MonadDb

この時点で、明らかな疑問は、ほとんどの取引を再実行する必要がないかどうかをどのように知るかということです。答えは、再実行がボトルネックではないという点にあります。ボトルネックは、Ethereumのメモリへのアクセスです。 Ethereumがデータベースに状態を格納する方法が、状態へのアクセスを困難(時間がかかり、したがってコストがかかる)にしていることがわかります。ここで、Monadの別の改善点であるMonadDbが登場します。 Monadは、読み取り操作に関連するオーバーヘッドを削減する方法でデータベースを構築しています。

取引を再実行する必要がある場合、すべての入力はすでにキャッシュメモリに格納されており、全体的な状態と比較してアクセスが格段に容易です。

Solanaはテストネットで50k TPSを持っていますが、現在メインネットでは約1kです。Monadは内部テストネットで10kの実際のTPSを達成したと主張しています。これは常に現実世界でのパフォーマンスを示すものではありませんが、Monadが実際の環境でどのように機能するかを楽しみにしています。

ステートメント:

  1. この記事は元々「Monadの理解」というタイトルで、[から転載されたものです。chaincatcher]. All copyrights belong to the original author [分散化された.Co]. If you have any objection to the reprint, please contact the Gate Learn team、チームはできるだけ早く対応します。

  2. 免責事項: この記事に表現されている見解や意見は、著者個人の見解を表しており、投資アドバイスを構成するものではありません。

  3. 他言語への記事の翻訳は、Gate Learnチームによって行われます。特に言及されていない限り、翻訳された記事のコピー、配布、あるいは盗用は禁止されています。

モナドの理解

中級5/21/2024, 2:17:47 AM
取引の拡張性は常に話題になっており、この記事ではMonadがどのようにTPS(1秒あたりの取引数)を拡大するのに役立つか、その仕組みの詳細な説明とともに探っています。ボトルネックは再実行ではなく、Ethereumのメモリへのアクセスにあります。 Ethereumは状態をデータベースに格納する方法が、状態へのアクセスを困難にしています(時間がかかり、したがって高価です)、これもMonadによる別の改善です。

こんにちは、

トランザクションの拡張性は話題になっています。過去数週間、MonadがどのようにTPSのスケーリングを支援するかを探ってきました。

以下のノートは、Monadの動作原理について書かれたものです@desh_saurabh. 登録を検討してくださいDecentralised.coもしWeb3に関するデータ駆動の解説を読むのが好きなら、その先でお会いしましょう!

TPSは私たちが過剰に気にする指標です。私たちのチェーンはより多くのユーザーやアプリケーションをサポートできるよう、より高いTPSをサポートしたいと考えています。以下のチャートは、EthereumとL2sのTPSの数値を示しています。1つのチェーンも100 TPSを超えたことはありません。TPSは規模を測定するための一般的な総合用語です。TPSはすべての取引が同じではないため、複雑さが異なるため、正確ではありません。しかし、私たちは簡便さのために規模の尺度としてTPSを使用しています。

TPSを増やしたい場合、どうすればよいですか?

  1. 一つのアプローチは、Solanaが行ったように完全に新しいシステムを構築することです。それは速度を重視してEVM互換性を犠牲にします。単一スレッドの代わりにマルチスレッドの実行(マルチコアCPUと単一コアCPUを考えてください)、トランザクションを並列化し、異なるコンセンサスメカニズムを使用します。
  2. 第2のアプローチは、オフチェーン実行を使用し、集中型シーケンサーでEthereumの規模を拡大することです。
  3. 第三は、EVMを別々のコンポーネントに分解し、スケーラビリティを向上させるために最適化することです。

最近2億2500万ドルを調達した新しいEVM互換のL1であるMonadは、EVMをそのまま使用せずにゼロから構築しています。スケーラビリティを向上させるために、この第3のアプローチを選択しました。

私たちは、Monadがテーブルにもたらすいくつかの重要な変更について話し合います。

並列実行

Ethereum Virtual Machine (EVM)はトランザクションを連続して実行します。1つのトランザクションが実行されるまで、次のトランザクションは待たなければなりません。これを考えると、例えばオートバイ組み立て倉庫にプラットフォームがあるとしましょう。複数のトラックがオートバイの部品を運びます(各トラックには50台のオートバイを作るための必要な部品がすべて含まれています)。組み立て倉庫には、それぞれが専任のチームで行う4つの異なる機能があります。これは、荷卸し、仕分け、組み立て、積み込みです。

現在のEVMセットアップでは、1つのプラットフォームしかなく、同じ場所が積み込みと積み下ろしに使用されています。したがって、トラックが駐車されると、オートバイの部品が積み下ろされ、整理され、組み立てられ、同じトラックに積み込まれます。整理チームが作業している間、他のチームはただ待機しています。したがって、彼らの仕事を異なるスロットと考えると、各チームは4つのスロットのうち1回しか作業しません。これにより、大幅な非効率が生じ、より効率的なアプローチが必要であることが明らかになります。

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

同じことが並べ替え、組み立て、および積み込みチームにも当てはまります。トラックの積み荷が降ろされると、トラックは積み込みエリアに移動し、組み立てられたオートバイを積み込むために積み込みチームを待ちます。したがって、一つのプラットフォームと積み降ろしエリアだけの倉庫はすべてを順次実行し、4つのプラットフォームと異なる積み降ろしエリアを持つ倉庫は並列化しています。

Monadを倉庫と複数のトラックプラットフォームを持つインフラと考えてください-しかし、それほど単純ではありません。トラックが依存関係にある場合、複雑さは増します。例えば、50台のバイクを作るために必要な部品を持っていないトラックが1つあるとどうなりますか?取引は常に独立しているわけではありません。したがって、Monadはそれらを並列で実行する際に、お互いに依存する取引を扱わなければなりません。

どのようにして?それは楽観的並行実行と呼ばれるものを実行します。プロトコルは独立したトランザクションのみを並行して実行できます。たとえば、Joelの残高が1 ETHである4つのトランザクションを考えてみてください。

  1. JoelがSaurabhに0.2 ETHを送信しました。
  2. SidはNFTを作成します。
  3. JoelはSidに0.1 ETHを送金します。
  4. ShlokがPEPEを購入します。

すべてのこれらの取引は、1つずつ確定される保留中の結果と並行して実行されます。保留中の結果の出力が他の取引の元の入力と競合する場合、取引は再実行されます。取引2と4は互いに独立しているため、他の取引の入力と競合する保留中の結果を持っていません。しかし、1と3は独立していません。

4つの取引がすべて同じ状態から始まるため、ここで関心があるのはJoelの1 ETHの残高です。 Joelが0.2 ETHを送信した結果、0.8 ETHになります。 JoelがSidに0.1 ETHを送金した後、残高は0.9 ETHになります。結果は1つずつ確定され、出力がいずれの入力とも競合しないようにします。1の保留中の結果が確定した後、Joelの新しい残高は0.8 ETHになります。

この出力は3の入力と競合しています。したがって、3は今、0.8 ETHの入力で再実行されます。3が実行された後、Joelの残高は0.7 ETHです。

MonadDb

この時点で、明らかな疑問は、ほとんどの取引を再実行する必要がないかどうかをどのように知るかということです。答えは、再実行がボトルネックではないという点にあります。ボトルネックは、Ethereumのメモリへのアクセスです。 Ethereumがデータベースに状態を格納する方法が、状態へのアクセスを困難(時間がかかり、したがってコストがかかる)にしていることがわかります。ここで、Monadの別の改善点であるMonadDbが登場します。 Monadは、読み取り操作に関連するオーバーヘッドを削減する方法でデータベースを構築しています。

取引を再実行する必要がある場合、すべての入力はすでにキャッシュメモリに格納されており、全体的な状態と比較してアクセスが格段に容易です。

Solanaはテストネットで50k TPSを持っていますが、現在メインネットでは約1kです。Monadは内部テストネットで10kの実際のTPSを達成したと主張しています。これは常に現実世界でのパフォーマンスを示すものではありませんが、Monadが実際の環境でどのように機能するかを楽しみにしています。

ステートメント:

  1. この記事は元々「Monadの理解」というタイトルで、[から転載されたものです。chaincatcher]. All copyrights belong to the original author [分散化された.Co]. If you have any objection to the reprint, please contact the Gate Learn team、チームはできるだけ早く対応します。

  2. 免責事項: この記事に表現されている見解や意見は、著者個人の見解を表しており、投資アドバイスを構成するものではありません。

  3. 他言語への記事の翻訳は、Gate Learnチームによって行われます。特に言及されていない限り、翻訳された記事のコピー、配布、あるいは盗用は禁止されています。

Start Now
Sign up and get a
$100
Voucher!