Skip to main content

什么是 EVM

注意:本文档是英文原版的自动翻译。

什么是 EVM

EVM(以太坊虚拟机,Ethereum Virtual Machine)是驱动以太坊和大量其他区块链的计算引擎。它是执行智能合约——存储在区块链上的自我强制执行程序——的软件环境。当开发者用 Solidity(或其他 EVM 兼容语言)编写一个智能合约、将其编译并部署到某条链上时,实际运行该代码的正是 EVM。

EVM 兼容网络上的每个节点都运行着具有相同规则的同一个虚拟机。这正是使智能合约具有确定性的原因:给定相同的输入和状态,每个节点都产生相同的输出。这里没有歧义,也没有"在我的机器上能跑"的问题。EVM 保证网络中的每个参与者都对每次计算的结果达成一致。

简而言之: EVM 是以太坊和 EVM 兼容链上智能合约的标准化执行引擎。它定义了代码如何运行、状态如何存储以及 gas 如何被消耗——创造出一个在所有节点上运作方式完全相同的通用运行时。

EVM 如何运作

字节码执行

智能合约并不以人类可读的源代码形式存储在链上。在部署之前,源代码(通常用 Solidity 编写)被编译成字节码(bytecode)——一套 EVM 能够理解的低级指令。每条指令是一个操作码(opcode):一项基本操作,例如"两数相加""在内存中存储一个值""从存储加载数据"或"转移代币"。

当一笔交易触发某个智能合约时,网络上的每个验证节点都会:

  1. 从区块链状态加载合约的字节码。
  2. 按照 EVM 的规范顺序执行操作码。
  3. 根据执行结果更新区块链状态。
  4. 为每个被执行的操作码收取 gas。

由于每个节点都以相同的规则运行相同的字节码,它们最终都得到相同的结果。这种确定性执行是链上无信任计算的基础。

Gas

每个操作码都有一个 gas 成本——一个表示执行该指令所需计算工作量的度量单位。Gas 服务于两个目的:

  • 资源计量——gas 防止无限循环,并确保每次计算消耗有限量的网络资源。一个试图永远运行下去的合约将耗尽其 gas 上限并回滚。
  • 费用机制——用户支付 gas 费用(以链的原生代币计价)来补偿验证者执行其交易。更复杂的操作消耗更多的 gas。

Gas 成本由 EVM 规范定义,在所有 EVM 兼容链上都相同(尽管以原生代币计价的 gas 价格因网络而异)。

状态与存储

EVM 维护一个全局状态——一个从地址(包括用户账户和合约账户)到其当前余额、代码和存储的映射。智能合约存储被组织为一个键值存储:每个合约都有自己的 256 位地址空间,可以在其中读写持久化数据。

存储操作(向持久化状态写入和从中读取)在 gas 方面属于最昂贵的 EVM 操作之列,因为它们影响着每个节点都必须永久存储的数据。

基于栈的架构

EVM 是一个栈式机器(stack machine):它使用一个后进先出的栈来保存计算过程中的中间值,而不是使用命名寄存器。操作码将值压入栈、对顶部元素进行操作,并将结果压回栈。这种设计简单且有良好的规范,但不同于大多数传统 CPU 和一些较新的区块链虚拟机(如 Solana 的 SBF/eBPF)所使用的基于寄存器的架构。

为什么 EVM 很重要

一个变成了生态系统的标准

EVM 的意义远远超出以太坊本身。由于 EVM 规范是开放且文档完善的,许多其他区块链都采用了它——要么原生运行 EVM,要么实现一个 EVM 兼容的执行层。这创造了一个共享的生态系统:

共享了什么 在实践中意味着什么
智能合约语言 开发者编写一次 Solidity,即可部署到任何 EVM 链上
开发工具 Hardhat、Foundry、Remix 和其他工具可在所有 EVM 链上工作
钱包兼容性 MetaMask 和其他 EVM 钱包只需添加一个新网络即可工作
代币标准 ERC-20(同质化代币)、ERC-721(NFT)和其他标准可跨链移植
审计与安全 安全审计员、形式化验证工具和最佳实践可跨 EVM 链迁移
开发者知识 一个懂 Solidity 和 EVM 的开发者可以在 Ethereum、Polygon、Avalanche、BNB Chain、Arbitrum、Base 以及数十个其他网络上工作

