「zkEVM 战争」升温,一文全面对比Polygon zkEVM与zkSync Era
原文标题:《A comparison of zkEVMs》
原文作者:Daniel Lubarov
原文编译:Kxp,BlockBeats
随着「zkEVM 战争」的升温,公众讨论了许多关于不同 zkEVM 的优点。但也存在一些错误的信息,因此我们想澄清一些关于 Polygon zkEVM 以及它与其他项目的比较的事实。
作为 Polygon 的一名员工,我有偏见,但我会尽力保持比较公正。我主要关注 Polygon 的 zkEVM 和 zkSync Era,因为它们已经投入生产使用,并且我不太了解其他 zkEVM 项目。
zkSync 的 zkEVM 和证明器由 100 k 多行代码组成。我尽力提供准确的摘要,如果有任何不准确之处,请告诉我,我会进行更正。
Polygon zkEVM 直接执行 EVM 字节码。根据 Vitalik 的分类,它是一种类型 3 的 zkEVM。很快它将成为类型 2 ;目前我们缺少四个预编译。Scroll 也在努力向类型 2 zkEVM 发展。
相比之下,zkSync Era 使用不同的字节码格式,通过提供编译器来支持 Solidity。这使它成为一种类型 4 的 zkEVM:它支持 Solidity,但不支持 EVM 字节码本身。例如 Hardhat 这样的工具不能直接使用,尽管可以使用 zkSync 的插件。
zkSync 认为他们的 zkVM 更加具有未来性,即它可以更好地与 Solidity 以外的语言配合使用。但是,他们的 VM 似乎继承了 EVM 的许多性能特征,例如其 256 位字大小。像 Miden 这样的 zkVM 可能更具有未来性,因为它是为通用计算而设计的,而不是专注于 Solidity。
经过研究多个替代方案,我们选择了所谓的 Goldilocks field,一个二阶巨大素数域 2 ^ 64 - 2 ^ 32 1 。它的小尺寸和美丽的二进制结构导致了极快的域操作,乘法仅需在现代 CPU 上花费不到两个周期。
zkSync 采用了更传统的方法,使用基于 alt-bn 128 曲线的 SNARK。基础域的大小约为 254 位,域乘法在 CPU 上需要大约 80 个周期。
为了感受到这种巨大差异的影响,我们可以看看 Celer 的 SHA 2 基准测试。在那里,我们的 STARK 证明器比基于椭圆曲线的证明器快了 5-50 倍。
alt-bn 128 的优点在于 EVM 原生支持它,因此向 Ethereum 提交证明更简单。在 Polygon,我们将最终的聚合证明用 alt-bn 128 的 fflonk 证明「包裹」起来。虽然我们的方法需要更多的工作,但我们认为这对于不可思议的性能增益来说是值得的。
区别不止于此。我们的 zkEVM 基于 STARKs 构建,但具有现代化的变化。我们有一个主 STARK 用于 CPU(每个周期有一行),还有其他用于算术、哈希等的 STARK。这些表格可以连接,就像我们在 RapidUp 中描述的那样。这类似于物理 CPU,它们经常有协处理器来加速渲染、Crypto 或 ML 推断等密集操作。
以 Keccak 为例。由于它在 EVM 应用中被广泛使用,我们设计了一个专门的 STARK 用于它,使用了一些我们在这里记录的新技巧。设计这样的定制算术化需要大量的工作,但它带来了回报,使我们能够每秒证明数百个 Keccak 排列。
zkSync 采用了我称之为更传统的方法。他们使用基于 PLONK 的证明器,尽管它支持自定义门,但他们的 zkEVM 并没有多少使用;大多数计算都是使用一个名为 SelectorOptimizedWidth 4 MainGateWithDNext 的通用门进行的。它似乎比 vanilla PLONK 门稍微强大一些,但仍然局限于像 mul-adds 这样的简单操作。
值得赞扬的是,zkSync 使用了查找参数(像我们一样),这是一种更现代的技术,可以帮助提高像 Keccak 这样的效率。但是,没有自定义算术化, 256 位数学、Keccak 等等的效率都会大打折扣。
Polygon zkEVM 将所有交易数据发布到 L1。在 Twitter 上存在一些关于此的混淆,有关此的 Gas 费用请参见 Edu 的文章。目前,平均交易大小约为 120 字节,因此每笔交易的 Gas 费用约为 120* 16=1920 Gas。
zkSync 则发布状态差异。恶意的序列化器可能会隐瞒交易数据,但 zkSync 认为拥有当前状态的 trie 足以确保安全。这似乎存在争议,因为通常预期交易数据是可用的,并且某些应用程序依赖于此。
查看经过更正的数据后,我们可以发现我们的 zkEVM 和 zkSync 的每笔交易 Gas 费用基本相同。这些数字可能会随着每个链上发生的交易类型的混合而随时间变化,但截至今日,状态差异并没有节省任何 Gas 费用;两个系统都向 L1 发送大约 120 字节的每笔交易数据。
我们计划在这里进行一些优化,但不使用状态差异。交易本身可以进行压缩,降低 Gas 费用,同时仍能保证交易数据的可用性。敬请期待!