原文:Scaling Ethereum Efficiently

翻译及校对:「Starknet 中文社区」

详述有效性证明Rollup和Cairo VM技术特性

概要

  • 有效性证明 Rollup 以安全和去中心化的方式增加以太坊吞吐量,也是最具潜力的方式;zkEVM 和 Cairo VM(CVM)是有效性证明 Rollup 中所使用到的两种虚拟机 (VM) 类型。
  • zkEVM 专注于以太坊兼容性,但牺牲了性能和可扩展性。
  • Starknet 采用的 Cairo VM 将性能和可扩展性置于兼容性之上。

Rollup 是今年关于扩展以太坊的热门话题。在各种类型 Rollup 中,我们相信有效性证明 Rollup(以下简称 VR,或称为 zk-rollup),是以安全和去中心化的方式增加以太坊吞吐量,最有希望的扩容方案。这种扩容方案的核心是采用有效性证明进行可验证计算。下面来了解其运行原理:

  • 和在以太坊主网上处理每笔交易不同,运营者将交易放到链下环境执行。链下环境就是 L2,即在以太坊之上运行的操作层。
  • 在大批量交易处理完成后,L2 运营者将结果返回至以太坊状态中,同时还有一个有效性证明用于验证链下执行的完整性。该证明保证同一批次中的所有交易都有效,并由链上验证合约自主验证。该操作允许以太坊将结果应用于其状态。

详述有效性证明Rollup和Cairo VM技术特性

有效性证明 Rollup

请注意:有效性证明 Rollup 常被错称为零知识证明 Rollup (zkRollup),这并不准确。大部分有效性证明 Rollup 不采用零知识证明,也不用于确保隐私。因此,术语「有效性证明 Rollup」更准确。

链下虚拟机

在继续深入前,我们需要回答第一个问题:什么是虚拟机(VM)?简而言之,虚拟机是一个可以运行程序的环境,比如 Mac 上运行 Windows 操作系统。VM 在对某些输入执行计算后,在状态之间进行转换。以太坊虚拟机(EVM)就是运行以太坊智能合约的 VM。

零知识虚拟机(zkVM)是程序执行环境,与程序输出一起生成可轻松验证的有效性证明。有效性证明用于证明程序已正确执行。当使用「zkEVM」一词时,通常是指运行以太坊虚拟机(EVM)并能够证明 EVM 执行的 Rollup。这个术语可能会造成误会,因为 EVM 本身无法生成这些证明;相反,证明是由一个单独的证明器机制产生,该机制将 EVM 的执行结果作为其起点。此外,上述证明都是与有效性相关,而与隐私无关。因此,准确来说不能称为零知识证明。而为了保持一致性,在本文中仍使用传统术语「zkEVM」。

尽管所有有效性证明 Rollup 都旨在采用有效性证明来扩展以太坊,而不同方案在 VM 执行链下交易方面做出了不同选择。许多有效性证明 Rollup 选择复制 EVM 设计(因此称为「zkEVM rollup」),尝试在 L2 rollup 上复制以太坊。Starknet 采用的是 Cairo VM(CVM),是专为优化有效性证明效率而设计的全新 VM。

上述两种方式各有利弊和取舍,但 zkEVM 牺牲性能以求以太坊兼容性,而 Cairo VM 将性能置于兼容性之上,优先考虑可扩展能力。

了解 zkEVM 运作方式

zkEVM 是一种有效性证明 Rollup,旨在 L2 区块链上完全引入以太坊体验。目的是将以太坊开发者环境复制到 Rollup 中。借助 zkEVM,开发者编写或移植智能合约到扩容方案时,无需调整代码或弃用原本的 EVM 工具(以及智能合约)。

这种方式有一个关键缺陷,即降低了有效性证明的扩展能力。由于重心放在与以太坊兼容,导致 zkEVM 速度更慢且资源密集度更高。与 CVM 不同,EVM 在设计时没有考虑证明效率。因此限制了在提高效率和可扩展性的优化使用,最终影响系统的整体性能。

EVM 的可证明性

zkEVM 方式的核心挑战在于 EVM 根深蒂固的原始蓝图,起初的设计并不是为了在有效性证明环境中运行。因此,努力都放在实现以太坊功能上,就无法释放有效性证明的全部潜力,导致效率不尽人意。这种低效率最终拖了系统整体性能的后腿。EVM 与有效性证明的兼容性受到以下因素的阻碍:

  • EVM 采用基于堆栈的模型,而有效性证明更高效地用于基于寄存器的模型。EVM 基于堆栈的性质使其本质上更难证明其执行的正确性,并为其本地工具链提供直接支持。
  • 以太坊存储布局重度依赖于 Keccak 和大型 Merkle Patricia 树,这两者都是非有效性证明友好型,带来巨大证明负担。例如,Keccak 对于 x86 架构非常快速(通常用于运行 EVM),但需要 9 万个步骤来证明(需要特殊内置)。而 Pedersen(零知识友好型哈希函数)只需要 32 个步骤。即使采用递归压缩,zkEVM 中使用 Keccak 消耗证明器资源仍旧很高,成本最终还是得由用户承担。

