撰文:StarkWare
编译:凹凸曼
TL;DR
- Validity Rollups 是以安全和去中心化的方式增加以太坊吞吐量的最有前途的方式; zkEVM 和 Cairo VM (CVM) 是有效性汇总中使用的两种类型的 VM。
- zkEVM 专注于以太坊兼容性,但牺牲了性能和可扩展性。
- Starknet 中使用的 Cairo VM 将性能和可扩展性置于兼容性之上。
在谈论扩展以太坊时,Rollups 是今年的热门话题。在各种类型的 rollups 中,我们认为 Validity Rollups (VRs),也称为 zk-rollups,是以安全和去中心化的方式增加以太坊吞吐量的最有希望的方式。这种扩展解决方案的核心是使用有效性证明进行可验证计算。他们是这样工作的:
运营商不是在以太坊主网上处理每笔交易,而是将交易执行卸载到链下环境。这个链下环境作为第 2 层,意味着在以太坊之上运行的层。
在处理大量交易后,第 2 层操作员返回结果以应用于以太坊的状态,以及验证链下执行完整性的有效性证明。该证明保证一批中的所有交易都是有效的,并由链上验证者合约自主验证。这允许以太坊将结果应用到它的状态。
Validity Rollups
注意:Validity Rollups 通常被错误地称为零知识汇总,但这并不准确。大多数 Validity Rollup 不使用 ZKP,也不用于确保隐私的目的。因此,术语「Validity Rollup」更准确。
链下虚拟机
在继续之前,我们需要回答的第一个问题是:什么是虚拟机 (VM)?简单地说,它是一个可以运行程序的环境,就像运行 Windows 操作系统的 Mac。它在对某些输入执行计算后在状态之间转换。以太坊虚拟机 (EVM) 是运行以太坊智能合约的 VM。
零知识虚拟机 (zkVM) 是一种程序执行环境,它与程序输出一起允许生成可以轻松验证的有效性证明。此有效性证明证明程序已正确执行。当使用术语「zkEVM」时,它通常是指利用以太坊虚拟机 (EVM) 并能够证明 EVM 执行的汇总。这个术语可能会产生误导,因为 EVM 本身并不生成这些证明;相反,证明是由一个单独的证明机制生成的,该机制以 EVM 执行的结果为起点。此外,这些证明是关于有效性而非隐私的,因此它们不完全是零知识证明。尽管如此,为了保持一致性,我们将在本文中坚持使用传统术语「zkEVM」。
虽然所有 Validity Rollups 都旨在利用有效性证明来扩展以太坊,但它们在选择 VM 来执行链下交易方面有所不同。许多 Validity Rollups 选择复制 EVM 的设计(因此被称为「zkEVM rollups」),试图在 L2 rollup 上复制以太坊。 Starknet 使用一种新的 VM——Cairo VM (CVM)——专门设计用于优化有效性证明效率。
这两种方法各有优缺点,但 zkEVM 以性能换取以太坊兼容性,而 Cairo VM 将性能优先于兼容性,优先考虑扩展能力。
zkEVM 的做法
zkEVM 是一个 Validity Rollup,其目标是将以太坊体验完全引入 Layer-2 区块链。它旨在将以太坊开发人员环境复制为汇总。借助 zkEVM,开发人员在编写智能合约或将智能合约移植到更具可扩展性的解决方案时,无需更改代码或放弃其 EVM 工具(和智能合约)。
这种方法的一个主要缺点是它降低了有效性证明的扩展潜力。由于 zkEVM 致力于与以太坊兼容,因此速度较慢且资源密集度更高。与 CVM 不同,EVM 在设计时并未考虑证明效率。这限制了可以提高效率和可扩展性的优化的使用,最终影响系统的整体性能。
EVM 的可证明性
zkEVM 方法的核心挑战植根于 EVM 的原始蓝图——它并非设计用于在有效性证明上下文中运行。因此,反映其功能的努力无法释放有效性证明的全部潜力,导致效率达不到最佳水平。这种低效率最终会拖累系统的整体性能。 EVM 与有效性证明的兼容性受到以下因素的阻碍:
EVM 采用基于堆栈的模型,而有效性证明更有效地用于基于寄存器的模型。 EVM 基于堆栈的特性使得证明其执行的正确性以及为其本机工具链提供直接支持变得更加困难。
以太坊存储布局严重依赖 Keccak 和大型 Merkle Patricia Tree,这两者都不利于有效性证明并施加大量证明负担。例如,Keccak 对于 x86 架构(我们通常在其上运行 EVM)非常快,但需要 90k 步来证明(内置特殊构建)。而 Pedersen(一种对 zk 友好的哈希函数)需要 32 个步骤。即使使用递归压缩,在 zkEVM 中使用 Keccak 也意味着最终由用户支付的大量证明者资源。
因此,各种 zkEVM 旨在为以太坊工具提供不同级别的支持——zkEVM 与以太坊的兼容性越高,性能就越差。 (有关 zkEVM 类型的更多信息,请跳至文章末尾。)
Cairo-VM 的做法
zkEVM 解决方案投入大量开发时间来「让 EVM 为 Validity Rollups 工作」,将兼容性置于长期性能和可扩展性之上。还有另一种选择:使用全新的专用虚拟机,并在顶部添加对以太坊工具的支持作为附加层。这是 Starknet 所采用的方法,Starknet 是 2021 年 11 月推出的无需许可的 Validity Rollup。Starknet 是第一个在完全可组合的网络上提供通用智能合约平台的 Validity Rollup。
Starknet 使用 Cairo-VM (CVM),这是一种同名的高级语言。 Cairo-VM 是为高效生成程序执行的有效性证明而设计的 VM。
使用 Cairo(虚拟机和语言),我们有:
1. 优化的有效性证明——每条指令都有一个有效的代数表示
2.用于编写可证明程序的 Rust-like 语言
3. 高级 Cairo 和 Cairo 汇编(VM 指令)之间的中间表示(Sierra),允许高效执行 Cairo 代码
开发一种新语言可以让人们根据它要满足的特定需求对其进行定制,并为其配备能够满足以前未满足需求的功能。
Cairo 和编码多元化
为了创建关于某些计算的有效性证明,首先必须将该计算表示为描述该计算的一系列数学约束。由于优化计算以提高效率的挑战以及对专用工具的需求,过程可能非常棘手。
Cairo 语言最初旨在简化此任务,并使其更容易向 StarkEx 添加功能和复杂的业务逻辑。 Cairo 程序被编译成代数机器代码——一个数字序列——由一个固定的 VM 执行。有了 Cairo,生成描述计算的数学约束的整个复杂性——有效性证明的一个棘手问题——被抽象出来并被固定的约束集(总共少于 50 个约束)捕获。因此,开发人员可以利用有效性证明来扩展他们的应用程序,而无需了解底层数学和基础设施,只需使用他们熟悉的语法编写代码即可。
https://twitter.com/EliBenSasson/status/1638270015009968134
Starknet 是关于创新的,这反映在其多元化的代码方法中。Cairo 使用 STARKs 获得最佳扩展的能力不仅限于那些在 Cairo 本地编写合约的人。开发人员可以选择最适合他们的方法:
在 Cairo 本地编写代码:随着 Cairo 1.0 的发布,开发人员现在可以使用符合人体工程学且安全的 Rust 语言,这使得编写程序逻辑变得更加容易且不易出错。
Solidity 兼容性:Solidity 开发人员可以编写可供 Cairo VM 使用的代码。这种方法提供了与以太坊类似的开发人员体验,并使 Solidity 智能合约可移植到 Starknet。有两种方法可以实现这一点:
转译:转译是指将用一种编程语言编写的源代码转换为另一种语言的过程。 Nethermind 团队创建了 Warp 转译器,用于将 Solidity 代码转译到 Cairo。 Warp 使 Solidity 智能合约可移植到 Starknet,有效地使其成为 Type 4 zkEVM。它已经被用于转译和部署 Uniswap 合约,只需进行极小的改动。
Starknet 上的 zkEVM:Cairo VM 可用于证明另一个 VM 的执行。 Kakarot 是一个用 Cairo 编写的 zkEVM,可用于在 Starknet 上运行以太坊智能合约。 Cairo VM 和 zkEVM 不是竞争方法,我们可以同时拥有 Cairo VM 和 zkEVM,而不是在 Cairo VM 和 zkEVM 之间进行选择!
尽管存在时间很短,但 Cairo 是 TVL 排名第四的最受欢迎的智能合约语言,并且已经获得超过 3.5 亿美元的资金。
总结
zkEVM 旨在将以太坊环境复制为 rollup,并允许开发人员使用熟悉的以太坊工具。然而,这种方法抑制了有效性证明的全部潜力,并且可能是资源密集型的。
Cairo VM 专为有效性证明系统而设计,不受 EVM 的限制。它由一种新的、安全且符合人体工程学的 Rust 启发的编程语言支持,称为 Cairo 1.0,形成了一个强大的工具,旨在通过使用 STARK 证明扩展以太坊来获得最大效率。
看到 Cairo 每周取得的成绩,以及开发人员不同选择的增长,如 Kakarot zkEVM 和 Warp,令人兴奋。随着 Starknet dApp 进入生产阶段,展示了 Cairo 的强大功能,我们相信它将在未来用于更雄心勃勃的项目。
由于上面概述的 STARK 扩展的三种途径,以及毫无疑问将在未来几个月内提供的其他途径,开发人员现在对扩展区块链拥有前所未有的控制权。