此网页仅供信息参考之用。部分服务和功能可能在您所在的司法辖区不可用。

什么是 EVM?

Ethereum Virtual Machine(EVM,Ethereum 虚拟机)是一套执行智能合约的共同规则。Ethereum 节点使用各自的软件实现这些规则,对相同交易和起始状态进行计算,从而得到可由其他节点复核的结果。

EVM 不是某一台实体服务器,也不是开发者在电脑上看到的单个应用。它更像一份精确的计算说明:代码能执行哪些基本操作、数据放在哪里、每项操作消耗多少计算资源,以及执行成功或失败时怎样更新区块链状态。

从源代码到可执行字节码

开发者通常使用 Solidity 等高级语言编写合约。人类可读的源代码需要经过编译器转换为 EVM 能执行的字节码,也就是一串按固定格式排列的机器指令。

部署合约时,创建交易包含用于生成合约的代码。执行成功后,网络为合约建立地址,并保存之后接收调用时要运行的字节码。合约部署后的运行代码与开发者的源文件并不是同一种表示,因此公开源代码还需要与链上字节码核对,才能说明两者对应。

编译器版本和设置可能影响最终字节码。两个看起来相似的源文件也可能生成不同结果;看到同一个合约名称,更不能代替对网络和合约地址的核对。

调用为合约提供执行输入

用户调用合约时,会向合约地址发送一笔带有数据的交易。数据通常说明要调用哪个功能,并按约定格式附上参数。合约也可以在执行过程中调用另一个合约,把数值或数据继续传递下去。

EVM 从当前区块链状态开始,读取调用者、目标、附带数值、输入数据和当前区块允许使用的信息,然后逐条执行目标合约的字节码。每条指令都会按规则改变本次计算中的临时数据,或请求读取、写入合约的持久状态。

合约不会因为时间到了就自行启动。必须有交易或其他合约调用形成执行入口;网页上的“自动运行”通常还需要某个外部服务在条件满足时提交交易。

操作码是字节码中的基本动作

EVM 字节码由一项项操作码组成。操作码可以理解为虚拟机认识的最小动作,例如做算术、比较数值、读取调用数据、读取或写入存储,以及调用其他合约。

不同操作码具有明确的输入、输出和 Gas 消耗规则。节点不需要理解合约的业务名称,只需按操作码顺序执行,就能检查另一个节点给出的结果是否符合协议。

高级语言中的一行代码可能被编译成多条操作码。反过来,只看某个操作码也无法理解完整业务意图,因此合约审查通常还要结合源代码、编译设置、调用数据和实际部署地址。

临时数据与持久状态

执行过程中使用的数据并不都会永久写入区块链。可以先区分三类位置:

  • 调用数据是本次调用带入的只读输入;
  • 内存是本次执行期间使用的临时工作区,执行结束后不会保留;
  • 存储属于具体合约,成功写入后会成为区块链状态的一部分,供以后调用读取。

EVM 还使用一种后进先出的临时计算结构,称为栈。操作码从栈顶取值、完成计算后再放回结果。普通读者不必手工跟踪每一步,但需要知道“内存中的变化”和“合约存储已经改变”不是同一件事。

写入持久存储通常比只做临时计算消耗更多 Gas。删除或改变存储也受协议规则约束,不能把链上状态当成普通程序可以任意覆盖的本地文件。

状态变化必须能够重复计算

同一区块中的交易有确定顺序。节点从相同的区块前状态开始,按顺序执行相同交易,就应得到相同的区块后状态;否则它们无法对共同账本达成一致。

因此,EVM 合约不能在执行时直接访问任意网页、设备时间或某台服务器的随机结果。需要链外价格、天气或其他信息时,外部参与者必须先把数据以交易形式带到链上。EVM 能检查代码怎样使用这份输入,却不能自动证明输入对应的链外事实真实。

区块提供的时间、区块编号等信息也来自协议定义的执行环境。开发者可以按规则读取它们,但不应把这些值误当成不受区块提议过程影响的精密外部时钟或秘密随机源。

Gas 限制每次执行的工作量

每项 EVM 操作都会消耗一定 Gas。Gas 是对计算和存储工作的计量单位,不是一种独立代币;在 Ethereum 主网上,实际执行费用通常使用网络原生资产 ETH 支付。

