1. 引言

目标:

  • RU:Rollup
  • VP:Validity Proof

zkevm的一些定制化设计考虑:

  • Implement Linearization
  • BLS12 Integration for KZG
  • Implement Z(X) Based Multiopen Strategy for KZG
  • EVM Compatible Transcript
  • EVM Verifier
  • FRI Integration
  • KZG Integration
  • Implement Semi-Recursive System
  • Public Inputs

2. Implement Linearization

目标:RU,VP

当前在halo2中并未实现linearization技术。因此需要将所有even fixed column evaluations发送给Prover。为了减小proof size,同时减少Verifier group operations,有2种解决办法:

  • 在circuit finalized之后customize prover
  • 实现适于所有circuit的auto linearisation

3. BLS12 Integration for KZG

目标:RU,VP

For RU:在EVM中将最终支持BLS12,从而有可能拥有比BN256更便宜的group and pairing operations,但是目前仍然使用的是BN256。

4. Implement Z(X) Based Multiopen Strategy for KZG

目标:RU, VP

For RU:对于BN setting,应尽量避免G2 operations,因此Plonk论文中的batch opening技术可能是最优的。但是,在验证G2 operations时,有一个很酷的trick——使用pairing and G1 add and mul precompiles。
因此,应平衡增加few pairing terms and g1 operations to use Z(X) and multiopening without G2 operations。

相关参考资料有:

  • https://hackmd.io/@tompocock/shplonk
  • https://zcash.github.io/halo2/design/proving-system/multipoint-opening.html

5. EVM Compatible Transcript

目标:RU

  • 目前halo2中仅有blake2,需增加keccak256和sha256
  • 为了避免在EVM中昂贵的point decompression操作,需增加uncompressed point read/write。

6. EVM Verifier

目标:RU
在对state circuits和execution circuits完成固化后,需在KZG和BN254 setup的情况下实现EVM verifier。因此需要在halo2现有通用verifier的基础上,增加一个专用verifier。

7. FRI Integration

目标:VP

8. KZG Integration

目标:VP, RU

在halo2库中增加支持BN256 curve的KZG multiopen:
详细参看:

  • https://github.com/kilic/halo2/tree/kzg

该分支需merge到halo2库中最新更新。

9. Implement Semi-Recursive System

目标:VP, RU
所谓semi-recursive是指:
定义a system where we verify some part of proof in a circuit and defer pairing out of the circuit to L1 for example。aztec在其proof system做了相应实现。

在Hermez中介绍了Stark verifier:

  • https://youtu.be/17d5DG6L2nw?t=1764

若可实现semi-recursive system,可重新考虑Z(X) Based Multiopen Strategy for RU since G2 ops are moved to the circuit。

10. Public Inputs

如何给Verifier端传输public inputs。目前有2种方式:

  • 方法一:与halo2库类似。该方法是efficient in recursion context (I think only for two layer) to avoid hashing many things in the circuit。
    Prover:发送evaluations of public input polynomial。
    Verifier:
    1)commits to public input polynomial
    2)adds commitment to the transcript and squeeze the evaluation point
    3)checks circuit equation with public input evaluations
    4)checks the opening public input polynomial

  • 方法二:更接近于plonk论文中的实现。若想在Verifier段避免group operations,该方法很有效。
    详细可看halo2库中的experimental PR 以及 如何借助halo2工具来计算public input evals。
    Prover:sends nothing about public inputs
    Verifier:
    1)adds public input values to the transcript and squeeze the evaluation point.
    2)calculates public input evaluations
    3)checks circuit equation with public input evaluations

参考资料

[1] https://hackmd.io/@liangcc/zkvmbook/%2FCUWxTKjwS1OKm-ZPIOa76w

