一文详解zkEVM:以太坊扩展的未来

 2023-09-16 23:09:03发布

零知识以太坊虚拟机(zkEVM)是一种生成零知识证明来验证程序正确性的虚拟机,旨在以支持零知识技术的方式执行智能合约。ZkEVM 是零知识 (ZK) 汇总的一部分,这是以太坊第2层扩展解决方案,通过将计算和状态存储转移到链下来提高吞吐量。

什么是zkEVM

以太坊是一项以支持开放和分布式虚拟计算机执行而闻名的技术,以太坊智能合约一经部署便无法修改,容易遭受恶意攻击。

大多数应用都使用智能合约来管理资金或验证外部实体的身份。因此,在这种情况下,应该保证代码是可靠的。

zkEVM 是一个虚拟机,它执行智能合约并使用零知识证明证明执行的正确性,zkEVMs 重现了以太坊设计的一些方面,因此为开发人员和用户提供了“类以太坊”的体验。

当与 rollup 技术结合时,zkEVM 为去中心化应用程序(dapps)及其用户提供了无与伦比的安全性和可扩展性。

ZkEVMs 使用零知识证明来证明程序正确执行,将可验证计算带入公共区块链领域,在这种情况下,可验证计算对于提高区块链的安全性和可扩展性非常有用。

可以将 zkEVM 视为一台可以执行任意操作的计算机,例如将两个整数相加(“func(a + b = c)”)。用户将输入传递给程序(例如,“a = 3”和“b = 2”),全节点在 zkEVM 中使用这些输入执行程序以产生输出(“c = 5”)。

与此同时,程序的执行跟踪被编译成用于证明的“算术电路”(即,翻译成一系列数学陈述)。这允许全节点生成一个零知识证明,以确认程序正确执行。

这种情况下,证明电路验证有关程序执行的详细信息,例如:

  • 谁调用了程序的函数?
  • 调用者是否向程序传递了正确的输入?
  • 执行是否使用了正确的程序?
  • 最终的输出是否是使用提供的输入正确执行程序的结果?

由于证明电路验证了执行的计算完整性,网络上的其他节点不需要重新执行程序以验证建议的输出。节点只需要检查零知识证明以确认 zkEVM 的新状态是正确的。

在一个“不信任,验证”系统中,验证者可能要求向证明电路提供公开的输入,包括程序的初始和最终状态以及传递给函数的参数。这确保了 SNARK 证明所验证的计算使用正确的输入值进行,并得出了正确的输出。

zkEVM

zkEVM图解

以太坊的zkEVM扩展解决方案

我们也可以将可验证计算扩展到另一个区块链的交易吞吐量扩展。在这种情况下,“资源受限”的区块链可以将计算卸载到一个次级的、高吞吐量的网络,同时保留验证交易是否正确执行的能力。

零知识 rollups,一个用于以太坊(使用 zkEVM 作为运行时环境)的扩展解决方案,就基于这个想法。

Zk-rollups 通过在layer2中执行交易,从而减轻了以太坊的计算负载。在一定的时间间隔内,rollup 的操作员会将许多用户交易聚合成一批,并提交给以太坊上的智能合约。它还提交一个有效性证明,确认链下交易正确执行,新的状态是正确的。

Zk-rollups

Zk-rollups图解

为什么需要扩展以太坊

以太坊虚拟机(EVM)是一个分布式计算环境,它支持 dapps。EVM 提供了许多好处,如安全性和去中心化,但在过程中牺牲了可扩展性。简而言之,EVM 是一个非常安全的计算机,但它的速度很慢,使用成本很高。

多年来,“EVM兼容”的侧链和rollup已成为解决以太坊可扩展性问题的最受欢迎的解决方案。这些区块链实现了以太坊执行层(EVM)的分叉版本,但对其进行了优化,以实现更快的执行和更低的每笔交易成本。

有人会说这些解决方案并没有直接扩展以太坊,但它们确实使开发者能够在可扩展的链下层运行以太坊dapp,并允许用户以少量以太坊成本使用这些应用。以太坊也会(间接地)受益于用户转移到其他区块链,减轻底层拥堵并降低现有用户的Gas价格。

