EVMは、コードとホストの間の抽象化レイヤーであり、イーサリアムの円滑な動作を維持するための保証として機能します。 結局のところ、EVMとは何ですか? EVMの原理と一般的な使用例は何ですか?それをさらに深く掘り下げてみましょう。
現在最も人気のあるブロックチェーンとして、イーサリアムはユーザーにさまざまな分散型アプリケーションを提供します。 これは、人々がDeFiやNFTなどを指すときに最も頻繁に言及される用語です。 また、イーサリアムの中核部分であるEVMも、人々の大きな注目を集めています。 では、EVMとイーサリアムの関係はどのようなものでしょうか?
EVM は イーサリアム仮想マシン を表します。 イーサリアムで定義されているように、EVMは、すべてのイーサリアムアカウントとスマートコントラクトがイーサリアムチェーン上に存在するランタイム環境です。
EVMは、イーサリアムクライアントを実行しているすべての接続されたコンピューターによって維持される単一のエンティティとして存在します。 これは、ブロック間で新しい有効な状態を計算するためのルールを定義するものです。
ビットコインのような分散型台帳の代わりに、イーサリアムは分散型ステートマシンです。 ブロックからブロックへの変更は、イーサリアム上のすべてのアカウントと残高の状態の更新を表します。 更新は、EVM によるコントラクトのコードに基づいて計算されます。
図: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM はスタックベースの仮想マシンであり、すべての操作をスタック内で直接実行します。 スマートコントラクトがバイトコードにコンパイルされると、EVMはバイトコードに基づいて、メモリからの変数のフェッチとスタックへの追加、スタック内の変数の計算、メモリへの変数の格納などの操作を実行します。
EVMのデータストレージには、メモリとストレージの2つの主要なタイプがあります。 ストレージ内の変数は、コントラクトの実行後にイーサリアムに永続的に保存されますが、メモリ内の変数は、コードがEVMで実行されている間一時的に存在します。
例としてコントラクトの呼び出しを取り上げます。 Solidityと契約書を作成し、コンパイラを介してメタデータをコンパイルし、イーサリアムで公開しました。 コントラクトの状態を更新する必要がある場合は、コントラクトを呼び出す必要があります。 ただし、OSもWindowsもスマートコントラクトを直接実行することはできません。 EVMは、スマートコントラクトの実行環境を提供するために必要です。 具体的な手順は次のとおりです。 まず、EVMはコントラクトアドレスを介してイーサリアムに保存されているコントラクトコードを見つけます。次に、実行環境が生成されます。最後に、コントラクトの内容はバイトコードに変換され、動作のためにEVMに入れられます。 操作から得られた結果は、次のブロックに最新の状態として保存されるため、状態更新プロセスが完了します。
図: https://cnodejs.org/topic/5aeecba802591040485bab2a
EVM の実装
現在、すべてのイーサリアムクライアントにはEVM実装が含まれています。 イーサリアムは、EVM機能を実装するために、Python、C ++、js、Goなどを含むいくつかのプログラミング言語のソースコードを立ち上げました。 これは、ユーザーがEVMの原理をより便利な方法で理解するのに役立ちます。
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone - C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ イーサリアムJS-モノレポ
eEVM - C++: https://github.com/microsoft/eevm
ハイパーレジャーバロウ - 行く: https://github.com/hyperledger/burrow
スマートコントラクトは、EVM上で排他的に実行されるコードです。 一度デプロイすると変更できません。 イーサリアムは、スマートコントラクトを通じて状態を定義、変更、保存し、さまざまな分散型アプリケーションを実現します。 EVMは、スマートコントラクトを実行できる環境として機能し、高速道路と車の関係に似ています。
一定量のガスを消費するEVMでスマートコントラクトを実行するには、かなりの計算能力が必要です。 理解を深めるために、有料道路で通行料を支払う必要がある車両を考えてみてください。
ガス料金は、イーサリアムをより分散化する方法として、世界中の鉱夫が参加してコンピューティングパワーを提供するインセンティブを与えるのに役立ちます。 また、イーサリアムメインネットの輻輳につながる可能性のあるランダムな操作要求をユーザーが送信したり、悪意のある攻撃を防ぐことでイーサリアムがクラッシュするのを防ぎます。
イーサリアムのスマートコントラクトはSolidityで記述され、EVMで実行される前にバイトコードにコンパイルされます。 バイトコードには、オペコードまたは命令コードが含まれます。 EVM には 144 個のオペコードがあり、それぞれに特定の機能を備えているため、EVM チューリングを完全化できます。 あらゆるタイプの計算問題を解決できます。 SolidityとOpcodeにより、複雑なスマートコントラクトを作成し、EVMにさまざまな機能を実装することができるため、ユーザーにさまざまなdAppを提供できます。
同じコードの場合、実行環境や実行回数とは関係がないため、異なるEVMで実行した後の出力は同じです。 EVMの確実性により、コードの信頼性が確保され、予期しない結果を回避できます。 この機能は、特にイーサリアムで大規模な取引を行っているユーザーの利益を保護するのに役立ちます。
EVM は、コードが実行される分離されたサンドボックスのようなものです。 実行中のプロセスは、コンピューターのソフトウェア/ハ ードウェアに害を及ぼすことも、イーサリアムの基盤となるプロトコルにも影響を与えません。 EVMの分離は、ハッカーがEVMを実行するマシンを攻撃するのを防ぎ、イーサリアムの基盤となるプロトコルが改ざんされるのを防ぎます。 これは、イーサリアムを保護する保証として機能します。
EVM がコードを実行するプロセスを中断できます。 ユーザーが無限ループなどの間違ったコードを実行した場合、ガスメカニズムを展開して実行プロセスを終了し、そのようなコードが計算能力を無期限に占有するのを防ぐことができます。 EVMでコードを実行する前に、ガスの上限を事前に設定しておく必要があります。 ガスがなくなると、コードの実行が停止し、チェーンを更新せずに状態がロールバックされます。
ユーザーが増えるにつれて、イーサリアムメインネットは、ネットワークの混雑や高いガス料金など、多くの問題に遭遇します。 イーサリアムの設計に限定して、これらの問題を根本的に解決することはできません。
近年、ガス料金が低く、ネットワークが高速である新しいパブリックチェーンや、イーサリアムを拡張するように設計されたレイヤー2チェーンがたくさんあります。 これらのチェーンはすべてスマートコントラクトチェーンであり、より優れた基礎設計を持っていると言われており、さまざまなdAppの構築に使用できます。
これらのチェーンは、イーサリアムエコシステムの余剰需要を引き受け、イーサリアムの支配的な地位に挑戦します。 イーサリアムの対応物はEVMと互換性がある必要がありますか?この分岐に関して、これらのチェーンは、EVM互換チェーンと非EVMチェーンの2つのカテゴリに分類されます。
最近、レイヤー1のパブリックチェーンが次々と登場しています。 イーサリアムと並行して実行されるオンチェーンエコシステムを再構築することで、イーサリアムの既存の欠点を克服できますが、完全なエコシステムを構築し、dAppをゼロから開発するには、かなりの人的資源が必要です。 資格のあるプログラマーの不足は、新しいパブリックチェーンエコシステムの成長を妨げています。 エコシステムが未開発のパブリックチェーンの場合、短期間でイーサリアムからユーザーを引き付けることは困難です。
このため、一部のパブリックチェーンはEVMと互換性があるように設計されています。 もともとイーサリアム上で実行されているDAppは、ソースコードにわずかな変更を加えるだけで、EVM互換のパブリックチェーンに完全に移行できます。 開発リソースの使用を最大化するだけでなく、イーサリアムから新しいチェーンに移行するプロセスでユーザーにより良いエクスペリエンスを提供できます。
ただし、EVMとの互換性には必然的に特定の問題が伴います。 EVMのルールに限定された多くのEVM互換チェーンは、均質化せずにイノベーションを達成する方法に関する問題に直面しています。 ただし、EVM以外のチェーンは、これらのルールを破り、新しいルールセットをゼロから開発できるため、イノベーションを根本的に達成できます。
現在、主流のパブリックチェーンの70%以上が、BSC、雪崩、ファントム、トロン、セロなどのEVMと互換性があります。 開発者がdAppを開発したり、これらのチェーンにイーサリアムアプリをデプロイしたりして、パフォーマンスを向上させ、ガス料金を下げることは難しくありません。
他のいくつかのパブリックチェーンは非EVMですが、Sol、Terraなどの独自の仮想マシンを開発しています。 EVMとの互換性はありませんが、これらのチェーンは、革新的な設計と優れたオンチェーンパフォーマンスで忠実なユーザーや機関のグループを魅了しています。 たとえば、最近世界中で人気のある2つのブロックチェーンゲーム、ステップNとLet me speakは、Solチェーンに基づいており、世界中から熱狂的なファンが参加しています。
特に、EVM互換チェーンは非EVMチェーンと共存できます。 一部の非EVMチェーンもEVMとの互換性を持ち始めています。 これを達成するプロセスは、コードを変更するために多大な努力を必要とするため、骨の折れるものです。 この例は、開発者がEVM上でdAppを構築できるようにするNeonを立ち上げたSolです。
図:パブリックチェーンのEVM互換性
イーサリアムのスケーリングソリューションとして、レイヤー2は競合他社ではなくイーサリアムを補完します。 レイヤ 2 チェーンはすべて EVM 互換で、レイヤ 1 よりも高いレベルの互換性を備えています。 レイヤ 2 と EVM との互換性を実現するには、EVM との互換性と EVM の同等性の 2 つのソリューションがあります。
初期のレイヤ 2 チェーンは EVM 互換であり、レイヤ 1 チェーンの EVM 互換に似ています。 イーサリアムレイヤー1のスマートコントラクトは、いくつかの変更を加えることでレイヤー2にデプロイできます。 たとえば、Optimismによって立ち上げられたUnipigは、完全にUniswapコードを再構築したものです。 レイヤ 2 ではユニスワップと見なされます。
EVM との互換性にはいくつかの制限があります。 EVM互換チェーンでスマートコントラクトを開発する場合、一部のEVMベースの開発ツールとフレームワークが利用できない場合があります。 さらに、元々レイヤー1で配置されていたスマートコントラクトについては、開発者は、スマートコントラクトがEVM互換ブロックチェーン上でスムーズに実行できるように、いくつかの調整を行う必要があります。
EVMの同等性は、イーサリアムレイヤー1とレイヤー2でスマートコントラクトを開発する際に、開発者にまったく同じエクスペリエンスを提供することを目的としています。 これにより、Layer2開発者に大きなメリットがあり、開発効率がさらに向上し、EVM互換性に基づく開発とコードメンテナンスのコストが節約されました。
現在、Artbitrum、Optimism、Metisなどの主流のレイヤー2ソリューションは、EVMと同等のものを達成しています。 EVMの同等性は、スケーリングによって引き起こされる開発と移行のコストを最小限に抑えるために、イーサリアムの機能をレイヤー2に適切に転送できます。 EVMの等価性は、将来的にレイヤー2の主流の標準になると予想されており、多くのレイヤー2ソリューションはEVMの同等性をめぐって激しい競争を繰り広げることになります。
EVMは、イーサリアムを稼働させ続けるコアです。 イーサリアムの優位性の確立に伴い、主要なパブリックチェーンとレイヤー2チェーンは、EVMの基礎となる設計コンセプトに従うか、互換性があります。 したがって、EVMは間違いなくブロックチェーン全体に大きな影響を与えました。 EVM 自体には多くの問題があり、新しいチェーンと EVM との互換性を確保することが困難になっています。 それにもかかわらず、開発者は改善を行うために一生懸命働いており、それは他の多くのパブリックチェーンの出現を大いに促進しました。
EVMは、コードとホストの間の抽象化レイヤーであり、イーサリアムの円滑な動作を維持するための保証として機能します。 結局のところ、EVMとは何ですか? EVMの原理と一般的な使用例は何ですか?それをさらに深く掘り下げてみましょう。
現在最も人気のあるブロックチェーンとして、イーサリアムはユーザーにさまざまな分散型アプリケーションを提供します。 これは、人々がDeFiやNFTなどを指すときに最も頻繁に言及される用語です。 また、イーサリアムの中核部分であるEVMも、人々の大きな注目を集めています。 では、EVMとイーサリアムの関係はどのようなものでしょうか?
EVM は イーサリアム仮想マシン を表します。 イーサリアムで定義されているように、EVMは、すべてのイーサリアムアカウントとスマートコントラクトがイーサリアムチェーン上に存在するランタイム環境です。
EVMは、イーサリアムクライアントを実行しているすべての接続されたコンピューターによって維持される単一のエンティティとして存在します。 これは、ブロック間で新しい有効な状態を計算するためのルールを定義するものです。
ビットコインのような分散型台帳の代わりに、イーサリアムは分散型ステートマシンです。 ブロックからブロックへの変更は、イーサリアム上のすべてのアカウントと残高の状態の更新を表します。 更新は、EVM によるコントラクトのコードに基づいて計算されます。
図: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM はスタックベースの仮想マシンであり、すべての操作をスタック内で直接実行します。 スマートコントラクトがバイトコードにコンパイルされると、EVMはバイトコードに基づいて、メモリからの変数のフェッチとスタックへの追加、スタック内の変数の計算、メモリへの変数の格納などの操作を実行します。
EVMのデータストレージには、メモリとストレージの2つの主要なタイプがあります。 ストレージ内の変数は、コントラクトの実行後にイーサリアムに永続的に保存されますが、メモリ内の変数は、コードがEVMで実行されている間一時的に存在します。
例としてコントラクトの呼び出しを取り上げます。 Solidityと契約書を作成し、コンパイラを介してメタデータをコンパイルし、イーサリアムで公開しました。 コントラクトの状態を更新する必要がある場合は、コントラクトを呼び出す必要があります。 ただし、OSもWindowsもスマートコントラクトを直接実行することはできません。 EVMは、スマートコントラクトの実行環境を提供するために必要です。 具体的な手順は次のとおりです。 まず、EVMはコントラクトアドレスを介してイーサリアムに保存されているコントラクトコードを見つけます。次に、実行環境が生成されます。最後に、コントラクトの内容はバイトコードに変換され、動作のためにEVMに入れられます。 操作から得られた結果は、次のブロックに最新の状態として保存されるため、状態更新プロセスが完了します。
図: https://cnodejs.org/topic/5aeecba802591040485bab2a
EVM の実装
現在、すべてのイーサリアムクライアントにはEVM実装が含まれています。 イーサリアムは、EVM機能を実装するために、Python、C ++、js、Goなどを含むいくつかのプログラミング言語のソースコードを立ち上げました。 これは、ユーザーがEVMの原理をより便利な方法で理解するのに役立ちます。
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone - C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ イーサリアムJS-モノレポ
eEVM - C++: https://github.com/microsoft/eevm
ハイパーレジャーバロウ - 行く: https://github.com/hyperledger/burrow
スマートコントラクトは、EVM上で排他的に実行されるコードです。 一度デプロイすると変更できません。 イーサリアムは、スマートコントラクトを通じて状態を定義、変更、保存し、さまざまな分散型アプリケーションを実現します。 EVMは、スマートコントラクトを実行できる環境として機能し、高速道路と車の関係に似ています。
一定量のガスを消費するEVMでスマートコントラクトを実行するには、かなりの計算能力が必要です。 理解を深めるために、有料道路で通行料を支払う必要がある車両を考えてみてください。
ガス料金は、イーサリアムをより分散化する方法として、世界中の鉱夫が参加してコンピューティングパワーを提供するインセンティブを与えるのに役立ちます。 また、イーサリアムメインネットの輻輳につながる可能性のあるランダムな操作要求をユーザーが送信したり、悪意のある攻撃を防ぐことでイーサリアムがクラッシュするのを防ぎます。
イーサリアムのスマートコントラクトはSolidityで記述され、EVMで実行される前にバイトコードにコンパイルされます。 バイトコードには、オペコードまたは命令コードが含まれます。 EVM には 144 個のオペコードがあり、それぞれに特定の機能を備えているため、EVM チューリングを完全化できます。 あらゆるタイプの計算問題を解決できます。 SolidityとOpcodeにより、複雑なスマートコントラクトを作成し、EVMにさまざまな機能を実装することができるため、ユーザーにさまざまなdAppを提供できます。
同じコードの場合、実行環境や実行回数とは関係がないため、異なるEVMで実行した後の出力は同じです。 EVMの確実性により、コードの信頼性が確保され、予期しない結果を回避できます。 この機能は、特にイーサリアムで大規模な取引を行っているユーザーの利益を保護するのに役立ちます。
EVM は、コードが実行される分離されたサンドボックスのようなものです。 実行中のプロセスは、コンピューターのソフトウェア/ハ ードウェアに害を及ぼすことも、イーサリアムの基盤となるプロトコルにも影響を与えません。 EVMの分離は、ハッカーがEVMを実行するマシンを攻撃するのを防ぎ、イーサリアムの基盤となるプロトコルが改ざんされるのを防ぎます。 これは、イーサリアムを保護する保証として機能します。
EVM がコードを実行するプロセスを中断できます。 ユーザーが無限ループなどの間違ったコードを実行した場合、ガスメカニズムを展開して実行プロセスを終了し、そのようなコードが計算能力を無期限に占有するのを防ぐことができます。 EVMでコードを実行する前に、ガスの上限を事前に設定しておく必要があります。 ガスがなくなると、コードの実行が停止し、チェーンを更新せずに状態がロールバックされます。
ユーザーが増えるにつれて、イーサリアムメインネットは、ネットワークの混雑や高いガス料金など、多くの問題に遭遇します。 イーサリアムの設計に限定して、これらの問題を根本的に解決することはできません。
近年、ガス料金が低く、ネットワークが高速である新しいパブリックチェーンや、イーサリアムを拡張するように設計されたレイヤー2チェーンがたくさんあります。 これらのチェーンはすべてスマートコントラクトチェーンであり、より優れた基礎設計を持っていると言われており、さまざまなdAppの構築に使用できます。
これらのチェーンは、イーサリアムエコシステムの余剰需要を引き受け、イーサリアムの支配的な地位に挑戦します。 イーサリアムの対応物はEVMと互換性がある必要がありますか?この分岐に関して、これらのチェーンは、EVM互換チェーンと非EVMチェーンの2つのカテゴリに分類されます。
最近、レイヤー1のパブリックチェーンが次々と登場しています。 イーサリアムと並行して実行されるオンチェーンエコシステムを再構築することで、イーサリアムの既存の欠点を克服できますが、完全なエコシステムを構築し、dAppをゼロから開発するには、かなりの人的資源が必要です。 資格のあるプログラマーの不足は、新しいパブリックチェーンエコシステムの成長を妨げています。 エコシステムが未開発のパブリックチェーンの場合、短期間でイーサリアムからユーザーを引き付けることは困難です。
このため、一部のパブリックチェーンはEVMと互換性があるように設計されています。 もともとイーサリアム上で実行されているDAppは、ソースコードにわずかな変更を加えるだけで、EVM互換のパブリックチェーンに完全に移行できます。 開発リソースの使用を最大化するだけでなく、イーサリアムから新しいチェーンに移行するプロセスでユーザーにより良いエクスペリエンスを提供できます。
ただし、EVMとの互換性には必然的に特定の問題が伴います。 EVMのルールに限定された多くのEVM互換チェーンは、均質化せずにイノベーションを達成する方法に関する問題に直面しています。 ただし、EVM以外のチェーンは、これらのルールを破り、新しいルールセットをゼロから開発できるため、イノベーションを根本的に達成できます。
現在、主流のパブリックチェーンの70%以上が、BSC、雪崩、ファントム、トロン、セロなどのEVMと互換性があります。 開発者がdAppを開発したり、これらのチェーンにイーサリアムアプリをデプロイしたりして、パフォーマンスを向上させ、ガス料金を下げることは難しくありません。
他のいくつかのパブリックチェーンは非EVMですが、Sol、Terraなどの独自の仮想マシンを開発しています。 EVMとの互換性はありませんが、これらのチェーンは、革新的な設計と優れたオンチェーンパフォーマンスで忠実なユーザーや機関のグループを魅了しています。 たとえば、最近世界中で人気のある2つのブロックチェーンゲーム、ステップNとLet me speakは、Solチェーンに基づいており、世界中から熱狂的なファンが参加しています。
特に、EVM互換チェーンは非EVMチェーンと共存できます。 一部の非EVMチェーンもEVMとの互換性を持ち始めています。 これを達成するプロセスは、コードを変更するために多大な努力を必要とするため、骨の折れるものです。 この例は、開発者がEVM上でdAppを構築できるようにするNeonを立ち上げたSolです。
図:パブリックチェーンのEVM互換性
イーサリアムのスケーリングソリューションとして、レイヤー2は競合他社ではなくイーサリアムを補完します。 レイヤ 2 チェーンはすべて EVM 互換で、レイヤ 1 よりも高いレベルの互換性を備えています。 レイヤ 2 と EVM との互換性を実現するには、EVM との互換性と EVM の同等性の 2 つのソリューションがあります。
初期のレイヤ 2 チェーンは EVM 互換であり、レイヤ 1 チェーンの EVM 互換に似ています。 イーサリアムレイヤー1のスマートコントラクトは、いくつかの変更を加えることでレイヤー2にデプロイできます。 たとえば、Optimismによって立ち上げられたUnipigは、完全にUniswapコードを再構築したものです。 レイヤ 2 ではユニスワップと見なされます。
EVM との互換性にはいくつかの制限があります。 EVM互換チェーンでスマートコントラクトを開発する場合、一部のEVMベースの開発ツールとフレームワークが利用できない場合があります。 さらに、元々レイヤー1で配置されていたスマートコントラクトについては、開発者は、スマートコントラクトがEVM互換ブロックチェーン上でスムーズに実行できるように、いくつかの調整を行う必要があります。
EVMの同等性は、イーサリアムレイヤー1とレイヤー2でスマートコントラクトを開発する際に、開発者にまったく同じエクスペリエンスを提供することを目的としています。 これにより、Layer2開発者に大きなメリットがあり、開発効率がさらに向上し、EVM互換性に基づく開発とコードメンテナンスのコストが節約されました。
現在、Artbitrum、Optimism、Metisなどの主流のレイヤー2ソリューションは、EVMと同等のものを達成しています。 EVMの同等性は、スケーリングによって引き起こされる開発と移行のコストを最小限に抑えるために、イーサリアムの機能をレイヤー2に適切に転送できます。 EVMの等価性は、将来的にレイヤー2の主流の標準になると予想されており、多くのレイヤー2ソリューションはEVMの同等性をめぐって激しい競争を繰り広げることになります。
EVMは、イーサリアムを稼働させ続けるコアです。 イーサリアムの優位性の確立に伴い、主要なパブリックチェーンとレイヤー2チェーンは、EVMの基礎となる設計コンセプトに従うか、互換性があります。 したがって、EVMは間違いなくブロックチェーン全体に大きな影響を与えました。 EVM 自体には多くの問題があり、新しいチェーンと EVM との互換性を確保することが困難になっています。 それにもかかわらず、開発者は改善を行うために一生懸命働いており、それは他の多くのパブリックチェーンの出現を大いに促進しました。