著者:Decentralised.Co ソース:X、@Decentralisedco 翻訳:Good Oba、Golden Finance
トレーディングのスケーラビリティは業界で話題になっている。ここ数週間、私たちはMonadが取引処理速度(TPS)の向上にどのように役立つかを探ってきました。この記事では、Monadの仕組みについて詳しく説明します。
TPSは私たちが長い間注目してきた指標です。私たちはブロックチェーンがより多くのユーザーやアプリケーションに対応できるよう、より高いTPSをサポートできるようにしたいと考えています。下のグラフは、イーサとL2のTPSの数字です。今のところ、100TPSを突破したチェーンはない。TPSはスケーラビリティを測定するための一般的な用語であることに注意することが重要である。すべてのトランザクションが同じように複雑なわけではないため、単純なTPSの数値は正確ではない。しかし便宜上、TPSをスケーラビリティの尺度として考えることにする。
TPSを向上させる方法にはどのようなものがあるでしょうか?
1つの方法は、スピードのためにEVMとの互換性を犠牲にしたSolanaのような、まったく新しいシステムをゼロから構築することです。シングルスレッド実行の代わりにマルチスレッド実行(マルチコアCPUとシングルコアCPUに似ている)を使用し、トランザクションを並列処理し、異なるコンセンサスメカニズムを使用する。
2つ目のアプローチは、オフチェーン実行と集中型シーケンサーを使ってイーサをスケールさせることです。
3つ目のアプローチは、EVMを個別のコンポーネントに分解し、スケーラビリティを最適化することです。
新たに2億2500万ドルを調達したEVM互換のL1ブロックチェーンであるMonadは、既存のバージョンを使用するのではなく、ゼロからEVMを構築することを選択し、スケーラビリティを向上させるために3つ目のアプローチを取りました。
以下では、Monadが導入した大きな変更点について説明します。
並列実行
イーサネット仮想マシン(EVM)はトランザクションをシリアルに実行します。前のトランザクションが実行されるまで、次のトランザクションは待機しなければなりません。例えば、バイクの組み立て倉庫のプラットフォームを想像してみてください。複数のトラックがバイクの部品を運んでくる(各トラックには50台のバイクを製造するのに必要な部品がすべて入っている)。組み立て倉庫には4つの異なる機能があり、それぞれ専門のチーム(荷降ろし、仕分け、組み立て、積み込み)が担当している。
現在のEVMのセットアップでは、バイクの組み立てに必要な部品は、1つしかありません。現在のEVMのセットアップでは、プラットフォームは1つしかなく、積み下ろしも同じ場所で行っている。そのため、トラックが停車すると、バイクの部品が降ろされ、選別され、組み立てられて、同じトラックに積み込まれる。仕分けチームが作業している間、他のチームは待機している。したがって、彼らの作業を別のスロットとみなすと、各チームは4つのスロットに1回しか作業しないことになる。これは深刻な非効率につながり、より合理的なアプローチの必要性を浮き彫りにしている。
ここで、積み下ろしエリアが分かれている4つのプラットフォームを想像してみてください。荷降ろしチームが一度に1台のトラックしか扱えなくても、次の3台のスロットを待つ必要はありません。次のトラックに移って作業を始めればいいのだ。
仕分け、組み立て、積み込みチームも同じだ。トラックは荷降ろしが終わると積み込みエリアに移動し、積み込みチームが組み立てたバイクを積み込むのを待つ。そのため、1つのプラットフォームと積み込みエリアを持つ倉庫では、すべての作業を順次行うことになるが、4つのプラットフォームと異なる積み込みエリアを持つ倉庫では、並行して作業を処理することができる。
モナドを考えることは可能です。モナドを複数のトラック・プラットフォームを持つ倉庫インフラと考えることは可能ですが、この例よりもはるかに複雑です。トラック間に依存関係がある場合、複雑さは増します。例えば、50台のバイクを製造するのに必要な部品がすべてトラックにないとしたらどうだろう?トランザクションは常に独立しているとは限らない。そのため、モナドがトランザクションを並列に実行する場合、相互に依存するトランザクションを処理しなければならない。
どのようにこれを行うのでしょうか?楽観的並列実行と呼ばれる操作を実行します。プロトコルは独立したトランザクションだけを並列に実行することができる。例えば、Joelが1ETHの残高を持っている4つのトランザクションを考えてみましょう:
これらのトランザクションはすべて、保留中の結果と並行して実行され、1つずつ提出されます。保留中の結果出力がいずれかのトランザクションの元の入力と衝突する場合、そのトランザクションは再実行される。トランザクション2と4は互いに独立しているので、保留結果は他のトランザクションの入力と衝突しない。しかし1と4は独立していない。
4つのトランザクションはすべて同じ初期状態(Joelの残高1ETH)から始まるため、ここではJoelの残高に焦点を当てていることに注意してください。0.2ETHをJoelに送信した後、Joelの残高は0.8ETHになり、0.1ETHをSidに送信した後、彼の残高は0.9ETHになる。保留中の1の結果が送信された後、Joelの新しい残高は0.8ETHになります。
この出力は3の入力と衝突します。そこで、0.8ETHの入力で3を再実行します。3を実行した後、Joelの残高は0.7ETHに変わります。
MonadDb
この点に関して、明らかな疑問は、ほとんどのトランザクションを再実行する必要がないことをどうやって知ることができるかということです。その答えは、再実行がボトルネックではないという事実にある。ボトルネックはイーサのメモリへのアクセスである。イーサネットの状態をデータベースに保存する方法が、その状態へのアクセスを困難にしている(時間がかかり、コストがかかる)ことが判明した。Monadは、読み取り操作に関連するオーバーヘッドを削減する方法でデータベースを構築しました。
トランザクションを再実行する必要があるとき、すべての入力はすでにキャッシュメモリにキャッシュされており、全体の状態にアクセスするよりもはるかに高速にアクセスできます。
Solanaはテストネットワーク上では50k TPSだが、メインネットワーク上では約1k TPSに過ぎず、Monadは内部のテストネットワークで実質10k TPSを達成したと主張している。 これは必ずしも実世界のパフォーマンスを示すものではないが、Monadが実世界でどのようなパフォーマンスを発揮するのか見るのが待ち遠しい!
.