这并不意味着所有扩展解决方案都同样优秀。例如,侧链不受以太坊保护,因此用户资金的安全取决于侧链验证者的诚实。在最坏的情况下,一个腐败的验证者集合可以轻易地窃取存放在桥上的资金,或者阻止用户提取资金(通过审查交易)。

Rollup 在以太坊上结算交易,继承了其安全性和去中心化特性;尽管如此,不同的 rollup 构造有不同程度的安全性。“乐观 rollup”假设提交到以太坊L1的交易批次是有效的,并依赖激励的一方(“观察者”)通过欺诈证明质疑无效的执行。

存在的问题

诚实假设

为了保持 Optimistic Rollup的安全性,必须有人可以验证rollup 交易并质疑无效的操作。Optimistic Rollup 假设存在诚实的验证者(“1-of-N安全模型”),在某些情况下,这个假设可能无法成立。

提款延迟

由于观察者需要时间提出质疑,Optimistic Rollup 对提款施加了延迟。这种延迟(在一到两周之间)可能会对在L2上进行交易的用户的体验产生负面影响。

增加交易费用

Optimistic Rollup不信任排序器以避免数据扣留攻击,因此在以太坊上发布完整的交易数据以实现 rollup 区块的去中心化验证。这提高了安全性,但也增加了交易费用,因为将数据存储在链上的成本转嫁给了用户。

相比之下,运行 zkEVM 的通用 zk-rollups 被认为是 “扩展的圣杯”,因为它们提供了你期望的以太坊扩展解决方案的好处,而不牺牲安全性或引入信任假设。

zkEVM的好处

EVM兼容性

ZkEVMs 完全兼容用于在以太坊虚拟机中运行的智能合约。此外,像 Linea 这样的二型 zkEVM 与 EVM 基础设施无缝集成。

这意味着 Web3 开发者可以在不产生切换成本的情况下将现有的以太坊应用迁移到 L2。更好的是,你可以使用熟悉的开发堆栈从头开始构建新的应用——例如,zkEVMs 可以执行用 Solidity 编写的智能合约。

安全性

zkEVM 的安全保证很简单:零知识证明保证区块生产者不能执行无效的状态转换。也就是说,只要关于底层证明电路的加密假设,比如伪造假证明的不可能性成立。简而言之,zkEVM 让你 “信任数学,而不是验证者”。

现在,有效性证明确保了安全性,但并不保证活性和数据可用性——这就是为什么 zkEVM 区块链依赖以太坊来强制这些安全性质。我们不会在这里深入技术细节,但这种安排提供了以下保证:

  • 用户总是可以通过向以太坊上的 L2 合约发送退出交易,从 zk-rollup 中提取资金。
  • 恶意的 rollup 操作员不能冻结 rollup 或隐藏区块链的状态;只有当数据在链上发布时,以太坊网络才会确认 L2 区块。这确保了用户始终能够访问状态数据,并且诚实的节点可以重构 L2 的最后状态并产生新的区块。
zkEVM

zkEVM图解

可扩展性

ZkEVM 设计为具有高度可扩展性。虽然 EVM 要求每个网络参与者在达成共识之前重新执行交易,但 zkEVM 使用的是非交互式证明。这提高了吞吐量,减少了延迟,因为验证 L2 区块的证明比重新执行新提议的区块中的每个交易更快。

此外,通过使用“递归证明”,ZkEVM 可以进一步提高吞吐量。递归证明是通过合并多个有效性证明生成的,这样,验证单个证明也就验证了所有底层证明的有效性。

ZkEVM的可扩展性

ZkEVM的可扩展性

当提交给以太坊 L1 上的证明验证合约时,一个递归证明允许同时确定几个 L2 区块。这显著减少了 L2 顺序器在提交证明到 L1 的基础上逐块生成区块的时间。

改进的用户体验

在加密货币的世界中,当一个交易或区块被区块链网络中的大多数人接受并且不能被逆转(除非花费大量资源)时,它被“确定”了。确定性是比较 rollup 解决方案的一个好的启示方法,因为它决定了用户必须等待多久才能提取存入 rollup 的资金。

