以太坊虚拟机(EVM)是智能合约执行的“心脏”,其设计体现了 Web3 对安全性、确定性与去中心化计算的极致追求。它通过栈式模型、内存分区、Gas 管控与调用帧机制,支撑了整个智能合约生态。
📌 本文将系统解析:EVM 架构、执行流程、指令集、Gas 扣费与合约调用的底层逻辑。
EVM(Ethereum Virtual Machine)是每个以太坊节点内运行的一致性虚拟机环境:
EVM 实例不是共享的,但状态是共识的。
✅ 可理解为:每个节点都有一台“以太坊 CPU”,运行完全相同的程序,确保链上状态同步更新。

EVM 是基于栈的执行引擎,每次交易创建一个“上下文执行环境”并执行对应字节码指令:
| 模块 | 描述 |
|---|---|
| 📦 Stack | 最大深度 1024,仅存放临时数据,支持 PUSH / POP 等指令 |
| 🧠 Memory | 临时内存,按字节扩展,仅在一次调用期间有效 |
| 🗃 Storage | 持久化存储,每个合约唯一,存储状态变量 |
| ⏱ Program Counter (PC) | 当前执行到的指令位置 |
| ⛽ Gas Tracker | 追踪剩余 gas,若为 0 即中断执行 |
| 📤 Return Data Buffer | 执行CALL或DELEGATECALL后的返回值,用于向上传递结果 |

EVM 使用一套简洁的 1 字节操作码系统,共约 140+ 条,分为:
| 类型 | 示例 | 功能 |
|---|---|---|
| 栈操作 | PUSH, POP, DUP, SWAP |
栈顶操作 |
| 算术 | ADD, SUB, MUL, DIV |
整数计算 |
| 存储 | SLOAD, SSTORE |
读取 / 写入状态变量 |
| 调用 | CALL, DELEGATECALL |
合约调用 |
| 控制 | JUMP, REVERT, STOP |
执行流控制 |
| 日志 | LOG0 - LOG4 |
事件触发 |