zkEVM(零知识以太坊虚拟机)是一种虚拟机,它与以太坊虚拟机(EVM)兼容地执行智能合约,并使用零知识技术生成这些执行的加密证明。它被设计为以太坊的扩展解决方案,旨在提高交易吞吐量并降低成本,同时通过利用主要的以太坊网络来维持高度的安全性。通过捆绑大量交易,在链下执行它们,然后将紧凑的有效性证明发布到主区块链,zkEVM允许验证计算,而无需每个网络节点重新执行它们。 [1] [2]
zkEVM 开发的主要动机是为了解决 Ethereum 网络的扩展性瓶颈。在 Ethereum 的标准模型中,每个验证器节点必须重新执行一个区块内的每个交易以验证其有效性,这个过程被称为“N-of-N 执行”。这种冗余计算限制了网络的容量,并且是高需求期间高 gas 费的一个促成因素。 [3]
zkEVM 提出了一种“1-of-N”模型,其中一个称为“证明者”的特殊实体执行一个交易区块,并生成一个简洁的密码学证明(一个 ZK 证明),确认执行的正确性。然后,网络验证器只需要验证这个计算成本低的证明,而不是重新运行整个区块。这种范式转变极大地减少了网络上的计算负载,从而实现了更高的吞吐量和更实惠的费用。 [4]
虽然早期的 ZK-Rollups 提供了可扩展性优势,但它们通常以牺牲 EVM 兼容性为代价,限制了它们在特定应用中的使用,并要求开发人员学习新的语言或工具。zkEVM 是一个重要的演变,因为它们旨在与 EVM 兼容或等效,允许开发人员以最小或无需代码修改的方式将现有的 Ethereum 智能合约和 去中心化应用程序 (dApps) 部署到更具可扩展性的层上。这种方法允许项目利用 Ethereum 广泛的开发人员、工具和基础设施生态系统。 [1] [5]
该技术主要应用于两种情况:作为在 Ethereum 之上运行的 Layer 2 rollups,以及更雄心勃勃地将 zkEVM 直接集成到 Ethereum 的 Layer 1 协议中以扩展主网本身。 [6]
zkEVM架构从根本上由三个核心组件构成,这些组件促进链下计算和链上验证。 [2]
zk-SNARK 或 zk-STARK。此证明以密码学方式证明状态转换(从初始状态到新状态)是有效的,并且所有计算均根据 EVM 的规则正确执行。生成证明时不会泄露底层交易数据本身。 [5] [2]在 zkEVM 系统中,证明者“无状态”地执行区块,这意味着它不需要维护整个区块链状态的完整副本。相反,正在处理的交易所需的必要状态数据作为输入提供,通常称为“见证”。此输入附带有 Merkle 证明,用于根据父区块的已知状态根验证其完整性。 [4]
重要的是要注意,术语“zk”(零知识)在扩展的上下文中可能部分用词不当。虽然该技术可用于隐私,但 zkEVM 主要利用 SNARK 等 ZK 证明系统的“简洁性”(证明很小)和“完整性”(证明在计算上是合理的)属性。它们证明计算被正确执行,而无需一定隐藏交易细节,因为隐私需要额外的复杂性和证明者成本。 [6]
以太坊 联合创始人 Vitalik Buterin 提出了 zkEVM 的分类系统,根据其与 以太坊 的兼容程度将其分为不同类型。该系统强调了一个基本的权衡:更高的兼容性(较低的类型编号)使得使用现有基础设施更容易,但证明速度较慢且成本更高;而较低的兼容性(较高的类型编号)以牺牲 以太坊 标准为代价,实现了更快的证明速度。 [2]
1 型 zkEVM 旨在与 以太坊 完全且不妥协地等效。它们不对 以太坊 系统进行任何更改,包括哈希函数(如 Keccak)、状态树或其他共识逻辑。
Type 2 zkEVM 从开发者的角度来看是完全等效的,但对底层的 Ethereum 架构进行了微小的修改,例如使用不同的状态树结构,以加速证明生成。
这是2型的一个变体,它增加了在ZK电路中特别难以证明的特定操作的Gas成本。这种修改改善了最坏情况下的证明时间,但可能会破坏依赖精确Gas成本计算的开发者工具和智能合约。 [2]
Type 3 zkEVM 牺牲了完美的 EVM 兼容性,以进一步简化开发和提高证明者性能。它们可能会省略在 ZK 电路中难以实现的功能,例如某些预编译合约。
Type 4 系统不追求 EVM 字节码级别的直接兼容性。相反,它们将用 Solidity 或 Vyper 等高级语言编写的智能合约源代码直接编译为 ZK 友好的语言或指令集。
CALL)以及使用对ZK不友好的哈希函数(如Keccak)在为其执行创建证明时提出了重大的技术挑战和费用。 [2]将zkEVM集成到以太坊生态系统中,无论是在Layer 2还是Layer 1,都会引入新的安全考量因素和潜在的攻击媒介。以太坊基金会的研究已经确定了许多令人担忧的领域。 [6]
一个主要关注点是单点故障的风险。如果生态系统变得依赖于仅一两个执行层(EL)客户端进行证明,或者依赖于单一的底层zkVM实现,那么该主导软件中的错误可能会停止或损害整个网络。一个提议的缓解措施是“多重证明策略”,即只有在收到来自多个不同的zkEVM系统的证明后,一个区块才被认为是有效的。 [6]
将以太坊客户端“变为可证明的”过程中存在重大风险。以太坊客户端设计用于具有缓存和系统调用等功能的复杂CPU,而这些功能在zkVM的受限环境中是不存在的。这些环境之间的不匹配是一个高度关注的问题。此外,修改客户端时可能会引入错误,并且用于zkVM的RV32IM等小众指令集架构(ISA)的编译器不如主流编译器那样经过实战考验。用于加速ZK不友好操作(如Keccak哈希)的自定义“zkVM预编译”也增加了复杂性并引入了自身的攻击面。 [6]
zkEVM 最关键的组成部分是定义 VM 规则的算术电路和底层密码协议。这两者中的任何一个出现错误都可能是灾难性的,可能允许恶意证明者为无效的状态转换创建看起来有效的证明,从而导致资金被盗。这些缺陷可能源于源研究论文、规范中的歧义或实现过程中的错误。其他实现风险包括不正确的“见证”生成、程序格式之间的转译错误,或偏离协议已证明的安全保证的不安全“优化”。 [6]
为了应对这些风险,生态系统依赖于多种策略,包括形式化验证(使用数学方法证明代码的正确性)、针对标准化测试套件(如以太坊执行规范测试)的广泛测试、独立的安全性审计、激励白帽黑客的漏洞赏金以及多重证明策略等架构设计。 [6]
为了加强安全性,以太坊基金会启动了 zkEVM 正式验证项目,这是一项生态系统范围内的努力,旨在将形式化验证方法应用于整个 zkEVM 堆栈,目标是创建“无错误 zkEVM”。该项目预计将持续到 2026 年底,旨在开发工具、标准和流程,以确保 zkEVM 的正确性和安全性。 [8]
该倡议分为三个主要关注领域,或“轨道”:[8]
该项目通过赠款计划运作,该计划资助各个团队来应对这些挑战。支持的工作包括开发 ArkLib,这是一个用 Lean 证明助手形式化的密码学证明库;cLean,一种用于在 Lean 中编写电路的领域特定语言 (DSL);以及 LLZK,一种用于零知识语言的统一中间表示。这些努力突出了一种社区驱动、开放和方法多样的途径来保护下一代 以太坊 扩展解决方案。 [8]
虽然早期的zk-Rollups,如dYdX和Loopring展示了ZK技术在扩展方面的强大功能,但它们缺乏通用的EVM兼容性。zkEVM的开发代表了将ZK证明与EVM的可编程性相结合的重要推动。 [1]
首个公开 zkEVM 主网于 2023 年 3 月上线,标志着 Ethereum 扩容的重要里程碑。
在整个 2024 年,Polygon zkEVM 主网 Beta 进行了多次升级,包括引入 cdk-erigon 排序器的“Etrog”、“Elderberry”和“Eggfruit”更新。然而,在一次战略转变中,Polygon Labs 在 2026 年 1 月宣布计划弃用 Polygon zkEVM 主网 Beta。该项目的技术和经验正被整合到其他生态系统产品中,例如 Polygon 链开发工具包 (CDK),该工具包允许开发人员启动自己的 ZK 驱动链。 [7]
以太坊基金会 正在研究将 1 型 zkEVM 直接集成到以太坊的基础层中。目标是实现“实时证明”(RTP),这意味着在 12 秒的时间内为完整的以太坊区块生成 ZK 证明。这将使整个网络受益于 ZK 扩展,而无需用户迁移到单独的 Layer 2。该项目的指导原则是“完全、不妥协的 EVM 等效性”。 [3]
“我们的目标是完全、不妥协的 EVM 等效性。” [3]
截至 2026 年初,该计划包括对 OpenVM 和 RISC0 等 zkVM 实现进行持续基准测试,以及准备 Reth 和 Geth 等以太坊客户端,以便与基于证明的验证进行潜在集成。 [3]