Polygon zkevm main_compressor12_exec

输入输出

/usr/local/bin/node --max-old-space-size=32000 src/compressor12/main_compressor12_exec.js -i /Users/tron/test/polygon_zkevm/pil-stark/tmp/fibonacci.proof.zkin.json -w /Users/tron/test/polygon_zkevm/pil-stark/tmp/fibonacci.verifier_js/fibonacci.verifier.wasm -p /Users/tron/test/polygon_zkevm/pil-stark/tmp/fibonacci.c12.pil -e /Users/tron/test/polygon_zkevm/pil-stark/tmp/fibonacci.c12.exec -m /Users/tron/test/polygon_zkevm/pil-stark/tmp/fibonacci.c12.commit

涉及的输入为:

  • fibonacci.proof.zkin.json : 基于Goldilocks 生成的STARK 证明
  • fibonacci.verifier.wasm: 用于生成witness 的wasm
  • fibonacci.c12.pil: main_compressor12_setup 过程生成的 pil

输出为:

  • fibonacci.c12.commit : 生成的承诺多项式

r1cs witness 生成

对r1cs 电路中的withness 赋值,首先将stark 证明作为输入,生成withness w

其后由于转换为于Plonk电路,生成了一些临时变量,对这些变量进行赋值。

    const pil = await compile(F, pilFile, null, pilConfig);

    const cmPols = newCommitPolsArray(pil); // 用于保存生成的withness 

    const wc = await WitnessCalculatorBuilder(wasm);
    const w = await wc.calculateWitness(input); // 将stark proof 作为输入

    for (let i=0; i<nAdds; i++) {  // 对于转换为Plonk电路时生成的临时变量进行赋值
        w.push( F.add( F.mul( w[addsBuff[i*4]], addsBuff[i*4 + 2]), F.mul( w[addsBuff[i*4+1]],  addsBuff[i*4+3]  )));
    }

承诺多项式赋值

根据sMap, 对PIL 中的承诺多项式a[12] 进行赋值,并将最后生成的承诺多项式保存起来。

    for (let i=0; i<nSMap; i++) {
        for (let j=0; j<12; j++) {
            if (sMapBuff[12*i+j] != 0) {
                cmPols.Compressor.a[j][i] = w[sMapBuff[12*i+j]];
            } else {
                cmPols.Compressor.a[j][i] = 0n;
            }
        }
    }

    for (let i=nSMap; i<N; i++) {
        for (let j=0; j<12; j++) {
            cmPols.Compressor.a[j][i] = 0n;
        }
    }
    
await cmPols.saveToFile(commitFile);

参考

https://github.com/0xPolygonHermez/pil-stark/blob/main/src/compressor12/main_compressor12_exec.js

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容