本系列专题将基于@郭宇老师的视频、讲义及相关论文,系统梳理一下PlonkSNARK的各个组件,尽量做到代码级地剖析深度。预期将涵盖以下几个章节:PlonkIOP协议实现zerokownledge实现Non-Interactivelookup特性Thanks感谢@郭宇老师
本文介绍的这些知识点是理解plookup的基础
本文介绍另一种基于plonk的proof system--halo2,目前看到基于plonk的工程实现有三种:bellman, dusk, halo2.
本文主要介绍plookup算法的思路
PlonK算法实现了Universal的零知识证明。SRS只需要提供比多项式阶高的可信设置即可。PlonK电路采用特殊描述,一个门只支持乘法和加法操作。电路需要证明门的输入输出满足外,还需要证明连线的连接关系。PlonK算法的底层原理是多项式承诺。PlonK算法巧妙地将电路的满足关系通过多项式承诺进行证明并验证。
Matter-Labs开源了PLONK算法的验证电路,能实现多个PLONK证明的聚合证明。聚合电路证明某个证明可验证,并且验证使用的VK是正确的。注意的是,PLONK算法验证的最后一步(配对函数)并没有在电路中验证,而是依赖智能合约进行验证。
zkSync通过zk Rollup协议,实现了L2的转账。zkSync项目非常完整,是学习L2非常好的参考项目。zkSync采用Plonk零知识证明算法向L1证明状态的正确性。Plonk算法是Universal的零知识证明算法,只需要一次可信设置。zkSync电路设计采用Chunk设计,支持不同的区块大小。
zkSync虽然采用PLONK零知识证明算法,但是电路的搭建开发采用的R1CS形式。zkSync电路处理包括:1/电路转换 2/PLONK证明计算。Transpile实现了电路的格式转换。电路转换的目的是获取:1/sigma函数 2/ 门系数多项式。
在本文中,我们提出了对PLONK算术化 2 变体的折叠方案。扩展松弛PLONK 算术化,以接受2次自定义门和具有更高门扇入扇出数的电路。 最后,概述了未来工作的路径,包括折叠更高次的门、支持查找门和为松弛PLONK算术化设计 IOP。
zkSync采用PlonK零知识证明系统。在电路设计上,非常巧妙的将交易分割成一个个小的通用处理单元(Operation)。一个Operation对应的证明电路逻辑支持所有可能交易的Operation逻辑。多个有关联的Operation电路组成交易电路。多个交易的电路再组合成区块电路。从而,在固定大小的区块中也能包含不同组合的交易。
PLONK算法的电路采用新的描述模型。整个电路由门电路约束和Copy约束(连线约束)组成。门电路约束和Copy约束都转换为多项式表达。Copy约束通过累加算法实现。
PLONK的原始论文存在一个零知识性的问题。商t多项式没有添加随机性,导致simulator不能模拟出证明。