Appearance
Plonk方案
Plonk全称为Permutations(排列) over Lagarange-bases(拉格朗日基) for Oecumenical(普世的) Noninteractive arguments of Knowledge。
准备阶段
准备双线性映射的两个群
这里建议先再看看之前的KZG承诺
定义有限域
- 这里使用,既bls12_381曲线
以下以为例
寻找的循环子群
下面的具体计算可以参考这里

扩展域
为了完成双线性映射需要找到扩展域 ,这里的 被称为嵌入度,需要找到最小的 使得 ,在这里 是子群 的阶。要求 r | p^k − 1 是为了让 r 次单位根包含在 F_{p^k}^× 中,从而配对 e: G1 × G2 → GT(|GT|=r)可以定义。
在这里假设
- 扩展域
- 寻找一个不可约多项式
- 为什么不能用 ,
- 为该式的解,既
- 则在该扩展域上所有元素可写作$ a + bu $
找到第二个子群

可信设置
- 生成私钥
- 构造结构引用字符串SRS:
将问题转化为电路
这里将问题假设为:
R1CS:
Plonk基本多项式
- :左输入
- :右输入
- :输出
- :乘法
- :常数
表示为当前功能是否启用,启用为1,禁用为0,具体如下图:

转化为向量:

拉格朗日插值,把向量转为多项式
这里对 进行插值,转换为坐标则为 ,最终得到多项式 ,
具体参照之前的介绍

单位根
定义:对 ,在复数意义的解下是 次复根,这样的解有 个,则称为次单位根或单位复根, 要大于等于约束向量的长度。
在当前的例子中向量长度为4。
寻找单位根
在上面这里提到 ,则显然 ,可以在 中寻找单位根:

计算陪集
对于上面的单位根 在 中,有如下元素不重复的陪集:
拷贝约束
由于需要构建 x_* 到 a_*,b_*,c_* 的映射关系,这里需要添加拷贝约束:

还需要嵌入到多项式中:

具体看Code
承诺
为了简化表示,以下用 表示 ,角标省略默认为 ,对于双线性配对容易得到分配率:
Stage 1 :承诺a,b,c
对于在单位根中的群 ,我们有:
在 上产生随机数:
易得:
然后使用SRS进行承诺:
取
这里是和基点 相乘
Sage 2 : 承诺
产生随机数:
获得挑战:
计算 :
Stage 3 : 计算商多项式 与承诺
然后将多项式分割为的多项式 , 是指电路门数量,或者说向量长度,在这里 其中:
然后输出 ,既将 代入并承诺到 上
我们有:
然后得到 Commit:
Stage 4 : 线性化,计算评估点
计算:
计算 :
然后计算 :
The definition of here is not same as in plonk paper, where we removed all the constant terms when we do linearization. This can save one verifier scalar multiplication.
最后计算线性评估点:,输出
Stage 5 : 计算公开多项式承诺
输出:
给定 ,有:
证据输出
总共16个元素,9个上的点,7个上的标量
验证
SRS预处理
证明步骤
检查:
检查:
检查:
计算零多项式评估:
计算:
计算:
计算商多项式评估:
计算第一部分多项式承诺,先定义:,计算:
计算完整批多项式承诺
- 计算群编码的批量评估 :
- 验证所有的等式:
Let's check steps 9 − 11 for each of the polynomials. For example the terms with 𝑢.
Let's check ,here we define for simplicity:
Let's check ,here we define for simplicity:
The other terms are easy to check as well.
