「EVM 是什么」这个问题,搜出来的答案往往是「以太坊虚拟机」五个字,等于没解释。真正有用的理解是:EVM 是一套执行标准——规定了状态怎么存、指令怎么算、每一步收多少费。搞懂这三件事,你才能看懂交易为什么失败、Gas 为什么差这么多。下面从虚拟机结构讲到一笔交易的完整执行。
上图是一笔交易进入一台由 opcode 方块拼成的发光机器,这正是 EVM 的抽象形象:输入指令,输出状态。
EVM 不是「以太坊」,是执行标准
先纠一个常见混淆。以太坊是一条链,有共识、有节点、有区块;EVM 是这条链上用来执行合约的那台「虚拟机」。它不在某一台服务器上,而是由所有节点各自运行、各自得出相同结果的一套规则。
这套规则的价值在于确定性:同样一笔交易、同样的输入状态,全世界所有节点算出来的结果必须一致,否则链就分叉了。EVM 的设计目标就是把「计算」变成一件可以复现、可以计费、可以验证的事。
所以当人们说「EVM 兼容链」,意思不是「这条链是以太坊」,而是「这台虚拟机也认以太坊那套指令和计费规则」。
256 位栈式虚拟机
EVM 是一台栈式机器:所有运算围绕一个栈进行,指令从栈顶取操作数,算完把结果压回去。它没有寄存器,也不需要寄存器分配,这让编译器和验证逻辑都简单很多。
字长是 256 位。这个选择很关键:以太坊的地址是 20 字节,哈希是 32 字节,256 位刚好能装下一个哈希,做哈希运算、椭圆曲线运算时不需要拆字。代价是存储效率低——存一个很小的数也要占满 32 字节。
栈的深度上限是 1024。这不是随便定的,是为了防止无限递归把节点拖死。超出深度会直接报错,这也是某些递归调用失败的原因之一。
Gas:每个 opcode 都有价签
EVM 里没有「免费」的操作。每一条指令(opcode)都有一个 Gas 价格,执行时逐条扣减。你设定的 Gas Limit 是预算,用完就停,没花完的退还。
为什么要计费?因为计算是稀缺资源。如果不收费,一个死循环就能让所有节点瘫痪。Gas 把「占用网络资源」变成了「付费购买」,同时给区块容量设了上限:一个块的 Gas 上限决定了它能装多少计算。
手续费为什么忽高忽低
这也是理解手续费的关键:手续费 = 消耗的 Gas × 单价。单价随网络拥堵波动,消耗量取决于你的合约做了什么。两笔看起来一样的转账,如果一笔只是转账、另一笔要调用合约写好几个存储槽,消耗能差出一个数量级。
所以要降费,只有两条路:要么少花 Gas,要么等单价低的时候再发。
下面这张图把一笔交易从签名到回执的四段耗时按占比画出来,数值是示意的结构。
一笔交易的四个阶段
第一阶段,签名与广播。你用私钥对交易签名,钱包把它发给节点,节点再扩散到全网。这一段是本地计算加网络传播,通常最快。
第二阶段,打包与排序。交易进入内存池,出块者按出价高低挑选、排序。这一段最不确定,取决于拥堵程度和你给的优先费。以太坊 12 秒一个 slot,理论上最多等一个 slot,实际可能等很多个。
第三阶段,虚拟机执行。交易被放进块后,每个节点各自跑一遍 EVM:读取状态、逐条执行 opcode、扣 Gas、改状态。这一步是确定性的,所有节点结果一致。
第四阶段,状态写入与回执。执行完生成回执,记录成功或失败、消耗了多少 Gas、产生了哪些日志。状态树更新,块被确认。到这一步,交易才算真正落地。
为什么 SSTORE 特别贵
EVM 里最贵的指令之一是 SSTORE,也就是写存储。原因在于存储是「永久」的:写进去的数据要所有节点长期保存,还要参与状态根计算。计算可以丢弃,存储不能。
以太坊的 Gas 表对存储做了精细设计:从零写一个非零值最贵,改写已有值便宜一些,把非零改回零会退还一部分 Gas。这套设计的目的是抑制「往链上塞垃圾」,同时鼓励清理。
理解了这一点,你就能看懂很多合约优化技巧:把多次写存储合并成一次、能不写链上就不写、把数据放到事件日志里而不是状态里。这些都不是玄学,是在跟 Gas 表讨价还价。
同样的合约,为什么在别的链上更便宜或更贵
同一份 Solidity 代码,部署到不同的 EVM 兼容链,Gas 消耗可能不同。原因有三个。
一是 Gas 表不同。每条链可以根据自己的资源成本调整每条指令的价格,存储便宜、计算贵的链,会把 SSTORE 调低、把计算类指令调高。
二是预编译合约不同。预编译是写在客户端里的「加速通道」,用于哈希、签名验证等高频操作。不同链支持的预编译集合和定价不一样,用了某个链特有预编译的合约,换条链就要改。
三是存储成本与状态规模不同。状态越大,节点维护成本越高,链就越有动机提高存储类指令的价格。
revert 与 out of gas:两种失败
revert 是「主动回滚」。合约里写了条件判断,不满足就 revert,所有状态改动撤销,剩下的 Gas 退还(已消耗的不退)。常见原因:余额不足、授权不够、滑点超限、调用者无权限。
out of gas 是「预算耗尽」。你给的 Gas Limit 不够跑完整个执行,虚拟机在中途停机,同样回滚,但 Gas 全部扣掉。常见原因:循环次数比预期多、合约逻辑变复杂、估算的 Gas 偏低。
两者的区别很实际:revert 通常说明「条件不对」,改参数重试可能成功;out of gas 说明「预算不够」,要提高 Gas Limit 或优化合约。把这两个混为一谈,就会在错误的路上反复试。
三个常见误解
第一,EVM 就是以太坊。不是。EVM 是执行环境,以太坊是包含共识、网络、EVM 在内的完整系统。
第二,EVM 兼容就等于能直接跑。兼容只保证大部分合约和工具链能用,预编译、Gas 规则、opcode 支持都可能有差异,必须测试和审计。真正字节码级一致的是「EVM 等价」,那是更高的要求。
第三,Gas 越低越好。Gas 低意味着链便宜,但也可能意味着安全性预算不足、节点激励不够。费用是安全的一部分,不是纯粹的负担。
它为什么成了行业默认标准
因为工具链。Solidity 编译器、开发框架、钱包、区块浏览器、审计工具,全都围绕 EVM 建了十几年。一条新链只要兼容 EVM,开发者几乎零成本迁移,用户也能直接用现有钱包。
这是典型的网络效应:不是 EVM 技术上最优,而是围绕它的生态最厚。截至 2026 年 11 月 7 日凌晨(北京时间),ETH 报 2,226.95 美元,24 小时跌 2.19%,价格离历史高点还有很远,但开发者生态的惯性依然在。
上图把从签名到生成回执的四个阶段按顺序排开,越往后越接近不可逆。
风险提示
本文讲的是技术机制,不构成投资建议。Gas 价格、区块参数、客户端行为都可能随升级变化,具体以官方文档与链上数据为准。智能合约存在漏洞、逻辑错误与被攻击的风险,历史上多次出现因合约缺陷导致的大额损失。截至 2026 年 11 月 7 日凌晨(北京时间),BTC 报 75,663 美元、24 小时跌 1.33%,全市场总市值约 2.558 万亿美元、24 小时跌 3.13%。境内虚拟货币相关业务活动属于非法金融活动,参与交易不受法律保护。








