万神殿 Pantheon:零知识证明开发框架评测平台

使用 SHA-256 对电路框架进行对比测试

我们要感谢 Polygon Zero 团队、Consensys 的 gnark 团队、Pado Labs 以及 Delphinus Lab 团队,感谢他们对性能测试结果的宝贵审查和反馈。

零知识证明开发框架评测平台「万神殿 Pantheon」

过去几个月,我们投入了大量时间和精力,开发了利用 zk-SNARK 简洁证明构建的前沿基础设施。 这个下一代创新平台使开发者能够构建前所未有的区块链应用新范例。

在开发工作中,我们测试并使用了多种零知识证明 (ZKP) 开发框架。 虽然这段旅程收获颇丰,但我们也确实意识到,当新的开发者试图找到最适合其特定用例和性能要求的框架时,多种多样的 ZKP 框架通常会给他们带来挑战。 考虑到这一痛点,我们认为需要一个能够提供全面性能测试结果的社区评估平台,这将极大地促进这些新应用的开发。

为了满足这一需求,我们推出了零知识证明开发框架评测平台「万神殿 Pantheon」 这一公益社区倡议。 倡议的第一步将鼓励社区分享各种 ZKP 框架的可复现性能测试结果。 我们的最终目标是共同协作创建并维护一个广受认可的测试平台,评估低级电路开发框架、高级 zkVM 和编译器,甚至硬件加速提供商。 我们希望这一举措能够让开发者们在选用框架时能有更多性能比较的参考,从而加快 ZKP 的推广。同时,我们希望通过提供一组普遍可参考的性能测试结果,促进 ZKP 框架本身的升级和迭代。 我们将大力投入这项计划,并邀请所有志同道合的社区成员加入我们,共同为这项工作做出贡献!

第一步:使用 SHA-256 对电路框架进行性能测试

在这篇文章中,我们迈出了构建 ZKP Pantheon 的第一步,在一系列低级电路开发框架中使用 SHA-256 提供一组可复现的性能测试结果。 虽然我们承认其他性能测试粒度和原语或许也是可行的,但我们选择 SHA-256 是因为它适用于广泛的 ZKP 用例,包括区块链系统、数字签名、zkDID 等。 另外值得一提的是,我们在自己的系统中也使用了 SHA-256,所以这对我们来说也很方便!😂

我们的性能测试评估了 SHA-256 在各种 zk-SNARK 和 zk-STARK 电路开发框架上的性能。 通过比较,我们力求为开发者提供关于每个框架的效率和实用性的见解。 我们的目标是,希望本次性能测试结果能够为开发者在选择最佳框架时提供参考,使之做出明智的决定。

证明系统

近年来,我们观察到零知识证明系统激增。 跟上该领域所有激动人心的进步是具有挑战性的,我们根据成熟度和开发者采用情况精心挑选了以下证明系统作为测试对象。 我们的目标是提供不同前端/后端组合的代表性样本。

  1. Circom + snarkjs / rapidsnark: Circom 是一种流行的 DSL,用于编写电路和生成 R1CS 约束,而 snarkjs 能够为 Circom 生成 Groth16 或 Plonk 证明。 Rapidsnark 也是 Circom 的证明器,它生成 Groth16 证明,并且由于使用了 ADX 扩展,它通常比 snarkjs 快得多,并尽可能并行化证明生成。
  2. gnark:gnark 是来自 Consensys 的综合 Golang 框架,支持 Groth16、Plonk 和许多更高级的功能。
  3. Arkworks: Arkworks 是一个用于 zk-SNARKs 的综合 Rust 框架。
  4. Halo2 (KZG): Halo2 是 Zcash 与 Plonk 的 zk-SNARK 实现。 它配备了高度灵活的 Plonkish 算术,支持许多有用的原语,例如自定义网关和查找表。 我们使用具有以太坊基金会和 Scroll 支持的 KZG 的 Halo2 分叉。
  5. Plonky2: Plonky2 是基于来自 Polygon Zero 的 PLONK 和 FRI 技术的 SNARK 实现。 Plonky2 使用小的 Goldilocks 字段并支持高效的递归。 在我们的性能测试中,我们以 100 位推测的安全性为目标,并使用为性能测试工作产生最佳证明时间的参数。 具体来说,我们使用了 28 Merkle 查询、8 的放大系数和 16 位工作量证明挑战。 此外,我们设置 num_of_wires = 60 和 num_routed_wires = 60。
  6. Starky: Starky 是 Polygon Zero 的高性能 STARK 框架。 在我们的性能测试中,我们以 100 位推测的安全性为目标,并使用产生最佳证明时间的参数。 具体来说,我们使用了 90 Merkle 查询、2 倍放大系数和 10 位工作量证明挑战。

下表总结了上述框架以及我们性能测试中使用的相关配置。 这个列表绝不是详尽的,我们还将在未来研究许多最先进的框架/技术(例如,Nova、GKR、Hyperplonk)。

