イーサリアム仮想マシン(EVM)入門:すべてのスマートコントラクトを実行するエンジン

イーサリアム仮想マシン(EVM)入門:すべてのスマートコントラクトを実行するエンジン

初めてガス料金で取引額の半分が消えてしまった時のことを覚えています。2021年のことでした。OpenSeaで何かをミントしようとしていたのですが、ネットワークは処理するだけで87ドルも要求してきたのです。その時、私は内部で何が起こっているのか全く理解していないことに気づきました。なぜそんなに費用がかかるのか?お金はどこへ行くのか?実際に私の取引を実行しているのは何なのか?これら3つの質問に対する答えはすべて同じでした。それは、イーサリアム仮想マシン(EVM)です。

仮想通貨に詳しい人なら「EVM」という言葉を耳にしたことがあるでしょう。しかし、EVMが何をするものなのかを説明できる人はごくわずかです。これは重要な点です。なぜなら、EVMはイーサリアムや、その設計を借用した390以上のチェーン上のほぼすべてのものを形作っているからです。現在、1900億ドルを超えるDeFiの価値がEVMネットワーク上に存在しています。MetaMaskを使ったことがある人、トークンを交換したことがある人、あるいはdapp(分散型アプリケーション、略してdapp)のボタンをクリックしたことがある人なら、画面の裏側でEVMが処理を行っていたことになります。ノードはこれらのチェーンすべてでスマートコントラクトを実行し、EVMはそれらの呼び出しを実際に実行させているのです。

それでは、実際に詳しく見ていきましょう。教科書的な説明ではなく、本当のところを。

イーサリアム仮想マシンとは何か、そしてなぜ重要なのか

では、一番簡単な例から説明しましょう。電卓アプリをご存知ですか?「2 + 2」と入力すると「4」と表示されます。つまらないですよね。では、その電卓が1万台のスマートフォンで同時に動作しているところを想像してみてください。どのスマートフォンでも同じ答えが表示されます。もし1台のスマートフォンが「2 + 2 = 5」と入力しようとしても、残りの9,999台は即座にそれを拒否します。誰も電卓を制御することはできず、誰も停止させることも、不正操作することもできません。EVMは基本的にこれと同じ仕組みですが、数学の宿題の代わりに、実際のお金を移動させるスマートコントラクトを実行するのです。

コンピューターの専門家はこれをステートマシンと呼びます。イーサリアムは、誰がどのコインを所有しているか、どのスマートコントラクトが存在するか、各アドレスにどれだけのイーサがあるか、各コントラクトがどのような情報を格納しているかなど、膨大な量のデータを追跡します。これらすべてが「ステート」です。トランザクションを送信すると、EVM がそれを現在のステートと比較します。新しいステートが生成されます。古いステート + トランザクション = 新しいステート。紙上の式は Y(S, T) = S' です。これで完了です。

驚くべき点は冗長性です。あなたの取引はバージニア州の1つのサーバーに届くわけではありません。イーサリアムネットワーク全体に散らばる何千ものノードにアクセスします。それぞれのノードが独自に計算を行い、結果を比較します。一致すれば、新しい州がブロックチェーンに記録されます。不一致であれば、間違ったバージョンは破棄されます。私はいつも、何千人もの会計士が同じ納税申告書を作成している様子を想像します。そのうちの1人が違う数字を書いたら、全員が作業を止めて間違いを見つけます。

そして、これが通常のソフトウェアと異なる点です。EVMを運用する人は誰もいません。背後に企業もありません。サポートデスクもありません。午前2時にひっそりと取引をロールバックできる管理者もいません。コードはオープンソースで、すべてのノードで同じように動作し、信頼は権威ある人物が「私を信じてください」と言うのではなく、膨大な数の合意によって生まれます。

evm

EVMの仕組み:Solidityから実行まで

スマートコントラクトのライフサイクルについて説明しましょう。一連の流れ全体を理解すれば、EVM(イーサリアムバリューマネジメント)の仕組みがずっと分かりやすくなるはずです。

