Plonk = 电路约束 + 多项式承诺
电路约束:
2.1 KZG多项式承诺
KZG Setup
: 生成结构化参考串(SRS)Commit
: 生成多项式承诺Open
: 生成评估证明Verify
: 验证评估证明
- 加法门、乘法门、常量门
- 置换证明、复制约束
- Round 1: 承诺门信号多项式
- Round 2: 承诺线约束多项式
- Round 3: 计算约束满足证明
- Round 4: 计算多项式评估点
- Round 5: 生成最终证明
- 检查承诺有效性
- 验证门约束满足
- 验证线约束满足
- 验证评估正确性 2.6 基础工具组件
- 有限域运算
- 多项式运算
- FFT/iFFT 变换
- 椭圆曲线运算
3. 门约束
QL⋅a + QR⋅b + QO⋅c + QM⋅(a⋅b) + QC = 0
a,b
是门的输入/c
是输出信号QL,QR,QO,QM,QC
是系数- 通过调整系数可以表达不同类型的门
// 加法门
`QL = 1, QR = 1, QO = -1, QM = 0, QC = 0 `
// 表达:` a + b - c = 0`
// 乘法门
QL = 0, QR = 0, QO = -1, QM = 1, QC = 0
// 表达: a⋅b - c = 0
// 常量门
QL = 1, QR = 0, QO = 0, QM = 0, QC = -k
// 表达: a = k
4. 线约束
使用置换累加器(permutation accumulator)验证信号相等:
如果 a[i] = b[j]
, 则:
P(x) = P'(x)
其中 P(x) 是原始累加器
P'(x) 是置换后的累加器
- 为每个信号分配唯一标识
id[signal] = index
- 构造累加器
P(x) = Σ (u⋅id[i] + v⋅value[i])⋅x^i
- 验证相等信号的累加器值相同
P(x) = P'(x) ⟹ signals are equal
- 证明生成流程
- Round 1: 承诺门信号多项式
- Round 2: 承诺线约束多项式
- Round 3: 计算约束满足证明
- Round 4: 计算多项式评估点
- Round 5: 生成最终证明
Groth16:
优点:
- 证明小且验证快
- 适合固定电路
缺点:
- 需要每个电路单独的可信设置
- 电路修改成本高
Plonk:
优点:
- 通用可信设置
- 支持电路灵活修改
缺点:
- 证明较大
- 验证较慢