1. 引言
2023年7月17日zkSync官方twitter Say hello to Boojum宣称在不regenesis的情况下,将zkSync Era迁移至Boojum证明系统。
Boojum为STARK证明系统(Plonk+FRI),开源代码见:
- https://github.com/matter-labs/era-boojum/tree/main(Rust)
其特点为:
- 采用PLONK形式的算术表示:使得ZK电路相对易于开发、审计、维护和升级。
- 采用FRI多项式承诺方案:基于Goldilocks域 p = 2 64 − 2 32 + 1 p=2^{64}-2^{32}+1 p=264−232+1。
- 提供了自动并行化witness generation,且witness generation函数定义简洁,如
|(a, b)| a + b
。witness generation用时在考虑Prover性能时不可忽略。 - 易于扩展:用户可 以多种方式添加自定义门类型,如如增加一些特别的多项式,或复用某些“通用列”。根据自定义电路的扩展接口,可自动化生成prover、verifier、recursive verifier。从而提供高效的开发流程。
- 单一技术栈:以Rust语言来表示。对于GPU prover的重计算部分,采用CUDA C++编写,但提供了Rust bindings。
- 性能卓越,Prover仅要求16GB RAM,从而促进未来Prover的去中心化。
Celer Network的https://github.com/celer-network/zk-benchmark中,专门对SHA256做了benchmark,具体场景为:
- 定义一个电路,用于计算 N = 2 k N=2^k N=2k个字节数据的sha256,其中:
- 一个隐私输入 x x x:其中 len ( x ) = N = 2 k \text{len}(x)=N=2^k len(x)=N=2k
- 一个公开输入: h = sha256 ( x ) h=\text{sha256}(x) h=sha256(x)
func benchmark(x, h):assert(sha256(x) == h)
在测试报告中,对如下方案进行了对比:【本轮测试未启用GPU加速】
- 1)Circom + snarkjs/rapicsnark:
- 2)gnark:
- 3)arkwroks:
- 4)Halo2(KZG):
- 5)Plonky2
- 6)Starky
- 7)Boojum
其中不同方案的参数为:
框架 | 算术表示 | 承诺方案 | 域 | 其它配置 |
---|---|---|---|---|
Circom + snarkjs/rapicsnark | R1CS | Groth16 | BN254 Scalar域 | |
gnark | R1CS | Groth16 | BN254 Scalar域 | |
arkworks | R1CS | Groth16 | BN254 Scalar域 | |
Halo2(KZG) | Plonkish | KZG | BN254 Scalar域 | |
Plonky2 | Plonk | FRI | Goldilocks域 | blowup factor = 8proof of work bits = 16query rounds = 28num_of_wires = 60 num_routed_wires = 60 |
Starky | AIR | FRI | Goldilocks域 | blowup factor = 2proof of work bits = 10query rounds = 90 |
Boojum | Plonk | FRI | Goldilocks域 |
当取N=64KB时,各方案的约束数为:
证明系统 | 约束数(64KB输入的SHA256) |
---|---|
Circom | 3200万 |
gnark | 4500万 |
arkworks | 4300万 |
Halo2 | 400万行(K=22) |
Plonky2 | 800万行(K=23) |
Starky | 2 16 2^{16} 216个transition steps |
Boojum | 50万行(K=19) |
测试机器有2种:
- Linux Server: 20 Cores @2.3 GHz, 384GB memory:模拟具有多CPU核和富裕内存的服务器。
- Macbook M1 Pro: 10 Cores @3.2Ghz, 16GB memory:模拟开发机
对比结果为:
- 1)证明时长对比情况为:
- 2)内存高峰情况对比为:
- 3)CPU使用率对比为:
证明系统 | CPU使用率(平均每核使用率)(Linux服务器) | CPU使用率(平均每核使用率)(Mac开发机) |
---|---|---|
snarkjs | 557% (27.85%) | 486% (48.6%) |
rapidsnark | 1542% (77.1%) | N/A |
gnark | 1624% (81.2%) | 720% (72%) |
arkworks | 935% (46.75%) | 504% (50.4%) |
Halo2(KZG) | 1227% (61.35%) | 588% (58.8%) |
Plonky2 | 892% (44.6%) | 429% (42.9%) |
Starky | 849% (42.45%) | 335% (33.5%) |
参考资料
[1] 2023年7月17日zkSync官方twitter Say hello to Boojum
[2] Boojum Upgrade: zkSync Era’s New High-performance Proof System for Radical Decentralization
[3] Celer Network 2023年7月14日博客The Pantheon of Zero Knowledge Proof Development Frameworks (Updated!)
zkSync系列博客
- zkSync 概览
- zkSync 基本原理
- zkSync 代码解析
- zkSync的ZK Stack:Hyperchains和Hyperbridges