ステップ1:コードを書く。Solidityは、EVM開発者の約90%が選択するプログラミング言語です。JavaScriptの構文を借用しており、波括弧、関数、変数など、おなじみのものが使われています。Vyperも存在しますが(Pythonに近く、意図的にシンプルになっています)、Solidityが主流です。初心者がつまずく落とし穴は、コードのすべての行を実行するのに実際のお金がかかることです。サンドボックスはありません。取り消しもできません。バグのある契約をデプロイすると、事前にアップグレードメカニズムを構築していない限り、そのバグは永久に残ります。私は、開発者の友人が小数点の位置を間違えて眠れなくなるのを見て、このことを痛感しました。

ステップ2:Solidityコードがバイトコードにコンパイルされます。バイトコードはEVMの機械語のようなものと考えてください。人間が読めるコードを記述すると、コンパイラがそれをEVMが理解できる16進数文字列に変換します。その16進数文字列の中には、約150個のオペコードが含まれています。ADDは加算を実行します。SSTOREはデータを永続的に保存します。CALLは、あるコントラクトが別のコントラクトと通信できるようにします。1つのオペコードが1つの小さなジョブです。あなたのコントラクトは、このようなジョブを何千個も連結します。

ステップ3は、ここからが面白いところです。誰かがあなたのコントラクトを呼び出します。ネットワーク上のすべてのノードがトランザクションを取得し、バイトコードをロードして、オペコードを順番に処理し始めます。プロセッサはスタックベースです。一番上の皿しか触れることができない、積み重ねられた皿を想像してください。数値をプッシュします。別の数値をプッシュします。ADDを実行します。両方の数値が一番上から取り出され、合計され、結果が元に戻されます。最大深度は1024項目で、各項目は256ビット幅です。

各ノードはそれぞれ独立してこの処理を実行します。同じバイトコード、同じ入力、同じ開始状態。毎回同じ結果が返されます。この予測可能性こそが、ブロックチェーンのコンセンサスが機能する理由です。もしEVMが異なるマシンで異なる結果を出力してしまうとしたら、この仕組み全体が崩壊してしまうでしょう。

EVMアーキテクチャ:スタック、メモリ、ストレージ

EVMはデータを3つの層で処理します。この部分は、トランザクションのコストに直接影響するため重要です。

スタックは処理の中核を担う部分です。すべての計算はここで行われます。プッシュ、ポップ、演算、そして繰り返し。高速でコストも低く(1回の演算あたり約3ガス)、実行が終了すると消滅します。ほとんどのオペコードはスタックを直接操作します。

メモリはメモ帳のようなものです。任意の場所に読み書きできるため、文字列や大きな配列などを扱う際にスタックよりも柔軟性があります。しかし、メモリはトランザクションが完了すると消滅します。コスト面では、スタックよりは高価ですがストレージよりははるかに安価で、中間的な位置づけです。必要に応じて拡張でき、割り当てるメモリ量が増えるほどガス料金は2乗に比例して増加します。

次にストレージがあります。これはコストがかかる部分ですが、それには正当な理由があります。ストレージは永続的なものです。スマートコントラクトがアリスが500トークンを所有していることを記録すると、そのデータはイーサリアムのステートトライに書き込まれ、そこに保存されます。ネットワーク上のすべてのノードがそれを永久に保存します。ストレージへの新規書き込みには20,000ガス、更新には5,000ガスかかります。参考までに、単純なイーサの送金には合計21,000ガスかかります。つまり、ストレージへの1回の書き込みは、基本的なトランザクション全体とほぼ同じくらいのコストがかかるということです。

データ層どれくらい続くかガソリン代その用途
スタック処刑後に行方不明1回の操作につき約3ガス数学、論理、比較
メモリ取引後に消滅ガス3個+拡張コスト温度データ、関数引数
ストレージ永続書き込み1回あたり5,000~20,000ガストークン残高、所有権記録、設定

スマートコントラクトのデプロイに高額な費用がかかる理由が分からなかった方は、これがその理由です。デプロイでは、コントラクトのバイトコードと初期データがすべてストレージに書き込まれます。つまり、2万ガスもの処理が大量に発生するのです。

もしこの説明に見覚えがあるなら、それは当然です。通常のコンピュータも同じように動作します。CPUレジスタはスタックのように高速ですがサイズは小さく、RAMはメモリのようにサイズは大きく速度は遅く、ハードドライブはストレージのようにあらゆるデータを保存しますが書き込みに最も時間がかかります。イーサリアムの開発者たちは意図的にこのような仕組みにしました。彼らは、データを永久にオンチェーンに保存することによる金銭的な負担をユーザーに感じさせ、本当に必要なものだけを保存するように促したいのです。

