輸入輸出
/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
峻堰;
其后由于轉(zhuǎn)換為于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++) { // 對于轉(zhuǎn)換為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] )));
}
承諾多項式賦值
根據(jù)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