这种可移植性正是 EVM 兼容性成为那些想要快速吸引开发者和应用的新区块链的默认选择的原因。加入一个现有的生态系统,比从零构建一个,更便宜也更快。

多链部署

对于项目——包括人工智能相关的加密项目——而言,EVM 兼容性意味着一个部署在以太坊上的智能合约,可以以最小的改动部署到 Polygon、Avalanche 的 C-Chain、Arbitrum、Base 或 BNB Smart Chain 上。这使得以下成为可能:

  • 多链存在——一个项目可以在多条链上部署相同的代币合约和核心逻辑,以触及不同的用户群。
  • 链迁移——如果一个项目需要迁移到一条费用更低或吞吐量更高的链,EVM 兼容性会降低迁移成本。
  • 可组合性——在任何给定的 EVM 链上,合约可以使用相同的接口和标准相互交互,从而实现 DeFi 可组合性、代币集成和共享基础设施。

局限性

EVM 是为通用智能合约执行而设计的,而非为计算密集型工作负载。关键局限包括:

  • 没有原生浮点数——EVM 只使用 256 位整数。浮点运算(对大多数 AI/ML 计算至关重要)必须被模拟,而这在 gas 上极其昂贵。
  • Gas 约束——区块 gas 上限封顶了每个区块的总计算量。复杂操作(例如用于人工智能推理的矩阵乘法)在 EVM 执行内代价高得令人望而却步。
  • 顺序执行——EVM 在一个区块内顺序处理交易。现代 CPU 为提升性能而使用的并行执行,并不被原生支持(尽管一些较新的 EVM 兼容链正在试验并行 EVM 执行)。
  • 存储成本——在链上存储大量数据代价高昂。人工智能模型、数据集和中间计算结果对于链上存储而言都太过庞大。

这些局限解释了为什么人工智能相关的加密项目通常在链下运行人工智能工作负载,而仅将链上 EVM 合约用于协调、支付、治理和结果记录。

它在 DecAIHub 项目卡片中出现在哪里

在 DecAIHub 项目卡片中,EVM 出现在:

  • Type——EVM 表示项目运作于一条 EVM 兼容链上。这告诉读者该项目使用基于 Solidity 的智能合约和标准的以太坊工具。
  • Main chain——列出具体的 EVM 兼容链(Ethereum、Polygon、Avalanche、Arbitrum、Base、BNB Smart Chain 等)。所有这些都共享 EVM 执行。
  • Token standard——EVM 兼容链使用以太坊代币标准。ERC-20(同质化代币)、ERC-721(NFT)和 ERC-1155(多代币)是最常见的。这些标准是 EVM 生态系统特有的。
  • 智能合约——如果一个项目的智能合约在区块浏览器上经过验证,读者就可以审视它们。EVM 合约用 Solidity(或 Vyper)编写,并编译为 EVM 字节码。

Type: EVM 这一分类提供了关于项目工具和生态系统的有用上下文,但它本身完全无法说明项目人工智能的质量或其代币的必要性。

仅有 EVM 兼容性并不能证明什么

  • EVM 兼容性并不能证明人工智能能力。 EVM 运行智能合约;人工智能模型运行在 GPU 上。一个项目身处 EVM 链上,完全无法说明它是否拥有真正的 AI component。
  • 部署在 EVM 链上并不能使项目独特。 同一个合约可以部署在数十条 EVM 兼容链上。部署选择是一项基础设施决策,而非差异化因素。
  • 经过验证的智能合约并不能证明链下组件可用。 一个项目可以拥有干净、经过审计的链上代码,背后却没有可用的人工智能流水线。链上和链下组件必须分别评估。
  • EVM 生态系统工具并不能减少对证据的需求。 拥有 MetaMask 支持、区块浏览器上的列示和 ERC-20 代币是标准基础设施——它不是技术、创新或质量的证据。
  • EVM 执行不是人工智能执行。 在 EVM 内部运行一个神经网络,对于任何非平凡的模型而言都代价高得令人望而却步。当一个项目在 EVM 链上声称"链上 AI"时,要确切检查什么运行在链上、什么运行在链下。