你会经常听到 zkEVM 有“快速确定性”,这只是意味着以太坊在 zkEVM rollup 上进行的交易(包括提现操作)比在普通的乐观 rollup 上完成的时间更短。这有重大的影响,如在去中心化金融(DeFi)行业的投资者可以享受更好的流动性。

降低成本

ZkEVM rollup 可以选择只在以太坊 L1 上发布对其最终状态的承诺,从而减少链上存储成本。由于有效性证明保证了 zkEVM 新状态的正确性,因此顺序器不必发布所有数据(包括未压缩的交易输入)以重新执行状态转换更改。

相比之下,乐观 rollup 必须在 L1 上发布原始交易数据,以便诚实的观察者可以独立计算 L2 的新状态,并可能质疑无效的转换。

zkEVM可以做什么

DeFi

由于从 zkEVM rollup 提现的延迟较低,交易员和投资者将享受更好的资本效率和更多的流动性获取途径。而且,由于不需要支付流动性提供商更快出可扩展性的成本节省将呈指数级增长。

NFT

凭借极低的燃气费和高TPS(每秒交易量),zkEVM链是大规模铸造和交易NFT的理想选择。此外,当将NFT转移到以太坊L1时,你将获得更好的用户体验,因为提款将立即得到最终确定(一旦链上验证器合约接受提交的证明)。

游戏

对于处理大量交易的链上游戏应用程序,zkEVM是理想的选择。除了前面描述的可扩展性优势之外,链上玩家每笔交易的成本更低,这归功于zkEVM的数据压缩能力。

企业应用

企业可以利用zkEVM对通用计算的支持,为用户开发可扩展的应用程序。我们还应该注意,zkEVM Rollup很适合引导高度安全的“第3层”区块链。有了L3基础设施,机构可以构建可定制以提供独特功能的应用特定区块链。

一个好的例子是一个validium,它将有效性证明发布到zkEVM区块链(最终在以太坊L1上进行验证),但将数据存储在链下,以保护用户的隐私。

支付

zkEVM优化了规模(也就是说,这个去中心化的计算机非常快速,使用成本极低),因此非常适合进行点对点支付和进行机构结算。你还拥有强大的交易最终确定性保证,这是由以太坊的高度分散网络(50万+验证器并且还在增加)直接执行的。

五种不同型别的zkEVM

Type 1(共识级等价,完全等同于以太坊)

Type 1 zkEVM 力求完全和以太坊等效。它不会更改以太坊系统的任何部分以使其更容易生成证明,不会取代hash、状态树、交易树、预编译或任何其他共识逻辑。

Type 1 zkEVM 的优点是完美相容以太坊。从长远来看,在Type 2 或Type 3 ZK-EVM 中测试的对以太坊的修改可能会引入以太坊本身,但这种重新架构有其自身的复杂性,因此,Type 1 是最终需要使以太坊L1 本身更具可扩充模组性的东西。

同时,Type 1 zkEVM 也是rollup 的理想选择,因为它们允许rollup重用大量基础设施。

Type 1 zkEVM 的缺点是验证时间问题。以太坊最初并不是围绕ZK友好性设计,因此以太坊协议的许多部分需要大量计算才能执行ZK 证明。

Type 1 zkEVM 旨在精确复制以太坊,因此它无法缓解这些低效率问题。Type 1 zkEVM 是最理想的zkEVM,有许多专案正在构建或探索这种型别。

Type 2(位原始码级等价,完全等同于EVM)

Type2 zkEVM 力求完全等效于EVM,但不完全等效于以太坊。也就是说,它们从内部看与以太坊一模一样,但它们在外部有一些差异,特别是在资料结构方面,如块结构和状态树。目标是与现有应用程式完全相容,但对以太坊进行一些小的修改以使开发更容易并使证明生成更快。

Type 2 zkEVM 的优点是VM 级别的完美等价。Type 2 zkEVM 对储存以太坊状态等内容的资料结构进行更改,这些是EVM 本身无法直接访问的结构,因此在以太坊上执行的应用程式几乎总是可以在Type 2 zkEVM rollup 上执行。

