什么是零知识rollups?
零知识rollups(zkRUs)是一种用于提升以太坊处理能力的二层解决方案。它通过将多笔交易合并至一个区块中,从而提高交易的处理速度。不同于将所有交易数据都上传至区块链,zkRUs利用零知识证明(ZKPs)在链下验证交易的正确性,只将更新后的状态数据和相应的证明提交至以太坊区块链。这种方法显著减少了区块链上需要存储的数据量,同时增强了系统的扩展性和隐私保护。
zkRUs的早期问题
早期的zkRUs实现功能受限,主要只能处理简单的代币交换和支付,不能执行复杂的计算或运行智能合约。这主要是因为开发者需要使用专门的电路语言来编写应用,这在实际操作中是不现实的。
解决方案:通用虚拟机
为了解决这一问题,提出了开发一种通用虚拟机(VM)的方案。这种虚拟机不仅可以执行智能合约,还能生成并验证相应的零知识证明。尽管如此,由于电路设计复杂且需要特定的硬件支持来高效计算证明,这一方案曾一度被认为难以实现。但最近,多项技术的进步,如多项式承诺方案、优化的查找表、新型递归证明及硬件加速技术的发展,使得通用虚拟机的开发成为可能。
深入以太坊虚拟机
以太坊虚拟机(EVM)使开发者能够使用Solidity语言来创建智能合约。EVM负责处理智能合约代码执行后的状态变化。由于EVM不能直接执行Solidity代码,因此首先需要将Solidity代码编译成包含EVM操作码的合约字节码。目前,EVM能够执行约150种不同的操作码。
zkRU的通用虚拟机需要构建一个能够执行智能合约、生成每步骤的零知识证明,并通过验证器合约来核实这些证明的通用虚拟机是一项复杂的任务。每个步骤都存在诸多挑战,这也导致了各种zkVM实现之间的差异。
解决方案1:创建专为零知识证明计算设计的新语言
以太坊虚拟机(EVM)最初并非设计用来支持零知识证明(ZKP)。它采用了特定的操作码(如 CALL)、错误类型和gas计算方式,并且依赖于一些如 Keccak 这样的特殊哈希函数和 Merkle Patricia Trie 这样的数据结构,这些设计带来了巨大的存储开销。2022年8月,Vitalik Buterin 提出了 zkEVM 的分类和所谓的“zkEVM 困境”:与以太坊的兼容性越高,生成证明的时间就越长,相应地性能也会下降。
为此,一种潜在的解决方案是开发一种新的编程语言,这种语言将专门为零知识证明的计算而设计。这种新语言将针对性地解决 EVM 在本地支持 ZKP 方面的不足,可能包括为 ZKP 计算效率而优化的特定操作码和数据结构,这样可以减少存储开销和缩短证明时间。此外,它还可能避免使用特殊的哈希函数和错误类型,从而进一步提高性能和与以太坊的兼容性。
例如,StarkWare 的 Cairo zkVM 和 zkSync 的 zinc zkVM 等四型 zkEVM 的实现,就引入了一种优化了的新语言,专门支持有效性证明和自定义操作码。它们通过使用自定义转译器,将 Solidity 代码转换为如 Cairo 或 Yul 这样的本地高级语言。尽管这种方式可能更易于构建和优化,但它不支持现有的以太坊开发工具,并可能在某些功能上有所不足。此外,这还增加了开发者和审计员的学习负担,他们需要掌握 Cairo 或 Yul 等新技术,这无疑提高了入门门槛。随着 EVM 持续演进,团队还需不断地对他们的 zkEVM 进行重构或更新,这也给系统的长期维护带来了挑战。
解决方案2:为原生EVM操作码构建ZK电路
另一种方法是直接为EVM的原生操作码构建ZK电路。然而,这种方式的难点在于,zkVM需要证明整个以太坊状态转换功能,包括那些超出基本EVM操作码的功能。
Type 3 zkEVM
当前,Polygon 和 Scroll 的 zkEVM 尚未能完全达到与以太坊虚拟机(EVM)的功能对等,主要是因为它们还未实现一些复杂的预编译合约。这些合约在 EVM 中具有固定的地址和预定的运算成本,提供更高级的功能。
Type 2 zkEVM
Consensys、Polygon 和 Scroll 正在努力实现与以太坊虚拟机(EVM)完全等效,即可以不修改原生字节码就按照 EVM 规范执行程序,并完整支持所有操作码和预编译功能。这使得开发者能够继续使用他们现有的代码,并利用现有的以太坊工具链如 Geth、Remix、Hardhat 和 Foundry。然而,这些平台在管理第二层(L2)状态的方法上各有不同。比如,Consensys 的 zkEVM 就不使用 keccak256 哈希函数,因为它不利于进行零知识证明。
Polygon 的 zkEVM 采用了一种特殊的 Merkle 树结构,每个节点只存储一个属性(如余额、随机数、代码哈希或存储根),并使用名为 Poseidon 的不同哈希函数。此外,Polygon 还改变了内存的使用方式,使用 256 位而非传统的 8 位,这改变了内存查询的逻辑。Polygon 还引入了一个零知识汇编编译器(zkASM),用以解析交易。这些变化可能会影响那些依赖于区块哈希的智能合约的兼容性。
Type 1 zkEVM
Taiko 的 zkEVM 与以太坊在架构上完全相同,无论是哈希函数、状态树还是计算成本,都未做任何修改。这种一致性使得智能合约可以在不需修改的情况下,从 Taiko 迁移到以太坊。这也意味着现有的以太坊执行客户端可以直接作为 Taiko 的节点使用。
Taiko 使用的 zkEVM 由 Privacy & Scaling Explorations 开发,它包括两部分的 zkSNARK:一部分负责验证状态读写操作的正确性,另一部分负责验证计算和执行的正确性。不过,这种方法的一个主要问题是所需证明的大小极大,计算这些证明需要非常强大的 GPU 和专用的 ASIC/FPGA 硬件,这可能会限制能够执行这些操作的实体数量,从而影响系统的去中心化。
为什么会有这么多 zkEVM?
不同团队在实现与 EVM 兼容性的过程中采取了不同的策略,每种实现都有其独特之处,这促进了不同验证方案的试验。这种多样性不仅增强了第二层的安全性,还增加了其鲁棒性。Vitalik 提出了多证明者 zkEVM 卷积的概念,即使单个错误发生,也不会影响整个系统的完整性,而是增加了系统的冗余和恢复力。

