ZKP | Web3 黑客松研讨会:使用 Halo2-ce 构建和测试电路
2023-03-2416:28
Scroll CN
2023-03-24 16:28
Scroll CN
2023-03-24 16:28
收藏文章
订阅专栏

此次研讨会中,Scroll 的 ZK 电路工程师 Mason Liang 介绍了如何在 halo2-ce 环境中构建和测试电路。通过提供的 Github 模板 (https://github.com/scroll-tech/zk-mooc-halo2),你将学习到如何在 halo2-ce 中构建零知识电路,halo2-ce 是以太坊基金会 PSE 团队的 zkevm 项目使用的证明系统的扩展。

此次研讨会是为了支持由伯克利 RDI 与 ZKP MOOC 合作主办的 ZKP / Web3 黑客马拉松。在 ZK 电路赛道的 Category 4 中,开发者需要在 halo2-ce 的 ZKP 框架中构建和优化 RIPEMD-160、Blake2f 或 SHA2-256 哈希函数,Scroll 将为获胜团队颁发 15,000 美元奖金。



研讨会主要分为三个部分,第一部分讲解了什么是 Halo2,第二部分通过斐波那契数列的例子讲解了电路实现,第三部分讲解了以太坊的预编译。


什么是 Halo2


Halo2 是一个基于 Plonk 的证明系统。电路中包含了见证 (Witnesses) 和约束 (Constraints) 的矩阵。

如下图所示,通常有  行, 列,单元格值为有限域中  的元素
对每列 , 构建一个拉格朗日多项式  ,在第  行时,单元格 ,其中  是  次单位根。
在 Halo2 中,有四种不同类型的列:advice 列,instance 列,fixed 列,selector 列。其中
- advice 列包含隐私输入和见证
- instance 列包含公开输入
- fixed 列包含常数和查找表
- selector 列包含控制门
advice 列和 instance 列会随着证明变化,fixed 列和 selector 列是刻写进电路。
Halo2 证明系统一大特点是支持自定义门 (Custom Gate),定义不同单元格之间的多项式约束关系,并使用 selector 列来控制自定义门的开关,并且在同一个自定义门中,不需要单元格保证连续。
Halo2 的另一大特点是 Permuation,即等价性校验 (equality checks)。其是刻写在电路中,可以用来检查不同单元格的等价性,常用于关联电路中的不同小工具 (gadget)。
Halo2 还支持查找表 (Lookup)。我们可以将查找表理解成变量之间存在一个关系,该关系可以表示成一个表。在 Scroll 的 zkEVM 中,查找表可以用来验证复杂的操作,例如 SHA3, EXP 等。这样的策略类似于在正常的程序中,用内存换 CPU 的方法来提高性能。
总结一下,Halo2 同时支持自定义门和查找表,可以非常灵活的满足不同的电路需要,其模块化的设计可以替换后端方案。
代码实现层面的列数据结构。
在约束系统中,创建四类不同列的对应方法
对每一列是否启用等价性校验的方法
创建自定义门的方法
创建查找表的方法
电路特征
总结一下,在 Halo2 中实现电路分成如下 4 步
1. 定义 Config 结构,说明电路中所使用的列
2. 定义 Chip 结构,配置电路中使用的约束并提供 assignment 函数
3. 定义实现了电路特征的电路结构
4. 实例化电路,并提供给证明者


电路实例


第二部分讲解如何在 Halo2 实现斐波那契数列电路。我们需要在给定  的情况下,证明 
第一个示例中,设置三列 advice 列,依次放置 ;selector 列中均设置为 1,要求每一行的等式约束成立;instance 列的前三行放置 1, 1, 55
定义电路配置的代码如下
在创建自定义门中,我们实现了斐波那契数列的主要逻辑,要求
在此基础上,通过一致性校验,保证行与行之间斐波那契数列的连续性。
第二个示例中,我们仅设置一列 advice 列,在每一行依次放置斐波那契数列;selector 列仍然均设置为 1,要求每一行的等式约束成立;instance 列的前三行仍然放置 1, 1, 55
对应创建自定义门时,我们将约束改变为


以太坊预编译

第三部分是本次黑客松相关的话题。0x02, 0x03, 0x09 预编译合约分别对应了 SHA2-256,RIPEMD-160 和 Blake2f 哈希函数。
斐波那契数列的具体实现已经在 Haichen 的仓库中给出,Mason 同样给出了一个平方剩余的例子,欢迎大家尝试挑战。
https://github.com/icemelon/halo2-examples/tree/master/src/fibonacci 
研讨会 35:37 后是对代码实现的具体分析和演示,建议直接观看视频回放。

添加 Scroller 社区管理员微信进入 Scroll 中文社区

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code