以太坊虚拟机(EVM)是以太坊用来执行智能合约代码的计算环境。每个以太坊节点都运行着自己的 EVM 副本,所有节点以相同的方式处理相同的交易,因此整个网络能够就唯一的共享状态达成一致:包括每个账户的余额和每个合约存储的数据。
免责声明:本指南仅用于教育目的,不构成财务建议,不构成招揽,也不面向英国受众。以太坊、EVM 兼容网络以及构建在其上的应用均存在风险,并不适合所有用户。
以太坊虚拟机的作用 以太坊基础网络会记录网络上每个地址所持有的数字资产(包括以太币 及其他资产)。它还会记录被称为智能合约 的程序及其数据。EVM 就是以太坊中负责运行这些程序的部分。
当一笔交易调用智能合约时,每个以太坊节点都会将该合约的代码加载到自己的 EVM 中,使用该交易的输入运行代码,并根据运行结果更新状态。由于 EVM 具有确定性,相同的输入在每个节点上始终会产生相同的输出。正因如此,成千上万个相互独立的节点无需彼此信任,就能对结果达成一致。
EVM 常被形容为“世界计算机”,但它更像是一台缓慢的共享计算机:每一步都需要消耗 gas,且人人都可以验证结果。以太坊的设计以牺牲速度为代价,换取没有任何单一方能够控制结果的保障。
EVM 如何运行代码 开发者使用编程语言(通常是 Solidity 或 Vyper)编写智能合约。在部署之前,编译器会将这些代码转换为字节码 ,即 EVM 能够理解的一组精简的基本指令。
每条指令都是一个操作码(opcode) ,例如用于加法的 ADD、用于将值保存到存储中的 SSTORE,或用于调用另一个合约的 CALL。EVM 会借助以下组件逐个处理操作码:
栈(Stack) :用于存放计算过程中的临时值。
内存(Memory) :用于存放仅在当前调用期间需要的数据,调用结束后即被清除。
存储(Storage) :用于存放在交易之间持续保留在区块链上的数据,例如代币余额。
Calldata :用于存放随交易一起发送的输入数据。
存储是成本最高的资源,因为每个节点都必须长期保存这些数据。
为什么 EVM 需要 gas,也就是网络费用 任何能够运行任意程序的计算机,都可能被人塞进一个永不停止的程序。在共享网络上,一个无限循环就可能让所有节点陷入停滞。EVM 通过 gas 费用(即网络费用)来防止这种情况。
每个操作码都有对应的 gas 成本。有些是固定的,例如 ADD 需要 3 gas ;而另一些则取决于所涉及的工作量,例如首次写入存储需要 20,000 gas 或更多。发送者会为每笔交易设置 gas 上限(通常通过钱包完成)。自 2025 年 12 月 Fusaka 升级以来,每笔交易的 gas 上限为 16,777,216 。如果 gas 耗尽,EVM 会停止执行并回滚所有更改,而发送者仍需为已消耗的 gas 付费。
每个区块也有总 gas 上限,用于限制网络在每个区块中处理的计算量。在以太坊主网上,该上限自 2025 年 12 月起为 6,000 万 gas ,而 2025 年初为 3,000 万。
gas 衡量的是工作量,而以太坊的费用市场决定了用户为这些工作支付多少费用。要了解费用如何定价,请参阅以太坊 gas 费用详解 。
EVM 兼容意味着什么 EVM 兼容的区块链网络运行与以太坊相同的指令集,因此为以太坊编写的合约只需少量修改,甚至无需修改,就能部署到这些网络上。以太坊钱包、开发者工具和地址的使用方式也完全一致。由同一私钥控制的同一个 0x 地址可在所有 EVM 网络上使用,这也是 MetaMask 在其支持的所有 EVM 网络上显示同一个地址的原因。
正是这一共同标准,使得加密领域的大量项目都运行在 EVM 链上:
Arbitrum、OP Mainnet、Base、Linea 和 ZKsync 等以太坊二层网络 运行 EVM 兼容环境,并结算回以太坊。
BNB Smart Chain、Avalanche C-Chain、Polygon PoS、Sei 和 Monad 等网络拥有各自的验证者和共识机制,但使用 EVM 来执行交易。
有些网络与以太坊的行为完全一致(“EVM 等效”),而另一些网络支持大多数合约,但在某些操作码、gas 成本或预编译合约方面存在差异。开发者在不同 EVM 链之间迁移合约时,仍需在每条链上分别进行测试。
不使用 EVM 的区块链 并非所有智能合约平台都使用 EVM。例如,Solana 通过自己的运行时来运行主要用 Rust 编写的程序,该运行时旨在并行处理大量交易。Sui、Aptos 和 Cardano 等其他网络则使用各自的虚拟机和语言。为这些网络构建的应用无法在 EVM 链上运行,用户需要借助跨链桥在它们之间转移代币。
2026 年 EVM 的变化 以太坊核心开发者通过网络升级来改进 EVM。近期已实施和计划中的变更主要集中在让每个区块能够运行更多计算:
提高 gas 费用上限。2025 年期间,验证者将区块 gas 上限从 3,000 万提高到 6,000 万,使每个区块能容纳更多交易。Glamsterdam 增加了一条用于进一步提高上限的既定路径;Sepolia 测试网已经以 2 亿的上限运行。
Glamsterdam。下一次升级包括区块级访问列表(EIP-7928) ,它会提前告知节点某个区块会涉及哪些账户和存储,从而让交易可以并行处理,此外还包括 gas 成本重新定价。以太坊基金会宣布,截至 2026 年 10 月 29 日,该升级已在 Sepolia 测试网上线。以太坊核心开发者为了研究其中一项 gas 定价变更,推迟了原定于 10 月 26 日在 Hoodi 测试网上的激活 ,目前尚未确定主网上线日期。
钱包如何跨 EVM 网络工作 为以太坊构建的自托管钱包可以在以太坊、其二层网络(layer 2)以及 EVM 兼容的 layer 1 上使用同一个账户,即相同的 0x 地址和私钥,无需为每个网络分别创建新账户。这是因为 EVM 兼容网络共用同一种账户格式。切换网络时,钱包只需要各网络的连接信息:链 ID(chain ID)和 RPC 端点(即钱包所连接的节点地址)。包括 MetaMask 在内的许多自托管钱包,还能在同一个应用中支持比特币、Solana 等非 EVM 网络,方法是为每个网络分别管理一个符合其格式的地址。
关于 EVM 网络的常见问题 不是。EVM 本身并不是区块链,而是在每个以太坊节点内部运行的执行环境。以太坊区块链是区块和交易的记录;EVM 则负责处理这些交易中的智能合约代码。
兼容 EVM 的网络可以运行为以太坊编写的智能合约,并使用相同的指令集、地址格式和开发者工具。智能合约和以太坊钱包通常无需修改或只需少量修改,即可在这些网络上通用。
EVM 运行的是字节码(bytecode),它由称为操作码(opcode)的基本指令组成。开发者通常使用 Solidity 或 Vyper 编写合约,并在部署前将其编译为字节码。
不兼容。Solana 使用自己的运行时,程序主要用 Rust 编写。一些项目提供运行在 Solana 之上的 EVM 环境,但 Solana 主网并不兼容 EVM。
每个 EVM 操作都会消耗 gas(即网络费用),因此需要更多处理工作的交易会消耗更多 gas。一笔简单的 ETH 转账会消耗 21,000 gas,而向存储写入新数据或调用多个合约则会消耗多得多的 gas。这些 gas 最终需要支付多少网络费用,取决于对区块空间的需求;请参阅以太坊 gas 费用详解 。