Boojum:zkSync的高性能去中心化STARK证明系统

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=264232+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/rapicsnarkR1CSGroth16BN254 Scalar域
gnarkR1CSGroth16BN254 Scalar域
arkworksR1CSGroth16BN254 Scalar域
Halo2(KZG)PlonkishKZGBN254 Scalar域
Plonky2PlonkFRIGoldilocks域blowup factor = 8proof of work bits = 16query rounds = 28num_of_wires = 60 num_routed_wires = 60
StarkyAIRFRIGoldilocks域blowup factor = 2proof of work bits = 10query rounds = 90
BoojumPlonkFRIGoldilocks域

当取N=64KB时,各方案的约束数为:

证明系统约束数(64KB输入的SHA256)
Circom3200万
gnark4500万
arkworks4300万
Halo2400万行(K=22)
Plonky2800万行(K=23)
Starky 2 16 2^{16} 216个transition steps
Boojum50万行(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开发机)
snarkjs557% (27.85%)486% (48.6%)
rapidsnark1542% (77.1%)N/A
gnark1624% (81.2%)720% (72%)
arkworks935% (46.75%)504% (50.4%)
Halo2(KZG)1227% (61.35%)588% (58.8%)
Plonky2892% (44.6%)429% (42.9%)
Starky849% (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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26332.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫学习笔记(三)————urllib

目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频 3.总结-1 4.请求对象的定制(解决第一种反爬) 5.编解码 (1)get请求方式:urllib.parse.quote() (2)get请求…

微信小程序用户登录及头像昵称设置教程(前后端)

目录 1.背景分析 2.具体需求分析 3.前端设计 3.1 用户登录 3.2 头像昵称填写(个人信息界面) 4.后端设计 4.1项目架构分析 4.2 代码分析 实体类 dao层 service层 controller层 工具类 5.nginx部署 6.效果演示 1.背景分析 众所周知&#x…

拒绝无效内卷|*CTF 2023邀你一起hack for fun!

注意 ⚠️ 2023年07月29日 *CTF 2023携重磅赛题惊喜来袭 请求加入你的假期计划! 7月29日09:00-30日09:00 CTF 2023 再度回归 由复旦大学*****战队倾力打造 赛题一如既往质量与趣味并存 知识量与时效性双高 结合时下最新安全漏洞 专注底层逻辑思考 注重知识点本身 …

四阶龙格-库塔方法matlab程序与误差对比

四阶龙格-库塔方法matlab程序与误差对比 简介参考code四阶龙格-库塔函数微分方程函数主程序 结果分析 简介 本例子函数参考了【1】中的函数,增加了解析方法的函数与四阶龙格-库塔方法对比,并计算了百分比误差,最大误差在0.3%左右。 参考 【…

Codeforces Round 884 (Div. 1 + Div. 2)(视频讲解A--D)

[TOC](Codeforces Round 884 (Div. 1 Div. 2)&#xff08;视频讲解A–D&#xff09;) 视频链接&#xff1a;Codeforces Round 884 (Div. 1 Div. 2)&#xff08;视频讲解A–D&#xff09; A Subtraction Game 1、 板书&#xff1a; 2、代码 #include<bits/stdc.h> #…

奇奇怪怪的知识点-EXCEL(1)

如何用Excel提取想要的数据 参考链接&#xff1a;Excel表格中如何在一串数字中提取几位数字 在日常工作中经常会用到EXCEL表格来进行数据的提取和处理&#xff0c;有时候很长一串数据我们只需要提取指定位数后面的数字&#xff0c;EXCEL中内置了很多丰富的函数可以帮助我们高…

【复盘】记录一次类型不一致导致的Kafka消费异常问题

背景 业务主要是通过A系统向B系统写入Kafka&#xff0c;然后B系统消费Kafka 将结果写到Kafka中&#xff0c;A进行消费最终结果。 在整个流程中&#xff0c;A写入Kafka会写入一张 record1表记录&#xff0c;然后在A消费最终结果的时候也记录一张record2表。主要改动的话 只是B系…

uniapp editor组件 如何上传图片

需求&#xff1a;我们在使用uniapp的editor组件时&#xff0c;主要是为了保持输入内容的格式。里面的文字可以有颜色、粗体、排列样式&#xff0c;可以插入图片。就像下面这样。 一、如何处理图片&#xff0c;好让它在 rich-text组件中显示 &#xff1f; 逻辑&#xff1a;我们…

设计模式详解(一):工厂方法——Factory Method

目录导航 工厂方法及其作用工厂方法的好处工厂方法的实现关系图实现步骤 工厂方法的适用场景工厂方法举例 工厂方法及其作用 工厂方法是一种创建型设计模式。所谓创建型设计模式是说针对创建对象方面的设计模式。在面向对象的编程语言里&#xff0c;我们通过对象间的相互协作&…

STC89C52--实时时钟(DS1302)

目录 一:介绍 1:具体介绍 2:DS1302总结 3:RTC 二:使用说明 1:电路图和内部结构 A:电路图 B:内部结构 C:CE D:时钟/日历(SCLK) E:写保护位 2:命令字节 3:寄存器地址/定义 4:时序图与数据读写 A:单字节写步骤代码&#xff08;Write&#xff09; B: 单字节读步骤代码…

基于jsp+Servlet+mysql的汽车销售系统

基于jspServletmysql的汽车销售系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.首页4.购物车5.添加车辆6、编辑车辆信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于JSPServlet的汽车销售系统 项目架…

WEB:Web_php_unserialize

背景知识 反序列化函数及绕过 正则表达式及绕过 题目 源码解析&#xff08;参考链接在最后&#xff09; <?php class Demo { //定义一个类private $file index.php; //变量属性public function __construct($file) { //类方法$this->file $file; …