请勿混淆

  • 以太坊——以太坊是一条具体的区块链网络。EVM 是以太坊(以及许多其他链)所使用的虚拟机。"EVM"指的是执行引擎;"以太坊"指的是网络、其验证者及其状态。
  • 非 EVM 区块链——像 Solana、Cosmos 链和 Bittensor 这样的区块链使用不同的虚拟机(SVM、CosmWasm、定制运行时)。它们不兼容 EVM,这意味着 Solidity 合约和 EVM 工具无法在它们上面原生工作。
  • 智能合约——智能合约是一个运行在 EVM 上的程序。EVM 是引擎;智能合约是它执行的代码。智能合约也存在于非 EVM 链上,使用不同的语言和运行时。
  • Solidity——Solidity 是 EVM 智能合约最流行的编程语言,但它本身不是 EVM。Vyper 是另一种 EVM 兼容语言。无论由哪种源语言产生,EVM 都执行编译后的字节码。

常见问题

"EVM 兼容"是什么意思?

如果一条区块链能够使用与以太坊相同的操作码集和执行规则来执行 EVM 字节码——即 Solidity 智能合约的编译形式——那么它就是 EVM 兼容的。在实践中,这意味着开发者可以将相同的合约部署到多条 EVM 兼容链上、使用相同的工具(Hardhat、Foundry、MetaMask),并依赖相同的代币标准(ERC-20、ERC-721)。EVM 兼容链的示例包括 Polygon、Avalanche C-Chain、BNB Smart Chain、Arbitrum 和 Base。

人工智能模型可以在 EVM 内部运行吗?

理论上,任何计算都可以表达为 EVM 操作码。在实践中,在 EVM 内部运行非平凡的人工智能模型代价高得令人望而却步。EVM 缺乏原生浮点支持,每个区块都有严格的 gas 上限,并对复杂操作收取高额 gas 成本。即便是穿过一个小型神经网络的单次前向传播,其 gas 成本也会比任何实际应用所能证明其合理性的水平高出几个数量级。这就是为什么人工智能相关的加密项目在链下运行模型,而仅将 EVM 用于协调、支付和验证逻辑。

为什么这么多区块链采用 EVM?

网络效应。以太坊是第一个主流的智能合约平台,其开发者生态系统——Solidity 知识、工具、审计专长、钱包支持和代币标准——经过多年积累而成长。一条采用 EVM 的新区块链可以立即获得对这整个生态系统的访问权。开发者无需学习一门新语言,项目可以部署现有合约,用户可以用熟悉的钱包连接。从零构建一个相互竞争的生态系统,则昂贵得多且不确定得多。EVM 兼容性是通往采用的一条务实捷径。

EVM 兼容(compatible)和 EVM 等价(equivalent)有什么区别?

EVM 兼容意味着该链可以运行 EVM 字节码并支持相同的操作码,但在行为上可能有细微差异(例如 gas 成本、预编译合约或边缘情况下的操作码行为)。EVM 等价意味着该链在操作码层面复制了以太坊的 EVM 行为——每次操作都产生与在以太坊上相同的结果。EVM 等价是一个更强的声称:它意味着即便是依赖精确 EVM 行为的复杂合约和工具,也应该无需修改即可工作。例如,Polygon zkEVM 就以 EVM 等价为目标。

外部参考资料

  • Ethereum.org — 以太坊虚拟机——以太坊基金会解释 EVM 架构、操作码和执行模型的官方文档。
  • 以太坊黄皮书——以太坊协议的形式化规范,包括完整的 EVM 操作码集和执行语义。
  • EVM Codes——EVM 操作码的交互式参考,附有 gas 成本、描述以及用于测试字节码执行的演练场。

另请参阅