EVMにおけるガス料金:イーサリアムの価格計算方法

ガスについて話さなければならない。なぜなら、ガスはEVMの中で最も巧妙な部分であると同時に、最も厄介な部分でもあるからだ。

EVMはチューリング完全です。簡単に言うと、どんな計算でも実行できます。無限ループも例外ではありません。例えば、while(true)というコントラクトを、実行コストなしでデプロイしたと想像してみてください。すべてのノードが停止し、ブロックチェーンがフリーズします。ゲームオーバーです。

ガスは、そのような事態を防ぎます。すべてのオペコードには価格が設定されています。ADD は 3 ガス、SSTORE は 5,000 または 20,000 ガスを消費します。トランザクションを送信する際、ガス予算を設定します。計算が予算内で完了した場合、使用しなかった分のガスが払い戻されます。上限に達した場合は、すべてがロールバックされますが、消費したガスの料金は支払う必要があります。無限ループは予算を使い果たし、終了します。

ウォレットから引き落とされる金額は、使用したガス量×ガス価格です。使用したガス量は、実際のトランザクションの内容によって異なります。ガス価格は、ネットワークの混雑度(gwei、イーサリアムの10億分の1)に応じて変動します。多くの人が取引すればガス価格は上昇し、静かな日曜日であればガス価格は下落します。

そして、ここから話が面白くなります。2021年に私が87ドルでミントしたことを覚えていますか?当時、ガス料金は通常100~200gweiでした。DeFiの夏とNFTブームでネットワークはフル稼働していました。2026年初頭に目を向けると、平均ガス料金は約3gweiです。基本的なETH送金には約0.30ドルから0.67ドルかかります。これは2021年から96%の下落です。

平均取引手数料ガソリン価格帯何が原因だったのか
2021約24ドル100~200グウェイNFTブーム、DeFiイールドファーミング
2022 5~15ドル30-80 グウェイ市場暴落、活動低下
2023 2~8ドル15-40 グウェイ弱気相場が落ち着きつつある
2024 0.50~2ドル5-15 グウェイDencunアップグレード、EIP-4844
2026年第1四半期0.30~0.67ドル約3グウェイL2移行、ブロブトランザクション

何が変わったのか? 2つあります。まず、2024年3月のDencunアップグレードでEIP-4844が導入され、ロールアップ用の「ブロブ」ストレージが作られました。ブロブが登場する前は、レイヤー2ネットワークはデータをコールデータとしてイーサリアムのメインネットに投稿する必要があり、コストがかかっていました。ブロブは一時的なもので、はるかに安価であり、L2の投稿コストを約95%削減します。次に、ほとんどのアクティビティが単純にレイヤー2ネットワークに移行しました。UniswapのスワップがメインネットではなくArbitrumで実行されると、ベースレイヤーは混雑しません。

これらのレイヤー2ネットワークでは、スワップのコストは1セント未満です。Arbitrum、Base、OptimismはいずれもEVMを使用しているため、Solidityコードの動作は同じです。ガス代はほんの一部で済みます。

evm

EVM互換性:なぜ390以上のブロックチェーンがイーサリアムの設計図を模倣したのか

ここからEVMの話は、単なる興味深いものから、業界全体にとって真に重要なものへと変わるのです。

BNB Chainがローンチされた際、Binanceは新しい仮想マシンを開発したわけではありません。EVMを採用し、それを改良したのです。Polygonも同様です。Avalanche、Fantom、Cronos、Harmony、Gnosis Chainも同じです。ArbitrumやOptimismといった、専用に構築されたレイヤー2ロールアップでさえ、EVMをネイティブに実行しています。その結果、390を超えるEVM互換チェーンのエコシステムが構築されましたが、実際に日々活発な取引が行われているのは40~50程度に過ぎません。

なぜイーサリアムを模倣するのか?ゼロから構築するのではなく。理由は3つ。いずれも実用的なものだ。

