作者:miles 来源:X,@Miles082510
测试对象
SP1 是一个高性能的开源 zkVM,用于验证任意 Rust(或任何 LLVM 编译的语言)程序的执行。SP1 利用 Plonky3,支持递归证明并支持各种加密算法,包括基于 ECC 的算法,如 Groth16。
RISC0 zkVM 允许证明任意 Rust 代码的正确执行。它基于 RISC-V 架构构建,本质上适用于实现标准加密哈希函数,例如 SHA-256 和 ECDSA。RISC0 采用 STARK,提供 98 位的安全级别。由于它与 LLVM 和 WASM 兼容,它支持多种编程语言,包括 C 和 Rust。
Nexus 是一个用 Rust 编写的模块化、可扩展、开源、高度并行化、验证者优化且对贡献者友好的 zkVM。它侧重于性能和安全性,使用 Nova 折叠方案,该方案对递归证明特别有效。Nexus 还支持预编译和定向编译,除了 Rust 之外,它还提供 C++ 支持。
ZkMIPS 是基于 Plonky2 和 MIPS 微架构的通用可验证计算基础设施,旨在赋能以太坊作为全球结算层。它也可以运行任意 Rust 代码。值得注意的是,zkMIPS 是此列表中唯一使用 MIPS 操作码集的 zkVM。
ZkWASM 遵循并支持未经修改的标准 WASM 字节码规范。由于 Rust 代码可以编译为 WASM 字节码,因此理论上可以在 zkWASM 机器上运行任何 Rust 代码,从而提供灵活性和广泛的语言支持。
Valida 是一个基于 STARK 的虚拟机,具有受 RISC 启发的指令集,简化了传统编程语言的目标。正在开发一个后端编译器,用于将 LLVM IR 编译为 Valida ISA,从而能够验证用 Rust、Go、C++ 和其他语言编写的程序,而源代码的更改几乎为零。
测试项目
Stage 1: 算术运算(Hept 100)第一阶段的重点是评估 zkVMs 处理基本算术运算的能力:加法、减法、乘法、除法、模除和平方根计算。我们围绕Heptagonal numbers (七边形数)设计了测试,这需要 zkVMs 同时处理多个算术运算
Stage 2: 内存消耗(Vec 10000)第二阶段评估了每个 zkVM 在重负载下管理内存的能力,此阶段的目的是识别任何内存瓶颈,并确定 zkVM 是否可以有效地管理高强度任务,测试了几种数据结构,包括列表、哈希映射、双端队列、队列、BTreeMaps、哈希集和二进制堆。每个 zkVM 都经过以下操作测试:
Insert:zkVM 向结构添加数据的速度有多快?
Delete:zkVM 是否能有效处理内存释放?
Append:zkVM 能否有效地增长数据结构?
Research:zkVM 在检索存储数据时的速度和效率如何?
测试机器配置
CPU: AMD EPYC 7713 "Milan" 64-core processor (128 threads total)
RAM: 600GiB DDR4 3200MHz ECC RAM, distributed across 16 DIMMs
Host OS: Proxmox 8.3
Hypervisor: KVM
Network layer: Open vSwitch
Machine model: Supermicro AS-2024US-TRT
测试结果
算术运算(Hept 100)结果:
阶段1测试结果
2.内存消耗(Vec 10000)
阶段2测试结果
总结
RISC0 成为首选。它在证明生成时间和大小方面都表现出色,同时保持合理的内存占用。凭借强大的零知识证明能力和对多种编程语言的支持,它符合隐私、性能和灵活性的需求。它在性能和效率之间的整体平衡使其成为现阶段最可行的 zkVM。
Valida 在证明生成速度和大小方面取得了令人印象深刻的结果,证明大小为 280 KB,证明时间为 < 1 秒。但是,由于 Valida 的 Rust 支持有限,因此无法进行分析。Valida 目前使用 LLVM 后端编译 Rust,转译 LLVM IR 以利用其 C/C++ 实现,这会导致在处理特定于 Rust 的数据结构或依赖项时出错。因此,无法测试复杂的内存交互,并且目前不建议将 Valida 与 Rust 代码一起使用
SP1 虽然最初很有趣,但未能满足零知识证明要求。它在算术运算中的表现值得称赞,但鉴于它缺乏 ZK 功能,不足以证明进一步考虑的合理性
Nexus 展示了一致的证明大小和可管理的内存使用情况,但其在内存密集型任务期间表现不佳,而且其证明大小(尤其是对于较大的工作负载)使其失去了成为顶级竞争者的资格。
zkMIPS 提供了可靠的证明时间,但内存问题太严重了,不容
zkWASM 的结果最差,在证明大小和生成时间方面都苦苦挣扎。尽管它可能支持 WASM 字节码,但RAM 消耗(在内存测试中高达 57 GB)过多