该型别无法按原样使用以太坊执行客户端,但可以通过一些修改来使用它们,并且仍然可以使用EVM 除错工具和其他基础设施。

Type 2 zkEVM 的缺点是验证时间仍然很慢。Type 2 zkEVM 提供比Type 1 zkEVM 更快的验证时间,主要是通过删除以太坊堆叠中依赖不必要的复杂和对ZK 不友好的密码学部分。

比如它们可能会改变以太坊的Keccak 和基于RLP 的Merkle-Patricia 树,可能还会改变区块和收据结构。

这些修改显著改善了证明者(prover)时间,但并不能解决所有问题。由于EVM 固有的所有低效率和ZK 不友好性,证明EVM 的速度仍然很缓慢。

Type 2.5(EVM 等效,gas 成本除外)

改善验证时间的一种方法是是大大增加EVM 中很难进行ZK 证明的特定操作的gas 成本。这可能涉及到预编译、keccak 操作码,以及呼叫合约或访问记忆体或储存或恢复的可能特定模式。

更改gas 成本可能会降低开发人员工具的相容性,并破坏一些应用程式,但通常认为它比「更深层次的」 EVM 更改风险更小。开发人员应该注意不要在一笔交易中要求超过一个区块的gas,而且不要使用硬编码的gas 量进行呼叫。

目前还没具体专案是做Type 2.5 EVM,它只是进入到Type 2 的一个阶段。

Type 3(位原始码级等价,几乎等效于EVM)

Type 3 zkEVM 几乎是EVM 等效的,但为了进一步缩短证明时间并使EVM 更易于开发,为精确等效做出了一些牺牲。

Type 3 zkEVM 的优点是更容易构建,且验证时间更快。Type 3 zkEVM 可能会删除一些在zkEVM 实现中特别难以实现的特性。此外,Type 3 zkEVM 有时在处理合约程式码、记忆体或堆叠的方式上也存在细微差别。

Type 3 zkEVM 的缺点是相容性更差。Type 3 zkEVM 的目标是与大多数应用相容,而其余部分只需要最少的重写工作。也就是说,会有一些应用需要重写,因为它们使用了Type 3 zkEVM 删除的预编译,或者因为对VM 不同处理的边缘情况的微妙依赖。

Type 4(开发语言级等价,高阶语言等效于EVM)

Type 4 EVM 的工作原理,是将用高阶语言编写的智慧合约原始码(例如Solidity、Vyper 或中间语言)编译为某种明确设计为ZK-SNARK 友好的语言。

Type 4 zkEVM 的优点是更快的证明速度。因为该型别不对每个EVM 执行步骤的所有不同部分进行zk 证明,而是直接从高阶程式码开始,就可以避免很多成本。

Type 4 zkEVM 的缺点是它的相容性更差。一是合约在Type 4 系统中的地址可能与它们在EVM 中的地址不同;二是许多应用程式为了提高效率在某些部分使用手写的EVM 位原始码,Type 4 系统可能不支援,许多除错基础设施也无法继承。

以太坊zkEVM项目概览

zkSync 2.0

区块链开发团队 Matter Labs 成立于 2018 年 12 月,2020 年 6 月曾在以太坊上推出了他们自己的 ZK Rollups 协议,称为 zkSync 。zkSync 支持有限范围的智能合约操作,包括 ETH、ERC20 代币和原生 NFT 的低 Gas 传输,以及原子互换和限价订单。

zkSync 2.0 是一种语言级兼容的 zkEVM,旨在支持所有类型的智能合约操作。zkSync 2.0 依赖于称为 UltraPLONK 的基于 SNARKs 的证明算法。

此外,还依赖于称为 LLVM 的开源编译器基础架构,通过 LLVM 可以将 Solidity 和其他类型的编程语言编译成 zkEVM 字节码。

StarkNet

与 zkSync 一样,StarkNet 是 Starkware 团队构建的已经在以太坊上运行的通用 ZK Rollup。Starknet 的交易执行环境称为 StarkNet OS,其原生智能合约编程语言称为 Cairo。