まず、開発者について。世界には2万人以上のSolidity開発者がいます。EVMチェーンを立ち上げれば、彼らは新しい言語を学ぶことなく、初日からコードを出荷できます。SolanaはRustを使用しています。AptosとSuiはMoveを使用しています。これらのチェーンは、開発者プールをゼロから構築する必要がありました。EVMチェーンは、その問題を完全に回避します。

第二に、無料ツールです。MetaMask、Hardhat、Foundry、Ethers.js、OpenZeppelin、Etherscanなど、イーサリアムツールキット全体が、変更なしでどのEVMチェーンでも動作します。ウォレットも、テストフレームワークも、ブロックエクスプローラーも同じです。これにより、何年もの作業時間を節約できます。

第三に、DeFiはEVMと共に発展しています。Uniswap、Aave、Curve、SushiSwap。これらはすべて5つ以上のEVMチェーン上で稼働しています。コントラクトはEthereumからPolygon、Arbitrum、BNB Chainへとコピー&ペーストされています。同じコード、同じ監査、同じセキュリティモデル。ブリッジが流動性を繋ぎ、EVMはその接着剤の役割を果たしています。

しかし、EVMをコピーするということは、その問題点もコピーすることを意味します。一度に1つのトランザクションずつ。64ビットプロセッサで256ビットワードを使用するため、オーバーヘッドが増加します。ガスシステムは機能しますが、複雑さを増すため、新しいVMではスキップされています。SolanaのSVMはトランザクションを並列実行します。MoveVMは、バグのカテゴリ全体を排除するリソースモデルを採用しています。FuelVMは、最新のCPU設計のアイデアを取り入れています。

彼らのうち、EVMの普及率に追いついた者はいるだろうか?いいえ、全くいない。紙面上では優れた技術でも、現実世界ではネットワーク効果には勝てない。EVMは、開発者数、稼働中のプロトコル数、監査済みのコードパターン数、そしてハッキング被害を乗り越えてきた数々の実績において、群を抜いている。たった一つのバグで数億ドルもの損失を被る可能性のある暗号通貨の世界では、こうした実績こそがベンチマークよりも重要な意味を持つのだ。

イーサリアムの状態とEVMがコンセンサスを維持する方法

この部分はやや専門的になりますが、重要な内容です。イーサリアムのノードに実際のハードウェアが必要な理由、そしてオンチェーンでのデータ保存に莫大なコストがかかる理由が説明されています。

イーサリアムは膨大なルックアップテーブルを保持しています。任意のアドレスを入力すると、イーサの残高、ナンス(トランザクション数)、そしてコントラクトアドレスの場合は完全なバイトコードと保存されているすべてのデータが返されます。数百万のアドレス、数百ギガバイト。これがイーサリアムの状態です。

すべてはマークル・パトリシア・トライの中に存在します。簡単に言うと、これはツリー構造で、各ブランチに独自のハッシュが割り当てられ、すべてのハッシュが最上位のルートハッシュに集約されます。このルートハッシュは各ブロックのヘッダーに格納されます。2つのウォレット間で0.001 ETHを移動するだけで、ルートハッシュは完全に変化します。バリデーターは、すべてのトランザクションを実行し、結果として得られるルートハッシュを計算して比較することでブロックをチェックします。ハッシュが同じであればブロックは有効です。ハッシュが異なればブロックは拒否されます。

ノードを実行するということは、このツリー全体をすべてのブロックで更新し続けることを意味します。これが、イーサリアムが抱える最大のスケーリング問題です。VM自体は十分に高速ですが、状態は増え続ける一方です。SSTOREを実行するたびに、トライ木に新しいリーフが追加されます。新しいコントラクトを作成するたびに、データがさらに蓄積されます。Verkleツリーはこの問題を解決するかもしれません。イーサリアムチームは数年前からVerkleツリーの開発に取り組んでいます。Verkleツリーを使えば、ノードは完全な状態を保存することなくブロックをチェックできます。Verkleが実装されれば、ノードの実行コストが大幅に削減され、より多くの人がバリデーターセットに参加できるようになります。

EVM実装:1つの仕様、多数のクライアント

ほとんどの人は気づいていませんが、「EVM」はプログラムではなく仕様書です。それは「これらの入力が与えられたら、これらの出力を生成する」という文書です。仕様に準拠している限り、誰でも好きな言語で独自のバージョンを作成できます。