交易发送方会设置允许本次交易最多消耗的 Gas。执行时,EVM 按实际运行的操作累计 Gas;若剩余 Gas 不足以完成下一步,执行会因耗尽 Gas 而失败。

Gas 让无限循环或异常复杂的调用不能无成本占用所有节点的计算资源。它也意味着同一个功能可能因输入、当前状态和执行路径不同而消耗不同数量。交易金额大,不一定比金额小的交易执行更多代码。

成功、回退与失败

合约可以正常结束并返回数据,也可以主动回退,或因无效操作、Gas 耗尽等原因失败。失败时,本次调用路径中尚未提交的状态修改会按规则撤销,但交易已经消耗的计算资源仍可能产生费用。

一个交易可以触发多层合约调用。如果内层调用失败,外层合约可以按代码选择继续处理返回结果,也可能让整个交易回退。因此,“某个内部步骤失败”与“整笔交易最终失败”需要结合调用结果判断。

状态回退也不会撤销交易已经被纳入区块这一事实。区块浏览器可以显示失败交易和消耗的 Gas,只是预期的合约状态修改没有生效。

读取结果与提交交易

钱包或应用可以让某个节点在本地模拟执行只读请求,并立即返回结果。这类读取不会由整个网络达成新的共识,也不会修改链上状态,通常不需要用户签名并支付链上费用。

需要改变状态的操作则必须形成交易、由账户签名并广播,在进入区块后由节点共同执行。交易提交前的模拟可以帮助发现明显失败,但最终结果仍可能受交易排序、状态变化、Gas 设置和所选网络影响。

因此,应用界面显示“预计成功”不等于交易已经确认。真正的链上结果需要查看正确网络上的交易状态、执行结果和合约状态。

EVM 与 Ethereum 不是同一个概念

EVM 只描述智能合约执行和状态转换的一部分规则。Ethereum 还包括账户与交易格式、区块传播、权益证明共识、网络通信和其他协议组成。

其他区块链也可以实现 EVM 或与其高度相似的执行环境,以复用合约工具和字节码。它们通常被称为 EVM 兼容网络,但仍拥有独立的区块历史、验证安排、费用资产和安全边界。

所以,“能运行 EVM 合约”不表示它就是 Ethereum,也不保证同一地址在不同网络上部署着相同代码。跨网络使用应用时,仍需核对网络及其网络编号、合约地址和实际字节码。

共同执行不等于合约安全

EVM 的确定性规则可以让节点复核合约是否按代码执行,却不能判断代码是否符合用户真正想要的业务结果。错误权限、外部合约在前一次操作结束前反复回调、价格输入问题、升级控制或界面诱导,都可能让一笔完全符合 EVM 规则的交易造成意外后果。

编译成功、链上执行成功或源代码公开,也不能分别替代安全审查。判断具体合约时,需要结合已部署字节码、初始化状态、管理权限、外部依赖和真实调用路径。

常见问题

EVM 是一台云服务器吗?

不是。它是一套由节点软件共同实现的执行规则,不对应某一台固定机器。

Solidity 代码会被 EVM 直接执行吗?

通常不会。Solidity 源代码先由编译器转换为 EVM 字节码,节点执行的是部署后的字节码。

读取合约一定需要支付 Gas 费吗?

本地只读请求通常不会形成链上交易,因此不会直接产生链上费用。如果读取是另一笔上链交易执行过程的一部分,相关操作仍会计入该交易的 Gas。

EVM 能直接读取互联网数据吗?

不能。外部数据需要由某个参与者或服务通过交易带到链上,EVM 只能按规则处理已经提供的输入。

EVM 兼容就代表合约可以无修改迁移吗?

不保证。兼容程度、协议版本、可用操作码、费用规则、系统合约和外部依赖可能不同,仍需在目标网络验证和测试。

相关词条

继续了解Ethereum、智能合约、Gas 费和区块链,或返回加密货币术语表。

参考来源