因此,各类 zkEVM 旨在为以太坊工具提供不同程度的支持,但 zkEVM 与以太坊兼容性越高,性能也就越低。(有关更多 zkEVM 类型的信息,请参阅文章结尾处)

详述有效性证明Rollup和Cairo VM技术特性

了解 Cairo-VM 运作方式

zkEVM 解决方案在「让 EVM 适用于有效性证明 Rollup」方面投入了大量开发时间,将兼容性置于长远性能和可扩展性之上。还有另一个选项:采用全新的专用虚拟机,并新增一个额外层用于支持以太坊工具。这就是 Starknet 采取的措施,Starknet 于 2021 年 11 月推出了一个无需许可的有效性证明 Rollup。Starknet 是首个在完全可组合性网络中,实现通用智能合约平台的有效性证明 Rollup。

Starknet 采用 Cairo-VM(CVM),并创造同名高级语言 Cairo。Cairo-VM 是为高效生成程序执行的有效性证明而设计。

通过 Cairo(VM 和编程语言)可实现:

  1. 优化有效性证明,每条指令都有一个有效代数表达式
  2. 用于编写可证明程序的现代类 Rust 语言
  3. 高级 Cairo 语言和 Cairo 汇编(VM 指令)之间的中间表达式(Sierra),可以高效执行 Cairo 代码

开发一种全新语言可以根据特定需求定制,可以包含以前所不具备的功能,满足新需要。

Cairo 和编码多元化

为了创建某些计算的有效性证明,首先必须将该计算表达为描述计算的一系列数学约束。这个过程非常复杂,难点在于优化计算以提高效率,而且需要特定工具。

Cairo 语言设计之初就是为了简化这一任务,以便 StarkEx 能轻松增添功能和复杂的商业逻辑。将 Cairo 程序编译成代数机器代码,即一串数字,由单个固定的 VM 执行。有了 Cairo,生成描述计算的数学约束这个复杂过程(对于有效性证明来说非常棘手)得以抽象化,进而以一组固定的约束条件(总共不到50个约束)来表示。这样,开发者无需理解底层数学和基础设施,仅需用熟悉的语法编写代码,就能利用有效性证明扩展应用程序。

https://twitter.com/EliBenSasson/status/1638270015009968134

Starknet 致力于创新,这点在代码多元化处理方法上展现得淋漓尽致。Cairo 采用 STARK 技术实现最佳扩展功能,不仅限于使用 Cairo 本地环境编写合约。开发者还可以选择最适合的方式:

  • 在 Cairo 本地编码:Cairo 1.0 受 Rust 启发,更加符合开发者使用习惯且更加安全,编写程序逻辑变得更加容易且不易出错。
  • Solidity 兼容性:Solidity 开发者可以编写支持 Cairo VM 的代码。这种方式提供了与以太坊相似的开发者体验,并支持 Solidity 智能合约迁移至 Starknet。迁移实现方式有两种:
  • 转译:转译是将一种编程语言的源代码转换成另一种语言的过程。Nethermind 团队构建了 Warp 转译器,用于将 Solidity 代码转译为 Cairo。Warp 让 Solidity 智能合约可移植至 Starknet,使其有效成为第四类 zkEVM。目前已用于转译和部署 Uniswap 合约,只需极小的改动即可实现。
  • Starknet 上的 zkEVM:Cairo VM 能用于证明另一个 VM 的执行。Kakarot 是采用 Cairo 编写的 zkEVM,可用于在 Starknet 上运行以太坊智能合约。Cairo VM 和 zkEVM 并不是竞争关系,与其在两者之间做出选择,不如采用两者兼得的方式!

尽管 Cairo 问世时间不长,但根据 TVL 排名,Cairo 是第四受欢迎的智能合约编程语言,估值超 3.5 亿美元。

总结

zkEVM 旨在将以太坊开发者环境复制到 Rollup 中,并允许开发者使用熟悉的以太坊工具。但这种方式限制了有效性证明的潜力,且资源密集。

专为有效性证明设计的 Cairo VM 不受到 EVM 的限制。Cairo VM 支持 Cairo 1.0。Cairo 1.0 受 Rust 语言启发,更加符合开发者使用习惯且更加安全,形成强大的工具,旨在利用 STARK 证明高效扩展以太坊。

看到 Cairo 每周都在发展,Kakarot zkEVM 和 Warp 这种开发者选择越来越多,令人兴奋。随着 Starknet dApp 投入生产,展现出 Cairo 的强大力量,我们坚信未来 Cairo 会催生出前所未见的优秀项目。

上文概述了 SATRK 扩展的三种路径,毫无疑问未来几个月还会有更多创新诞生。开发者现在对扩展区块链有了前所未有的掌控权。

zkEVM 类型

Vitalik 将 zkEVM 主要分为四个类型:

  • 第一类完全等效以太坊:不改变以太坊生态系统的任何部分。
  • 第二类完全等效 EVM:能和现有 dApp 兼容,并对以太坊的设计做出部分调整以加快证明生成。
  • 第三类大致等效 EVM:支持大部分 EVM 操作码,移除部分 zkEVM 难以实现的功能(如预编译和哈希函数)。
  • 第四类等效高级语言:用 Solidity/Vyper 编写智能合约代码,并将其转译成有效性证明友好型语言。