Gethは最も有名なクライアントです。Go言語で書かれており、ほとんどのイーサリアムノードで動作します。しかし、他にもNethermind(C#)、Besu(Java、エンタープライズ向け)、Erigon(Go言語、ディスク向けに最適化)、Reth(Rust、Paradigm社製)などがあります。コア開発者たちは、この多様性をむしろ望んでいます。なぜでしょうか?ノードの95%がGethで動作していて、Gethに重大なバグがあると、ネットワーク全体が危機に陥ります。一方、5つのクライアントに分散していれば、バグの影響はノードの20%にしか及びません。残りのノードは正常に動作し続けます。

レイヤ 2 ネットワークは独自の工夫を加えています。Arbitrum は Arbitrum VM と呼ばれる改良版を作成しました。Optimism は「EVM と同等」、つまりバイト単位で同一の動作を目指しています。zkSync Era はさらに進んでいます。EVM バイトコードをゼロ知識証明で動作する形式にコンパイルします。内部では全く異なる実行パスが使われています。しかし Solidity 開発者にとっては、見た目は同じです。根本的に異なるアーキテクチャがすべて開発者に対して同じ顔を見せているという事実は、EVM の最も過小評価されている点の 1 つです。

開発者にとって、契約を処理するクライアントがどこであるかはほとんど重要ではありません。Solidityでコードを記述し、バイトコードにコンパイルしてデプロイするだけです。仕様によって、どこでも同じ結果が得られることが保証されています。

EVM上でのスマートコントラクト開発:開発者が実際に取り組むこと

EVM向けに開発しようとするWeb開発者は、厳しい現実を突きつけられることになる。バグは実際にお金がかかる。本番環境のパッチは適用できない。不具合のある契約を出荷したら、事前に計画を立てていない限り、そのまま不具合が残る。

SolidityはEVMコントラクトの90%以上を支えています。ツールも充実してきました。Hardhatはプラグイン付きのJavaScript/TypeScriptを提供します。FoundryはRustを使用し、高速で動作し、Solidity自体でテストを書くことができます。どちらもローカルEVMを起動するので、ガス代を支払わずにテストを実行できます。新規プロジェクトにはFoundryをお勧めします。テストスイートが100テストを超えると、速度の差が顕著になります。

トークン規格はエコシステムを整理する役割を果たします。ERC-20はUSDT、LINK、UNIなどの代替可能なトークンを対象としています。ERC-721はNFT用です。ERC-1155はマルチトークン契約を扱います。ERC-4626はイールドボールトに対応しています。これらはすべて、すべてのEVMチェーンで同じように動作します。契約を一度作成すれば、Ethereum、Arbitrum、Base、Polygonにデプロイできます。同じコードで、同じ動作です。

セキュリティ?厳しい状況です。リエントランシー攻撃によって、長年にわたって数億ドルが流出しました。2016年のDAOハッキング事件では、攻撃者が引き出しをループさせ、6000万ドルを流出させるリエントランシーのバグが原因で、イーサリアムが2つに分裂しました。整数オーバーフローは、2021年にSolidity 0.8でデフォルトチェックが追加されるまで、大きな問題でした。プロのチームが監査したコードでも、アクセス制御のミスが依然として発生しています。Slither、Mythril、Certoraなどのツールは一部のバグを検出しますが、適切な監査に勝るものはありません。そして、監査でさえ見落としがあるものです。それが現実です。

現在展開されているもの:基本的なERC-20トークンはメインネット上で5~20ドル。本格的なDeFiプロトコルは?おそらく数百ドル。レイヤー2ネットワークでは?わずか数セント。2025年に新規契約の65%がレイヤー2上で作成されたのも不思議ではない。

2026年のEVMエコシステム:レイヤー2の優位性とその後の展開

3年前、レイヤー2ネットワークのTVLは40億ドルでした。現在では500億ドルを超えています。Arbitrumだけでも166億ドル、Baseは100億ドル、Optimismは60億ドルです。この変化は、L2の手数料がほぼゼロになったことが原因です。ほとんどのロールアップでスワップ手数料は1セント未満です。メインネットの手数料でさえ1ドルを下回りました。かつては、イーサリアムはコストが高すぎるので、誰もがSolanaを使うべきだと言われていました。しかし、今ではその意見は以前ほど受け入れられません。

アカウント抽象化(ERC-4337)は、2025年と2026年に静かにゲームチェンジャーとなりました。スマートウォレットを使えば、ユーザーはステーブルコインでガス代を支払ったり、複数の操作を1つのトランザクションにまとめたり、シードフレーズなしでアカウントを復元したりできます。MetaMaskで1回のスワップに2つのポップアップを承認させられたことで友人が激怒して仮想通貨をやめたのを見たことがあるなら、これがなぜ重要なのか理解できるでしょう。仮想通貨ウォレットと通常の銀行アプリの差は縮まっています。

次はどうなるのでしょうか?いくつか注目していることがあります。EOF(EVMオブジェクトフォーマット)はバイトコードを整理することで、検証コストを削減し、ツールの動作を改善します。並列実行の研究が進めば、EVMはトランザクションを一つずつではなく、同時に処理できるようになる可能性があります。まだ初期段階ですが、うまくいけば、開発者にとって何も変更することなくスループットが向上します。そして、Verkleツリーは製品化に向けて着々と進んでいます。

競争は確かに激しい。SolanaのSVMはより高いスループットを実現し、MoveVMはバグのカテゴリー全体を防ぐパターンを導入した。しかし、数字を見てみよう。EVMエコシステムには1900億ドル以上のDeFi TVLが蓄積されている。DEXの月間取引量は4000億ドルを超え、2万人以上の開発者がEVM上で開発を行っている。実戦テストは11年近くに及ぶ。新しいVMはベンチマークで勝利を収めているが、EVMは実際のお金がかかっている状況で本当に重要なあらゆる点で勝利を収めている。

質問は?

イーサリアムは2015年7月に1ETHあたり約0.30ドルでサービスを開始しました。1,000ドルあれば約3,333ETHが手に入った計算になります。2026年初頭に1ETHあたり1,800ドルになったとすれば、約600万ドル相当の資産になっていたでしょう。もちろん、これは最良のシナリオです。80%以上の暴落を何度も乗り切るだけの度胸も必要だったはずです。過去の仮想通貨のリターンは、将来のリターンを予測する上で非常に信頼性が低いことで知られています。

いいえ。ERC-20は、代替可能なトークン(USDT、LINK、UNI)の動作を規定する一連のルールです。EVMは、これらのルールを実行するマシンです。DEXでUSDTを送金したりLINKを交換したりする際、ERC-20コントラクトコードを読み取り、実際に送金を実行するのはEVMです。

いいえ、全く別物です。ETHは売買するコインです。EVMはスマートコントラクトを実行するエンジンです。イーサリアムを車に例えるなら、ETHはガソリン、EVMはボンネットの中身です。ガソリン代としてETHを消費し、そのガソリンでEVMが動き続けます。しかし、ETHとEVMは全く同じものではありません。

はい。イーサリアムはEVMを開発したので、それを「互換性がある」と呼ぶのは、英語が英語辞書と互換性があるかどうかを問うようなものです。EVMの互換性について語る場合、人々が指しているのは、BNB Chain、Polygon、Avalancheといった、イーサリアムのVMをコピーして開発者がSolidityコードを一行も書き直すことなく移行できるようにした他のチェーンのことです。

Solidityでコードを記述します。コンパイラがそれをバイトコードに変換し、EVM(イーサリアム仮想マシン)がそれを読み取ります。イーサリアムブロックチェーン上のノードは、そのバイトコードを取得し、命令を一つずつ実行します。各ノードは同じ入力データを使って独自に処理を実行するため、すべて同じ結果が得られます。ガス料金は各ステップごとに課金されます。これにより、無限ループによってネットワークがフリーズするのを防ぎ、バリデーターは処理の手間を省くための報酬を受け取ることができます。

イーサリアムのエンジンのようなものだと考えてください。ネットワーク上のすべてのコンピュータがそのコピーを実行します。それらはすべて同じトランザクションを処理し、同じ結果を得ます。単一のマシンが制御しているわけではありません。誰もそれを改ざんすることはできません。何千ものノードが同時に同意することだけが、その信頼性を維持する唯一の方法です。

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.