Polygon zkEVM公式梳理

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Polygon zkEVM公式梳理相关的知识,希望对你有一定的参考价值。

const resP = await starkGen(comPols, constPols, constTree, starkInfo)
其中输入有:

  • 1)comPols:为commit多项式trace domain evaluation值
  • 2)constPols:为常量多项式trace domain evaluation值
  • 3)constTree:为常量多项式Low Degree Extension domain evaluation值的Merkle树
  • 4)starkInfo:为Prover生成证明以及Verifier验证证明所需的逻辑表达

starkGen函数内各关键变量含义为:

  • cm1_n:为commit多项式trace domain的evaluation值。
  • cm1_2ns:为commit多项式low degree extension domain的evaluation值。
  • tree1:为commit多项式扩域上evaluation值构建的Merkle树。
  • cm2_n/cm2_2ns/tree2:为plookup约束相关evaluation值及Merkle树。
  • cm3_n/cm3_2ns/tree3:为plookup/permutation/connection约束Z多项式evaluation值及Merkle树。
  • exps_withq_n/exps_withq_2ns/q_2ns/tree4:为polIdentities约束相关evaluation值及Merkle树。【tree4为根据q_2ns构建的Merkle树。】
  • constTree:为constant多项式low degree extension domain的evaluation值对应的Merkle树。

各关键变量定义为:

  • N = 2 nBits N=2^\\textnBits N=2nBits

  • Next = 2 nBitsExt \\textNext=2^\\textnBitsExt Next=2nBitsExt

  • extendBits = nBitsExt − nBits \\textextendBits=\\textnBitsExt-\\textnBits extendBits=nBitsExtnBits

  • w w w F F F域内的 N N N-th root of unity, w ′ w' w F F F域内的 Next \\textNext Next-th root of unity。

  • g g g F . shift F.\\textshift F.shift e e e F F F域内的 2 extendBits 2^\\textextendBits 2extendBits-th root of unity。

  • ctx.Zi \\textctx.Zi ctx.Zi 表示的是长度为 Next \\textNext Next的数组,其每个元素i为:
    1 ( g w ′ ) 2 nBits − 1 = 1 ( g 2 nBits ∗ e i ) − 1 = 1 g N ∗ e i − 1 \\frac1(gw')^2^\\textnBits-1=\\frac1(g^2^\\textnBits*e^i)-1=\\frac1g^N*e^i-1 (gw)2nBits11=(g2nBitsei)11=gNei11

  • x_n为长度为N的数组,其每个元素 i i i为: w i w^i wi,其中 w w w F F F域内的 N N N-th root of unity。【ctx.x_n为trace domain的插值点】

  • x_2ns为长度为 Next \\textNext Next的数组,其每个元素 i i i为: g w ′ i gw'^i gwi,其中 w ′ w' w F F F域内的 Next \\textNext Next-th root of unity。【ctx.x_2ns为low degree extension domain的插值点】

  • 令challenge[7]= x i x_i xi,有: xis = x i / g , wxis = ( w x i ) / g \\textxis=x_i/g,\\textwxis=(wx_i)/g xis=xi/g,wxis=(wxi)/g。构建长度为 N N N的数组LEv_tmp,其每个元素 i i i为: ( x i / g ) i (x_i/g)^i (xi/g)i;构建长度为 N N N的数组LpEv_tmp,其每个元素 i i i为: ( ( w x i / g ) i ((wx_i/g)^i ((wxi/g)i。以LEv_tmp中值为插值点 y y y坐标,以x_n为插值点 x x x坐标,ifft获得多项式系数数组LEv;同理以LpEv_tmp中值为插值点 y y y坐标,以x_n为插值点 x x x坐标,ifft获得多项式系数数组LpEv。

    • starkInfo.json的evMap中的第 i i i项ev,若其ev.prime为true,则使用LpEv多项式;否则,使用LEv多项式。l = ev.prime ? LpEv : LEv;。根据ev.type取相应的扩域ctx.*_2ns evaluations中依次取第0、1<<extendBits、...、k<<extendBits、...、(N-1)<<extendBits共N个值 v v v,计算 ctx.evals [ i ] = ∑ k = 0 N − 1 v [ k ] ∗ l [ k ] \\textctx.evals[i]=\\sum_k=0^N-1v[k]*l[k] ctx.evals[i]=k=0N1v[k]l[k]。ctx.evals数组的长度为starkInfo.evMap.length。【后续计算FRI多项式扩域值ctx.exps_withoutq_2ns需用到。】
  • wxi = w x i \\textwxi=wx_i wxi=wxi,其中 w w w F F F域内的 N N N-th root of unity。

  • ctx.xDivXSubXi 和 ctx.xDivXSubWXi 均为长度为 N \\textN N的数组,其每个元素 i i i均为Goldilocks extension 3 域元素,表示为 [ a i , b i , c i ] [a_i,b_i,c_i] [ai,bi,ci]

    • ctx.xDivXSubXi的第 i i i个元素为: g w ′ i g w ′ i − x i \\fracgw'^igw'^i-x_i gwixigwi
    • ctx.xDivXSubWXi的第 i i i个元素为: g w ′ i g w ′ i − w x i \\fracgw'^igw'^i-wx_i gwiwxigwi
  • starkInfo.json中的“Zi”标签,在compileCode时翻译为ctx.Zi(i)

以Fibonacci为例:

namespace Fibonacci(%N);


    pol constant L1, LLAST; //constant多项式
    pol commit l1,l2; //commit多项式

    pol l2c = l2; //中间多项式
	//公开变量值
    public in1 = l2c(0);
    public in2 = l1(0);
    public out = l1(%N-1);

    (l2' - l1)*(1-LLAST) = 0; //约束1

    pol next = l1*l1 + l2*l2; //中间多项式

    (l1' - next)*(1-LLAST) = 0; //约束2

    L1 * (l2 - :in1) = 0; //约束3
    L1 * (l1 - :in2) = 0; //约束4
    LLAST * (l1 - :out) = 0; //约束5


序号 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) <

以上是关于Polygon zkEVM公式梳理的主要内容,如果未能解决你的问题,请参考以下文章

Polygon zkEVM Prover

Polygon zkEVM网络节点

Polygon zkEVM节点代码解析

Polygon zkEVM——Hermez 2.0简介

Polygon zkEVM可验证计算简单状态机示例

Polygon zkEVM zkROM代码解析

(c)2006-2024 SYSTEM All Rights Reserved IT常识