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
 








![Dubbo框架保姆级教学[手把手教会你]](https://img-blog.csdnimg.cn/30d0328d92914460b05924e65c85f3dc.png)










