简化的 ZK-Rollup 架构
Source:https://immutablex.medium.com/ground-up-guide-zkevm-evm-compatibility-rollups-787b6e88108e
零知识证明的一个简单例子是一个代码自动生成器(用于 CS 作业)。自动生成器是一个 "验证者",给你一堆随机生成的测试代码,而你是一个 "证明者",必须能够通过所有的测试代码来证明你有正确的代码。同时,你不会直接与自动交易器分享你的代码。你看,你刚刚就进行了一次 "零知识证明",你证明了你知道的东西,但你没有说你是怎么知道的。[2]
零知识证明案例,Source:Gradescope
上面的代码自动生成器是使用 "交互式零知识证明"的方式,自动生成器和代码提供者直接 "交互"。相比之下,大多数 zk-Rollups 使用的是数学上更复杂的非交互式证明(如 zk-SNARK,即零知识简洁的非交互式知识证明)。与交互式证明相比,非交互式证明既节省时间又节省空间。虽然 zk-SNARKs 的技术细节超出了本文的范围,但测试代码通过的基本原理是相通的。
zk-Rollups 的圣杯在于零知识以太坊虚拟机 ( zk-EVM ),它允许开发人员在不修改以太坊智能合约的情况下对 DApps 进行转移。但这是存在一定难度的,因为每个"问题"都需要不同的"测试代码",所以开发一个"证明算法"来解决所有可以想象的测试代码的“证明算法”,是零知识证明和 zk-Rollups 的技术瓶颈。
正如 Vitalik所说的:总的来说,我认为在短期内 optimistic rollup可能会在通用的 EVM 计算中胜出,而 ZK Rollup可能会在简单的支付、交易和其他特定应用案例中胜出。但从中长期来看,随着 ZK-SNARK 技术的改进,ZK Rollup将在所有案例中胜出。[3]
因此,从历史上看,zk-Rollups 仅是针对特定应用用例的技术,其中“测试用例”定义明确且范围有限。但是一些项目正在迅速向“山上的城堡”推进,一种通用的 EVM 兼容 zk-Rollup 算法。 [4]
zk-Sync 2.0 是目前在开发 zk-EVM 的众多项目之一(其他项目包括 StarkNet、Polygon Hermez 和 Scroll)。zk-Sync 1.0 要求用户重新构建其代码库的大部分内容,以便从 EVM迁移到 zk-Sync。与 zk-Sync v1.0 不同,在 zk-Sync 2.0 中,程序员可以在几乎没有变化的情况下部署其应用程序。
实际上,并非所有的 zk-EVM 都是等效的。它们在可组合性(与原始 EVM 合约的接近程度)和高性能(zk-Rollups 的运行速度)之间存在着明显的权衡[6]。在这种权衡中,zk-Sync 选择了高性能,从而牺牲了可组合性。
在 Vitalik看来,目前主要有四种不同类型的 zk-EVM,这四种类型如下图所示:
zk-EVMs 的类型,改编自:https://vitalik.ca/general/2022/08/04/zkevm.html
正如 Vitalik所述,在目前的状态下,zk-Sync 2.0 是第4类zk-EVM。与 EVM 不同,zk-Sync 2.0 能够使用自己的编译器编译,可以使用 Solidity 和高级语言编写智能合约。由于 zk-Sync 可以完全控制其编译器的设计,因此他们能够积极优化速度和吞吐量。但这样做的代价是,一些 DApps 和 EVM 调试工具链可能与 zk-Sync 2.0 不兼容。从本质上看,zk-Sync 与 Ethereum 有相同的“汽车外壳”,但换了一个引擎[5]。
事实上,在 zk-Sync 开发者文档中,Matter Labs 声称,虽然智能合约 "读取 "操作可以在不改变代码的情况下集成,但智能合约的 "写入 "操作需要 "附加代码",因为 "Layer1 和 Layer2 之间存在根本差异" [6] 。实际上,这略有误导。与其说是由于 Layer1 和 Layer2 之间的 "根本差异",不如说是由于 Matter Labs 所追求的第4种Rollups。因为 zk-Sync 本质上是使用不同的编译器和字节码,基于第4种的 Rollups 意味着智能合约有不同的地址,但依赖于字节码分析的调试器基础设施可能无法在 zk-Sync 2.0 上运行[7]。
在未来,zk-Sync 可能会加入更多对 EVM 字节码的本地支持,允许系统慢慢过渡到支持更广泛的 "边缘情况 ",也就是指第3类的 Rollups。但是,对于 zk-Sync 的第3类和第4类的 zk-Rollup 来说,与 Polygon Hermez 和 Scroll Labs 的第2类的 Rollups(基本上是以速度换取更广泛的兼容性)相比,必须有两个重要的前提条件才能成功。首先,只有一小部分不重要的项目与 zk-Sync 的自定义编译器不兼容。其次,与第2类zk-EVM 相比,zk-Sync 的执行速度需要有质的区别。
不幸的是,我个人认为这种情况不太可能发生。任何先进的开发生态系统都依赖于成熟 "框架 "的基础设施,包括便捷性、模块化、调试和测试工具。如果像 Vitalik 假设的那样,由于字节码的不同,大部分 EVM 原生调试工具将无法移植到 zk-Sync,那么 zk-Sync 将不得不开发自己的测试和调试工具套件。与 Polygon Hermez 和 Scroll 等可组合性更强的第2类zk-EVM 相比,这是会增加额外的开销,最终可能会影响 zk-Sync 作为 Layer2 解决方案的采纳进度。
点个【 在看 】,你最好看