Polygon zkEVM R1CS与Plonk电路转换
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM R1CS与Plonk电路转换相关的知识,希望对你有一定的参考价值。
1. 引言
前序博客有:
- Polygon zkEVM的pil-stark Fibonacci状态机初体验
- Polygon zkEVM的pil-stark Fibonacci状态机代码解析
- rank-1 constraint system R1CS
由上图可知,zkEVM会借助SNARK来“验证((验证STARK证明)的SNARK证明)”:
- 1)将 STARK proof的约束系统evm.pil 经 pil2circom 转换为 evm.verifier.cricom格式。详细见 Polygon zkEVM的pil-stark Fibonacci状态机初体验 第2节第8步“fibonacci generate circom”。
- 2)再借助 circom工具 将 STARK约束系统 转换为 R1CS约束系统表示evm.verifier.r1cs。详细见 Polygon zkEVM的pil-stark Fibonacci状态机初体验 第2节第9步“”
- 3)再经 Compressor12_setup 将 R1CS约束系统表示evm.verifier.r1cs 转换为 Plonk约束表示,同时会生成与 Plonk约束表示 对应的 STARK约束evm.c12.pil,以及 constant多项式的execution trace evm.c12.const 和 Plonk辅助信息 evm.c12.exec。详细见 Polygon zkEVM的pil-stark Fibonacci状态机初体验 第2节第10步“fibonacci C12 setup”。Plonk辅助信息 evm.c12.exec 会用于后续生成 commit多项式execution trace evm.c12.commit。
2. 约束表达
约束表达:
- 1)STARK:采用execution trace来表示约束,以表格形式来表示内部程序状态的变化。如:
序号 x x x A \\mathbfA A( l 2 ( x ) l_2(x) l2(x)多项式) B \\mathbfB B( l 1 ( x ) l_1(x) l1(x)多项式) i s I n i t i a l \\mathbfisInitial isInitial( L 1 ( x ) L_1(x) L1(x)多项式) i s L a s t \\mathbfisLast isLast( L L A S T ( x ) LLAST(x) LLAST(x)多项式) 0 ω 0 \\omega^0 ω0 1 2 1 0 1 ω 1 \\omega^1 ω1 2 5 0 0 2 ω 2 \\omega^2 ω2 5 29 0 0 ⋮ \\vdots ⋮ ⋮ \\vdots ⋮ ⋮ \\vdots ⋮ ⋮ \\vdots ⋮ ⋮ \\vdots ⋮ ⋮ \\vdots ⋮ 1023 ω 1023 \\omega^1023 ω1023 … 74469561660084004 0 1 - 2)Groth16等SNARK方案:采用R1CS来表示约束,形如 < s ⃗ , a ⃗ > ∗ < s ⃗ , b ⃗ > − < s ⃗ , c ⃗ > = 0 <\\vecs,\\veca>*<\\vecs,\\vecb>-<\\vecs,\\vecc>=0 <s,a>∗<s,b>−<s,c>=0,其中 < s ⃗ , a ⃗ > = ∑ i = 1 n s i a i <\\vecs,\\veca>=\\sum_i=1^ns_ia_i <s,a>=∑i=1nsiai为dot product, a ⃗ , b ⃗ , c ⃗ \\veca,\\vecb,\\vecc a,b,c为每步计算的系数, s ⃗ \\vecs s为相应的输入。
- 3)Halo2等SNARK方案:采用Plonk来表示约束,形如 Q m ∗ x r ∗ x l + Q l ∗ x l + Q r ∗ x r + Q o ∗ x o + Q k = 0 Q_m*x_r*x_l+Q_l*x_l+Q_r*x_r+Q_o*x_o+Q_k=0 Qm∗xr∗xl+Ql∗xl+Qr∗xr+Qo∗xo+Qk=0,其中 Q m , Q l , Q r , Q o , Q k Q_m,Q_l,Q_r,Q_o,Q_k Qm,Ql,Qr,Qo,Qk均为selector, x l , x r , x o x_l,x_r,x_o xl,xr,xo为相应的输入。
以PIL-STARK 中的Fibonacci为例,在验证其STARK proof的Plonk表达中,除以上 Q m , Q l , Q r , Q o , Q k Q_m,Q_l,Q_r,Q_o,Q_k Qm,Ql,Qr,Qo,Qk selector之外,还额外引入了定制门 selector Q M D S , Q C M U L Q_MDS,Q_CMUL QMDS,QCMUL。