请注意,这些性能测试结果仅适用于电路开发框架。 我们计划在未来发布一篇单独的文章,对不同的 zkVM(例如,Scroll、Polygon zkEVM、Consensys zkEVM、zkSync、Risc Zero、zkWasm)和 IR 编译器框架(例如,Noir、zkLLVM)进行性能测试。

性能评测方法论

为了对这些不同的证明系统进行性能测试,我们计算了 N 字节数据的 SHA-256 哈希值,其中我们对 N = 64、128、…、64K 进行了实验(Starky 是一个例外,其中电路重复 SHA-256 固定 64 字节输入的计算,但保持相同的消息块总数)。 可以在此存储库中找到性能代码和 SHA-256 电路配置。

此外,我们使用以下性能指标对每个系统进行了性能测试:

请注意,我们正在对证明大小和证明验证成本做一些“随意”的假设,因为这些方面可以通过在上链之前与 Groth16 或 KZG 组合来减轻。

机器

我们在两台不同的机器上进行了性能测试:

Linux 服务器用于模拟 CPU 核数多、内存充裕的场景。 而通常用于研发的 Macbook M1 Pro 拥有更强大的 CPU,但内核较少。

我们启用了可选的多线程,但我们没有在此性能测试中使用 GPU 加速。 我们计划在未来进行GPU 性能测试。

性能评测结果

约束数量

在我们继续讨论详细的性能测试结果之前,首先通过查看每个证明系统中的约束数量来了解 SHA-256 的复杂性是很有用的。 重要的是要注意不能直接比较不同算术方案中的约束数量。

下面的结果对应 64KB 的原像尺寸。 虽然结果可能因其他原像尺寸而异,但它们可以粗略地线性缩放。

证明生成时间

[图 1] 使用 Linux 服务器测试了 SHA-256 的每个框架在各种原图像尺寸上的证明生成时间。 我们可以得到以下发现:

我们还在 Macbook M1 Pro 上进行了证明生成时间性能测试,如 [图 2] 所示。 但是,需要注意的是,由于缺乏对 arm64 架构的支持,rapidsnark 未包含在该性能测试中。 为了在 arm64 上使用 snarkjs,我们必须使用 webassembly 生成见证,这比 Linux 服务器上使用的 C++ 见证生成要慢。

在 Macbook M1 Pro 上运行性能测试时还有几个额外的观察结果:

内存使用峰值

[图 3] 和 [图 4] 分别显示了在 Linux Server 和 Macbook M1 Pro 上生成证明期间的内存使用峰值。 根据这些性能测试结果可以得出以下观察结果:

CPU 利用率

我们通过测量 SHA-256 在 4KB 原像输入的证明生成期间的平均 CPU 利用率来评估每个证明系统的并行化程度。下表显示了 Linux Server(20 核)和 Macbook M1 Pro(10 核)上的平均 CPU 利用率(括号中为每个内核的平均利用率 ) 。

主要观察结果如下:

结论及未来研究

这篇文章全面比较了 SHA-256 在各种 zk-SNARK 和 zk-STARK 开发框架上的性能测试结果。 通过比较,我们深入了解了每种框架的效率和实用性,以期可以帮助需要为SHA-256 操作生成简洁证明的开发者。 我们发现 Groth16 框架(例如 rapidsnark、gnark)在生成证明方面比 Plonk 框架(例如 Halo2、Plonky2)更快。 Plonkish 算术化中的查找表在使用较大的原像尺寸时显着减少了 SHA-256 的约束和证明时间。 此外,gnark 和 rapidsnark 展示了利用多核以并行化运作的出色能力。 另一方面,Starky 的证明生成时间要短得多,但代价是证明大小要大得多。 在内存效率方面,rapidsnark 和 Starky 优于其他框架。

作为构建零知识证明评测平台 「万神殿 Pantheon」 的第一步,我们承认本次性能测试结果远不足以成为最终我们希望构建的一个综合测试平台。 我们欢迎并乐于接受反馈和批评,并邀请所有人为这项倡议做出贡献,以便开发者更容易、低门槛地使用零知识证明。 我们也愿意为个人独立贡献者提供资助,以支付大规模性能测试的计算资源成本。 我们希望可以共同提高 ZKP 的效率和实用性,更为广泛地造福社区。

Celer Network 简介

Celer 是一种区块链互操作性协议,旨在针对资产、DeFi、GameFi、NFT、治理、隐私等跨链解决方案提供一键式用户体验。利用 Celer 跨链消息 SDK ,开发者构建的跨链原生 dApp 将具有高效的流动性利用率,连贯的应用逻辑、共享的状态。用户使用 Celer 支持的 dApp,即可在单一链上进行一键式跨链,并从多元化的多链生态中受益。

%d 博主赞过: