zkVM 测试报告
- 原文链接:vac.dev/rlog...
- 译者:AI翻译官,校对:翻译小组
- 本文链接:learnblockchain.cn/article…
在我们之前的博客文章中对 zkVM 的初步探索之后 [1],我们进行了系列测试,以确定最适合 Nescience 架构的 zkVM [2]。本文概述了测试过程、结果和结论。此外,完整的测试套件和脚本可以在我们的 GitHub 页面上找到 [3],以便其他人复制结果或进一步探索候选者。请注意,我们选择不在基准测试中使用硬件加速,因为我们的项目面向广泛的受众。特别是,我们不能默认假设支持 AVX512,因为它通常仅在高端 CPU 中可用。
我们已将以下 zkVM 列入测试名单:
在缩小 zkVM 的范围时,我们关注了几个关键因素:
我们需要一个支持这些功能的 zkVM,以便进行强大的项目开发。
SP1 是一个高性能的开源 zkVM,能够验证任意 Rust(或任何 LLVM 编译语言)程序的执行。SP1 利用 Plonky3,支持递归证明,并支持包括基于 ECC 的算法(如 Groth16)在内的广泛加密算法。虽然它支持聚合,但似乎不以传统方式支持零知识。
RISC0 zkVM 允许证明任意 Rust 代码的正确执行。基于 RISC-V 架构,它本质上适用于实现标准加密哈希函数,如 SHA-256 和 ECDSA。RISC0 采用 STARKs,提供 98 位的安全级别。它支持多种编程语言,包括 C 和 Rust,得益于其与 LLVM 和 WASM 的兼容性。
Nexus 是一个模块化、可扩展的开源 zkVM,具有高度并行化、优化的证明者和友好的贡献者,使用 Rust 编写。它专注于性能和安全性,采用 Nova 折叠方案,特别适合递归证明。Nexus 还支持预编译和定向编译,除了 Rust 外,还提供 C++ 支持。
ZkMIPS 是一个基于 Plonky2 和 MIPS 微架构的通用可验证计算基础设施,旨在增强以太坊作为全球结算层的能力。它也可以运行任意 Rust 代码。值得注意的是,zkMIPS 是此列表中唯一使用 MIPS 操作码集的 zkVM。
ZkWASM 遵循并支持未修改的标准 WASM 字节码规范。由于 Rust 代码可以编译为 WASM 字节码,因此理论上可以在 zkWASM 机器上运行任何 Rust 代码,提供灵活性和广泛的语言支持。
Valida 是一个基于 STARK 的虚拟机,旨在在多个类别中改进现有技术:
Valida 似乎处于开发的早期阶段,但已经展示了可观的性能指标。
为了全面评估每个 zkVM,我们设计了一个两阶段的测试过程:
阶段 1:算术运算
第一阶段专注于评估 zkVM 处理基本算术运算的能力:加法、减法、乘法、除法、模除和平方根计算。我们围绕七边形数设计了测试,这要求 zkVM 同时处理多个算术运算。通过这种方法,我们可以测量处理复杂数学计算的效率和速度,这是 zkVM 性能的关键要素。
阶段 2:内存消耗
在第二阶段,我们评估了每个 zkVM 在重负载下管理内存的能力。我们测试了几种数据结构,包括列表、哈希映射、双端队列、队列、BTreeMaps、哈希集合和二叉堆。每个 zkVM 都经历了以下操作的测试:
这一阶段的目的是识别任何内存瓶颈,并确定 zkVM 是否能够高效地管理高强度任务,这对 Nescience 项目的复杂数据密集型过程至关重要。
测试在以下硬件配置上进行:
SP1 在其证明中不提供零知识能力,但提供了可观的性能,尽管略逊于其主要竞争对手。内存泄漏很少,保持在 700 KB 以下。有趣的是,SP1 在基本算术测试中消耗的 RAM 比在内存分配测试中更多,展示了团队在负载下有效处理内存的能力。在基本测试中,分配主要集中在 9-16 B、33-64 B 和 65-128 B 范围内。对于内存分配,大多数落在 129-256 B 范围内。
RISC0 在证明大小和生成时间方面表现出色,排名靠前(除了 Valida 和 zkWASM 的基本测试)。它的内存管理也很好,轻微泄漏低于 0.5 MB,受控的 RAM 消耗保持在 2.2 GB 以下。RISC0 的内存分配一致,主要集中在 17-32 B 和 33-64 B 范围内。
根据这些结果,RISC0 是 Nescience 的一个可靠候选者。
Nexus 的性能为基于折叠方案的 zkVM 提供了有趣的见解。令人惊讶的是,证明大小在不同工作负载下保持一致,没有显著的内存泄漏(低于 700 KB)。然而,尽管 RAM 消耗在更高工作负载下略有增加(最高达到 1.2 GB),Nexus 在内存分配测试中的表现不佳,使其不适合我们的用例。
分配细节:
阶段 1:Hept 100 测试
ZkMIPS 提供了一个有趣的案例。虽然它在基本测试中在证明大小和生成时间方面表现良好,但这以显著的 RAM 使用和内存泄漏为代价。内存分配测试显示出令人担忧的 6.7 GB 内存泄漏,在基本测试中泄漏了 0.5 GB。尽管如此,RAM 消耗(虽然高达 17+ GB)在更高工作负载下保持稳定。分配大小分布在多个范围内,17-32 B、65-128 B 和 257-512 B 段的集中度显著。
这个 zkVM 提供了混合结果,证明生成强大但内存管理问题令人担忧。
不幸的是,ZkWASM 在两个阶段的证明大小和生成时间方面表现不佳。RAM 消耗特别高,在基本测试中超过 7 GB,在内存分配测试中高达 57 GB。尽管其内存使用量令人印象深刻,但证明大小分别为 18 KB 和 334 KB,仍然相对较大。分配大小主要集中在 33-64 B 范围内,邻近的Slot也贡献了一些小但显著的数量。
Valida 在证明生成速度和大小方面表现出色,证明大小为 280 KB,证明时间小于 1 秒。然而,由于 Valida 对 Rust 的支持有限,无法进行性能分析。Valida 目前使用 LLVM 后端编译 Rust,将 LLVM IR 转换为其 C/C++ 实现,这在处理 Rust 特有的数据结构或依赖项时会导致错误。因此,复杂的内存交互无法进行测试,目前不建议将 Valida 与 Rust 代码一起使用。为此已在 GitHub 上开设了一个问题。
zkVM | 证明时间 | 证明大小 | 峰值 RAM 消耗 | 内存泄漏 |
---|---|---|---|---|
SP1 | 16.95 s | 3.108 MB | 2.1 GB | 656.8 KB |
RISC0 | 9.73 s | 217.4 KB | 1.9 GB | 470.5 KB |
Nexus | 12.06 s | 46 MB | 9.7 MB | 646.5 KB |
ZkMIPS | 9.32 s | 4.3 MB | 17.3 GB | 453.8 MB |
ZkWASM | 42.7 s | 18 KB | 8.2 GB | 259.4 KB |
Valida | < 1 s | 280 KB | N/A | N/A |
zkVM | 证明时间 | 证明大小 | 峰值 RAM 消耗 | 内存泄漏 |
---|---|---|---|---|
SP1 | 20.85 s | 3.17 MB | 1.9 GB | 616 KB |
RISC0 | 16.63 s | 217.4 KB | 2.3 GB | 485.3 KB |
Nexus | 56 m | 46 MB | 1.9 GB | 616 KB |
ZkMIPS | 42.57 s | 4.898 MB | 18.9 GB | 6.9 GB |
ZkWASM | 323 s | 334 KB | 58.8 GB | 259.4 KB |
Valida | N/A | N/A | N/A | N/A |
在对六个 zkVM 候选者进行广泛评估后,RISC0 成为最佳选择。它在证明生成时间和大小方面表现出色,同时保持合理的内存占用。凭借强大的零知识证明能力和对多种编程语言的支持,它很好地满足了我们在隐私、性能和灵活性方面的项目需求。其在性能和效率之间的整体平衡使其在此阶段成为最可行的 zkVM。
Valida 尽管在高证明性能方面具有潜力,但仍处于早期开发阶段,并且存在 Rust 集成问题。目前的 LLVM IR 转换限制意味着它无法处理复杂的内存交互,因此暂时不合格。然而,一旦其开发成熟,Valida 可能成为一个强有力的替代方案,我们计划在其发展过程中重新审视它。
SP1 尽管最初引人关注,但未能满足零知识证明的要求。它在算术运算方面的表现令人满意,但由于缺乏 ZK 功能,无法进一步考虑,这对我们的隐私优先目标至关重要。
Nexus 展现了一致的证明大小和可管理的内存使用,但在内存密集型任务中的表现平平,以及其证明大小(尤其是对于较大工作负载)使其不再是顶级竞争者。虽然 zkMIPS 提供了可靠的证明时间,但内存问题过于严重,无法忽视,使其不适合。
最后,zkWASM 的结果最差,在证明大小和生成时间上都表现不佳。尽管它在 WASM 字节码支持方面具有潜力,但过高的 RAM 消耗(在内存测试中高达 57 GB)使其在 Nescience 的用例中不切实际。
总之,RISC0 在此阶段是 Nescience 的最佳选择,但 Valida 仍然是未来的候选者,随着其开发进展。
未来,我们计划将 RISC0 和 SP1 与 CUDA 加速进行比较。理想情况下,到那时,更多的 zkVM 将包括类似的加速能力,从而实现跨平台的更公平和全面的比较。
我们希望听到你对我们的 zkVM 测试过程和结果的看法!你是否同意我们的结论,还是认为我们错过了一个有前景的 zkVM?我们始终欢迎社区的反馈、见解和建议。
加入讨论并分享你对 我们论坛 的看法,或通过我们的 GitHub 页面 自行尝试测试!
[1] 探索 zkVM:哪些项目真正符合零知识虚拟机的标准?来源于 https://learnblockchain.cn/article/9668
[2] Nescience:以用户为中心的状态分离架构。来源于 https://vac.dev/rlog/Nescience-state-separation-architecture
[3] 我们的 GitHub 页面用于 zkVM 测试。来源于 https://github.com/vacp2p/nescience-zkvm-testing
[4] 介绍 SP1:一个高性能、100% 开源、友好的贡献者 zkVM。来源于 https://blog.succinct.xyz/introducing-sp1/
[5] 第一个通用 zkVM。来源于 https://www.risczero.com/zkvm
[6] Nexus 2.0 zkVM。来源于 https://docs.nexus.xyz/
[7] ZKM 架构。来源于 https://docs.zkm.io/zkm-architecture
[8] ZK-WASM。来源于 https://delphinuslab.com/zk-wasm/
[9] Valida zkVM 设计。来源于 https://delendum.xyz/writings/2023-05-10-zkvm-design.html
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!