免责声明
本文章可能包含不适用于您所在地区的产品相关内容。本文仅致力于提供一般性信息,不对其中的任何事实错误或遗漏负责任。本文仅代表作者个人观点,不代表欧易的观点。 本文无意提供以下任何建议,包括但不限于:(i) 投资建议或投资推荐;(ii) 购买、出售或持有数字资产的要约或招揽;或 (iii) 财务、会计、法律或税务建议。 持有的数字资产 (包括稳定币) 涉及高风险,可能会大幅波动,甚至变得毫无价值。您应根据自己的财务状况仔细考虑交易或持有数字资产是否适合您。有关您具体情况的问题,请咨询您的法律/税务/投资专业人士。本文中出现的信息 (包括市场数据和统计信息,如果有) 仅供一般参考之用。尽管我们在准备这些数据和图表时已采取了所有合理的谨慎措施,但对于此处表达的任何事实错误或遗漏,我们不承担任何责任。 © 2026 OKX。本文可以全文复制或分发,也可以使用本文 100 字或更少的摘录,前提是此类使用是非商业性的。整篇文章的任何复制或分发亦必须突出说明:“本文版权所有 © 2026 OKX,经许可使用。”允许的摘录必须引用文章名称并包含出处,例如“文章名称,[作者姓名 (如适用)],© 2026 OKX”。部分内容可能由人工智能 (AI) 工具生成或辅助生成。不允许对本文进行衍生作品或其他用途。

相关推荐

查看更多
what-is-blockchain

什么是区块链?

区块链可以理解为由多个参与者共同维护的数字记录本。新的记录会被整理成区块,区块再按顺序连接起来。参与网络的计算机按照同一套规则检查更新,因此不需要只依赖一个数据库管理员来决定哪份记录有效。 更准确地说,区块链把数据结构、密码学、分布式复制和共识规则组合在一起。它能让历史改动更容易被发现,并在网络的安全前提成立时越来越难以重写,但这不等于任何情况下都绝对无法修改。 因此,区块链不只是一个包含哈希的数
2026年10月29日
crypto-glossary-cover-v5.contentful

加密货币与区块链术语表

这份 A–Z 术语表汇集区块链、交易、钱包与链上应用中的常见概念;选择字母可跳转到对应章节,选择术语名称可查看该术语的详细文章。 [A](#a) · [B](#b) · [C](#c) · [D](#d) · [E](#e) · [F](#f) · [G](#g) · [H](#h) · [I](#i) · [J](#j) · [K](#k) · [L](#l) · [M](#m) · [N](#
2026年10月29日
Crypto adoption generic thumbnail

什么是 DeFi?

去中心化金融(decentralized finance,DeFi)是主要通过区块链和智能合约提供资产兑换、借贷等金融功能的一类应用。智能合约是部署在区块链上、按预设代码处理操作的程序。用户通常用自己的钱包发出交易,由合约检查条件并更新链上记录,而不必把每一步都交给同一家服务商的内部数据库处理。 DeFi 不是某一个项目、区块链或产品,也不是“所有环节都没有管理者”。一套 DeFi 应用可能让合约
2026年10月29日
decentralized-exchange-dex

什么是 DEX?

去中心化交易所(decentralized exchange,DEX)是一类让用户通过区块链协议或智能合约交换数字资产的交易系统。智能合约是部署在区块链上、按代码检查并执行操作的程序。用户通常从自己的钱包发出操作,交易由这类链上程序按规则结算,不必先把资产记入同一家交易平台控制的内部账户。 DEX 不是一种固定的软件结构,也不等于“每一步都在链上”或“没有任何运营者”。有的 DEX 用资金池自动报
2026年10月29日
thumbnail:dao

什么是 DAO?

去中心化自治组织(decentralized autonomous organization,DAO)是一种让多人按照事先约定的规则共同作决定、管理资金或维护项目的组织方式。它常把成员资格、提案、投票结果或资金权限记录在区块链上,使参与者能够核对规则和执行结果,而不必把所有决定都交给一个管理员。 DAO 不是一种固定的软件产品,也不等于“没有负责人”。有的 DAO 主要用链上投票控制智能合约,也就
2026年10月29日
DApps generic thumb

什么是 DApp?

去中心化应用(decentralized application,DApp)是一种把部分核心规则或状态,例如余额、所有权和授权记录,交给区块链等去中心化网络执行和保存的应用。用户通常仍通过网页或手机界面操作,但关键结果可以由网络中的多个参与者按共同规则验证,而不只依赖应用运营方的一份数据库。 “去中心化”描述的是应用的控制和依赖怎样分布,不是一张自动获得的标签。一个 DApp 可以在链上运行核心合
2026年10月29日
查看更多