与其他 ZK Rollups 相比,Starknet 是功能最全面的区块链网络之一。StarkNet 为用户提供了一个可选的链下数据解决方案,以实现比非 Volitions 类型的 Rollups 成倍降低的交易费用。StarkNet 操作系统依赖于基于 STARKs 的证明算法。

与 zkSync 2.0 一样,在 StarkNet OS 上生成证明的过程不是开源的。与其竞争对手 zkSync 类似,随着时间的推移,围绕证明生成的细节将会逐渐开源,以便任何人都可以通过专用线路连接到网络。

StarkNet 本身不支持与 EVM 的语言级兼容性,但是以太坊执行层软件客户端 Nethermind 背后的团队正在积极构建名为 Warp 的 Solidity to Cairo 语言编译器。

使用 Warp 编译器,StarkNet 用户可以部署基于以太坊的智能合约,而无需再用 Cairo 重写代码。此外,还有一个名为 Kakarot 的社区驱动项目,用于构建另一个 Solidity 到 Cairo 语言的编译器,以帮助支持 StarkNet 与 EVM 的兼容性。

除了 StarkNet 之外,StarkWare 还为用户提供了一种可定制的区块链可扩展性解决方案,称为 StarkEx。该解决方案利用了基于 STARK 的 ZK 新技术。

与 StarkNet 不同,StarkEx 是一个以应用程序为中心的 ZK Rollup。使用 StarkEx 在以太坊上实现更大可扩展性的一些值得注意的 DeFi 应用程序包括 soRare、Immutable 和 DeversiFi。

Polygon zkEVM

Polygon 团队构建的 zkEVM (以前称为 Matic Network)实现了与 EVM 的字节码级别兼容性。

Polygon 的 zkEVM 实现依赖于基于 SNARKs 和 STARKs 的证明,具体来说,zk-SNARKs 用于证明 zk-STARKs 的正确性,这具有利用与 zk-STARK 相关的快速证明时间以及生成 zk-SNARK 所需的相对较轻的计算资源的优势。

Polygon 成立于 2017 年,是一家主要专注于以太坊扩展解决方案的公司。它于 2020 年 6 月推出了基于权益证明的以太坊侧链,称为 Polygon PoS。之后,Polygon 的产品插件得到了显着发展,变得更加多样化。

除了 zkEVM 实现方式之外,Polygon 还在积极开发另外两个 ZK Rollups 实施,即 Polygon Miden 和 Polygon Zero。它们是结合了 Optimistic Rollup 和 ZK Rollup 的混合 Rollups 实施,称为 Polygon Nightfall。

Scroll

Scroll 是另一个字节码级别兼容的 zkEVM 实现。Scroll 由 Sandy Peng、Ye Zhang 和 Haichen Shen 于 2021 年创立, 2022 年宣布为白名单用户推出他们的 pre-alpha 版本测试网。

值得注意的是,围绕其 zkEVM 实现的所有代码都是公开的,并在开源许可下发布。Scroll 将依赖于一种基于 SNARKs 的证明算法,并且不支持链下数据可用性解决方案。

此外,Scroll 团队正在设计一个用于证明生成的去中心化市场,以支持他们的 zkEVM。为了无需许可和抗审查的方式生成 ZKP,他们还专注于构建可以由世界各地的用户运行的专用硬件设施。

Scroll 团队与以太坊基金会的扩容解决方案研发团队密切合作,其被称为隐私扩容以太坊 (PSE) 团队。与 zkSync、StarkWare 和 Polygon 等其他团队相比,Scroll 规模较小,并且更专注于研究,商业属性较轻。

Privacy & Scaling Explorations (PSE)

PSE 是以太坊基金会的一个研究机构,专注于探索 ZKP 的前沿研究及其在以太坊上的应用。他们以前被称为“AppliedZKP”小组。与其他 zkEVM 实施相比,PSE 的 zkEVM 并不专注于在不久的将来满足大规模使用(PSE 研究的实用性组件正在由 Scroll 团队实施)。

PSE 研究中使用的证明算法是称为 Halo2 的 zk-SNARK ,它由 Zcash (ZEC) 加密货币的核心开发团队 Electric Coin Company 开发。PSE 团队构建的 zkEVM 实施是开源的,任何人都可以参与。

推荐阅读