ZKP编译器对比项目教程
1. 项目介绍
ZKP编译器对比项目(zkp-compiler-shootout)旨在评估和基准测试不同的零知识证明(ZKP)编译策略。该项目目前测试了以下几种零知识证明机器:
- RISC0
- Miden
- Triton
- Plonk
- Halo2
如果你希望你的机器/框架/编译策略被基准测试,可以通过提交PR来实现。项目的结果可以在以下文件中查看:
BENCHMARKS-x86.md
BENCHMARKS-arm64.md
anoma.github.io/zkp-compiler-shootout/
2. 项目快速启动
2.1 环境准备
首先,确保你已经安装了以下依赖:
cargo-risczero
cargo-criterion
criterion-table
你可以通过以下命令安装这些依赖:
cargo install cargo-risczero
cargo install cargo-criterion
cargo install criterion-table
2.2 获取基准测试结果
项目提供了两种命令来生成基准测试结果:
make table arg="desired_backend"
make bench arg="desired_backend"
推荐使用make table
命令,但需要安装上述依赖。确保cargo
包在你的路径中。无论使用哪种方式,结果都可以通过以下命令查看:
make table arg="desired_flags"
make bench arg="desired_flags"
HTML格式的结果将保存在/shootout/target/criterion/reports/index.html
中。如果运行了make table
命令,更新后的基准测试结果将保存在/BENCHMARKS.md
文件中。
2.3 基准测试标志
为了有效服务于开发者和用户验证结果,默认情况下不会启用所有基准测试。以下是一些标志类别:
- 编译器标志
- 测试标志
- 步骤标志
所有步骤标志和测试标志默认启用。如果希望关闭某些功能,可以使用以下命令:
cd shootout
cargo bench --no-default-features --features "all_tests prove_and_verify miden"
3. 应用案例和最佳实践
3.1 应用案例
该项目可以用于评估不同零知识证明编译器的性能,帮助开发者选择最适合其应用场景的编译器。例如,在需要高性能证明生成的场景中,可以通过基准测试结果选择性能最佳的编译器。
3.2 最佳实践
- 选择合适的编译器:根据基准测试结果选择性能最佳的编译器。
- 优化编译器配置:根据项目需求调整编译器标志,以获得最佳性能。
- 定期更新基准测试:随着新版本的发布,定期更新基准测试结果,以确保选择的编译器仍然是最优的。
4. 典型生态项目
4.1 RISC0
RISC0是一个基于RISC-V架构的零知识证明系统,适用于需要高性能证明生成的场景。
4.2 Miden
Miden是一个基于Miden VM的零知识证明系统,适用于需要高度灵活性和可扩展性的场景。
4.3 Triton
Triton是一个基于Triton VM的零知识证明系统,适用于需要高性能和低延迟的场景。
4.4 Plonk
Plonk是一个基于Plonk协议的零知识证明系统,适用于需要高度安全性和隐私保护的场景。
4.5 Halo2
Halo2是一个基于Halo协议的零知识证明系统,适用于需要高度可扩展性和灵活性的场景。