appliedzkp的zkevm(7)定制化Proof System相关推荐

  1. HyperPlonk——实现zkEVM的一种zk-proof system

    1. 引言 Espresso Systems团队Binyin Chen等人2022年论文<HyperPlonk: Plonk with Linear-Time Prover and High-D ...

  2. 面向隐私AI的TensorFlow深度定制化实践

    作者 | Rosetta团队 出品 | AI科技大本营(ID:rgznai100) 之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案.在这一篇文章中,我们进一步结合 ...

  3. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  4. 【JUC并发编程04】线程间定制化通信(单标志法存在的问题)

    文章目录 4 线程间定制化通信 案例实现 该案例需要注意 4 线程间定制化通信 案例实现 案列:启动三个线程,按照如下要求: AA打印5此,BB打印10次,CC打印15次,一共进行10轮 具体思路: ...

  5. python插件化设计_Python打造出适合自己的定制化EclipseIDE

    Eclipse是一套强大的框架,其能够通过内置插件机制实现多种扩展方式.然而要想添加一小点额外功能,大家都不可避免地需要面临新插件的编写与部署工作,这显然有点令人头痛.现在在EASE的帮助下,我们能够 ...

  6. 【Android】时钟动态图标的定制化

    ​ 活动地址:CSDN21天学习挑战赛 1.概述 在定制化10.0的项目开发中,在Launcher3的app列表页,有时钟app的图标,由于图标是静态的开发的需要要求调成动态图标,时刻显示时间,所以要 ...

  7. Unbuntu18.04系统定制化制作与再生龙镜像生成

    文章目录 目录 一.Unbuntu18.04系统定制化制作 二.再生龙镜像生成 一.Unbuntu18.04系统定制化制作 1)刻录原生版ubuntu18.04系统到U盘 由UltraISO在wind ...

  8. CentOS7光盘定制化

    CentOS7-1511光盘定制化制作: 部分专业词汇释义: 包组:一个功能块往往由多个rpm安装包才能完成安装,此时所有此功能必备的安装包称之为一个包组. isolinux.bin:是光盘引导程序, ...

  9. [Spring Boot] 2. Spring Boot 启动过程定制化

    在上一篇文章中,从源码角度介绍了Spring Boot的启动过程.启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面: 初始化器(Initial ...

  10. SystemUI(一)基于Android9.0SystemUI的启动与定制化

    众所周知SystemUI包含基本的StatusBar.VolumeBar.NavigationBar等部分,在手机开机时就已经为我们加载好,但是有时候会出现对StatusBar,DropList等进行 ...

最新文章

  1. 分布式训练使用手册-paddle 数据并行
  2. python画树叶-Python_Turtle库画一只派大星
  3. (四)Kinect人脸识别
  4. Objective-C ---JSON 解析 和 KVC
  5. Visio怎么删掉已有部分图形
  6. 数据结构与算法python—5.队列及python实现与leetcode总结
  7. 【汽车电子】嵌入式软件开发常用工具
  8. 最新的物联网10大深度技术,主要包括哪些技术?
  9. storm和vgj vgj_风暴很忙:VGJ.Storm新阵容亮相DAC预选赛
  10. [33期] 穿越地平线的渴望
  11. OSChina 周五乱弹 ——电影里有在线/离线,递归,循环,矩阵等概念?
  12. 调用tel://打电话
  13. Java实现牛牛的水杯
  14. 哪款蓝牙耳机品质好?音质好的四款蓝牙耳机测评
  15. 有趣的海盗分金币问题
  16. jdom操作xml实战
  17. shell if -z -f
  18. hihocoder王胖浩与三角形【海伦公式+分类讨论】
  19. 实现数组扁平化的几种方式
  20. 【Proteus仿真】51单片机在线版电子锁案例

热门文章

  1. iCloud照片无法上传或同步怎么办?
  2. android类似iphone照片幻灯片,8个最佳照片编辑应用让你的Android或iPhone照片看起来不可思议...
  3. 在ArrayLIst和LinkedList尾部加元素,谁的效率高
  4. [办公自动化]名师推荐-excelpro刘万祥 图表之道作者
  5. 如何管理和控制一个成长型的公司?
  6. Pyecharts 猎聘招聘数据可视化
  7. leetcode-412 -Fizz Buzz-(fizz bzz)-java
  8. 谈谈MATLAB大数据处理
  9. python文本框_Python GUI-在文本框中插入文本
  10. C++统计输入字符串各个大写字母的个数