Skip to content

Commit

Permalink
Merge pull request #44 from 0xPolygonHermez/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
zkronos73 committed Oct 6, 2022
2 parents de78cf1 + 5f31c89 commit 9dc19a5
Show file tree
Hide file tree
Showing 26 changed files with 676 additions and 309 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ testvectors/commit.bin
testvectors/constants.bin
tmp
pil-config.json
parallel-tests
40 changes: 24 additions & 16 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@0xpolygonhermez/zkevm-proverjs",
"version": "0.0.7",
"version": "0.4.0",
"description": "JS version of the zkProver.",
"main": "index.js",
"scripts": {
Expand All @@ -14,30 +14,30 @@
"exec": ". ./pre.sh && INPUT=${npm_config_input:=tools/build-genesis/input_executor.json} && echo \"input: $INPUT\" && node $NODE src/main_executor $INPUT $PIL -r $BDIR/rom.json -o $BDIR/zkevm.commit && cp $INPUT $BDIR/input_executor.json",
"pilverify": ". ./pre.sh && $PILCOM/main_pilverifier.js $BDIR/zkevm.commit -c $BDIR/zkevm.const $PIL",
"buildstarkinfo": ". ./pre.sh && $PILSTARK/main_genstarkinfo.js $PIL -s $BDIR/zkevm.starkstruct.json -i $BDIR/zkevm.starkinfo.json",
"buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js $PIL -s $BDIR/zkevm.starkstruct.json -c $BDIR/zkevm.chelpers.cpp",
"buildconstanttree": ". ./pre.sh && $PILSTARK/main_buildconsttree.js -c $BDIR/zkevm.const $PIL -s $BDIR/zkevm.starkstruct.json -t $BDIR/zkevm.consttree -v $BDIR/zkevm.verkey.json",
"buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js -m $PIL -s $BDIR/zkevm.starkstruct.json -c $BDIR/zkevm.chelpers/zkevm.chelpers.cpp",
"buildconstanttree": ". ./pre.sh && $BCTREE -c $BDIR/zkevm.const $PIL -s $BDIR/zkevm.starkstruct.json -t $BDIR/zkevm.consttree -v $BDIR/zkevm.verkey.json",
"prove": ". ./pre.sh && $PILSTARK/main_prover.js -m $BDIR/zkevm.commit -c $BDIR/zkevm.const -t $BDIR/zkevm.consttree $PIL -s $BDIR/zkevm.starkstruct.json -o $BDIR/zkevm.proof.json -z $BDIR/zkevm.zkin.proof.json -b $BDIR/zkevm.public.json",
"verify": ". ./pre.sh && $PILSTARK/main_verifier.js $PIL -s $BDIR/zkevm.starkstruct.json -o $BDIR/zkevm.proof.json -b $BDIR/zkevm.public.json -v $BDIR/zkevm.verkey.json",
"gencircom": ". ./pre.sh && $PILSTARK/main_pil2circom.js $PIL -s $BDIR/zkevm.starkstruct.json -v $BDIR/zkevm.verkey.json -o $BDIR/zkevm.verifier.circom",
"compilecircom": ". ./pre.sh && circom --O1 --prime goldilocks --r1cs --sym --wasm --c --verbose $BDIR/zkevm.verifier.circom -o $BDIR -l node_modules/pil-stark/circuits.gl",

"c12a_setup": ". ./pre.sh && $PILSTARK/compressor12/main_compressor12_setup.js -r $BDIR/zkevm.verifier.r1cs -p $BDIR/zkevm.c12a.pil -c $BDIR/zkevm.c12a.const -e $BDIR/zkevm.c12a.exec",
"c12a_buildstarkinfo": ". ./pre.sh && $PILSTARK/main_genstarkinfo.js -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -i $BDIR/zkevm.c12a.starkinfo.json",
"c12a_buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -c $BDIR/zkevm.c12a.chelpers.cpp",
"c12a_buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js -m -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -c $BDIR/zkevm.c12a.chelpers/zkevm.c12a.chelpers.cpp",
"c12a_exec": ". ./pre.sh && $PILSTARK/compressor12/main_compressor12_exec.js -i $BDIR/zkevm.zkin.proof.json -w $BDIR/zkevm.verifier_js/zkevm.verifier.wasm -p $BDIR/zkevm.c12a.pil -e $BDIR/zkevm.c12a.exec -m $BDIR/zkevm.c12a.commit",
"c12a_pilverify": ". ./pre.sh && $PILCOM/main_pilverifier.js $BDIR/zkevm.c12a.commit -c $BDIR/zkevm.c12a.const -p $BDIR/zkevm.c12a.pil",
"c12a_buildconstanttree": ". ./pre.sh && $PILSTARK/main_buildconsttree.js -c $BDIR/zkevm.c12a.const -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -t $BDIR/zkevm.c12a.consttree -v $BDIR/zkevm.c12a.verkey.json",
"c12a_prove": ". ./pre.sh && $PILSTARK/main_prover.js -m $BDIR/zkevm.c12a.commit -c $BDIR/zkevm.c12a.const -t $BDIR/zkevm.c12a.consttree -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -o $BDIR/zkevm.c12a.proof.json -z $BDIR/zkevm.c12a.zkin.proof.json -b $BDIR/zkevm.c12a.public.json --proverAddr=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"c12a_buildconstanttree": ". ./pre.sh && $BCTREE -c $BDIR/zkevm.c12a.const -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -t $BDIR/zkevm.c12a.consttree -v $BDIR/zkevm.c12a.verkey.json",
"c12a_prove": ". ./pre.sh && $PILSTARK/main_prover.js -m $BDIR/zkevm.c12a.commit -c $BDIR/zkevm.c12a.const -t $BDIR/zkevm.c12a.consttree -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -o $BDIR/zkevm.c12a.proof.json -z $BDIR/zkevm.c12a.zkin.proof.json -b $BDIR/zkevm.c12a.public.json",
"c12a_verify": ". ./pre.sh && $PILSTARK/main_verifier.js -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -o $BDIR/zkevm.c12a.proof.json -b $BDIR/zkevm.c12a.public.json -v $BDIR/zkevm.c12a.verkey.json",
"c12a_gencircom": ". ./pre.sh && $PILSTARK/main_pil2circom.js -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json -v $BDIR/zkevm.c12a.verkey.json -o $BDIR/zkevm.c12a.verifier.circom",
"c12a_compilecircom": ". ./pre.sh && circom --r1cs --sym --wasm --c --verbose --O1 --prime goldilocks $BDIR/zkevm.c12a.verifier.circom -o $BDIR -l node_modules/pil-stark/circuits.gl",

"c12b_setup": ". ./pre.sh && $PILSTARK/compressor12/main_compressor12_setup.js -r $BDIR/zkevm.c12a.verifier.r1cs -p $BDIR/zkevm.c12b.pil -c $BDIR/zkevm.c12b.const -e $BDIR/zkevm.c12b.exec",
"c12b_buildstarkinfo": ". ./pre.sh && $PILSTARK/main_genstarkinfo.js -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -i $BDIR/zkevm.c12b.starkinfo.json",
"c12b_buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -c $BDIR/zkevm.c12b.chelpers.cpp",
"c12b_buildchelpers": ". ./pre.sh && $PILSTARK/main_buildchelpers.js -m -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -c $BDIR/zkevm.c12b.chelpers/zkevm.c12b.chelpers.cpp",
"c12b_exec": ". ./pre.sh && $PILSTARK/compressor12/main_compressor12_exec.js -i $BDIR/zkevm.c12a.zkin.proof.json -w $BDIR/zkevm.c12a.verifier_js/zkevm.c12a.verifier.wasm -p $BDIR/zkevm.c12b.pil -e $BDIR/zkevm.c12b.exec -m $BDIR/zkevm.c12b.commit",
"c12b_pilverify": ". ./pre.sh && $PILCOM/main_pilverifier.js $BDIR/zkevm.c12b.commit -c $BDIR/zkevm.c12b.const -p $BDIR/zkevm.c12b.pil",
"c12b_buildconstanttree": ". ./pre.sh && $PILSTARK/main_buildconsttree.js -c $BDIR/zkevm.c12b.const -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -t $BDIR/zkevm.c12b.consttree -v $BDIR/zkevm.c12b.verkey.json",
"c12b_buildconstanttree": ". ./pre.sh && $BCTREE -c $BDIR/zkevm.c12b.const -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -t $BDIR/zkevm.c12b.consttree -v $BDIR/zkevm.c12b.verkey.json",
"c12b_prove": ". ./pre.sh && $PILSTARK/main_prover.js -m $BDIR/zkevm.c12b.commit -c $BDIR/zkevm.c12b.const -t $BDIR/zkevm.c12b.consttree -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -o $BDIR/zkevm.c12b.proof.json -z $BDIR/zkevm.c12b.zkin.proof.json -b $BDIR/zkevm.c12b.public.json --proverAddr=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"c12b_verify": ". ./pre.sh && $PILSTARK/main_verifier.js -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -o $BDIR/zkevm.c12b.proof.json -b $BDIR/zkevm.c12b.public.json -v $BDIR/zkevm.c12b.verkey.json",
"c12b_gencircom": ". ./pre.sh && $PILSTARK/main_pil2circom.js -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json -v $BDIR/zkevm.c12b.verkey.json -o $BDIR/zkevm.c12b.verifier.circom",
Expand All @@ -55,7 +55,13 @@
"prebuildstarkinfo": ". ./pre.sh && if [ \"$npm_config_starkstruct\" = \"debug\" ]; then node tools/gen_debug_starkstruct.js -t GL $PIL -s $BDIR/zkevm.starkstruct.json; else cp src/zkevm.starkstruct.json $BDIR; fi",
"prec12a_buildstarkinfo": ". ./pre.sh && if [ \"$npm_config_starkstruct\" = \"debug\" ]; then node tools/gen_debug_starkstruct.js -t GL -p $BDIR/zkevm.c12a.pil -s $BDIR/zkevm.c12a.starkstruct.json; else cp src/zkevm.c12a.starkstruct.json $BDIR; fi",
"prec12b_buildstarkinfo": ". ./pre.sh && if [ \"$npm_config_starkstruct\" = \"debug\" ]; then node tools/gen_debug_starkstruct.js -t BN128 -p $BDIR/zkevm.c12b.pil -s $BDIR/zkevm.c12b.starkstruct.json; else cp src/zkevm.c12b.starkstruct.json $BDIR; fi",

"buildsetup:basic": "npm run buildsetup --pil=pil/basic_main.pil --build=build/basic_proof --starkstruct=debug",
"buildall:basic": "npm run buildall --pil=pil/basic_main.pil --build=build/basic_proof --starkstruct=debug",
"buildproof:basic": "npm run buildproof --pil=pil/basic_main.pil --build=build/basic_proof --starkstruct=debug",

"test": "mocha",

"test:storage": "mocha test/sm_storage_test.js",
"test:mem_align": "mocha test/sm_mem_align_test.js",
"test:counters:arith": "mocha test/counters/arith.js",
Expand All @@ -65,30 +71,32 @@
"test:counters:padding_pg": "mocha test/counters/padding_pg.js",
"test:counters:poseidon": "mocha test/counters/poseidon.js",
"test:counters:storage": "mocha test/counters/storage.js",
"test:all-inputs": "mocha --timeout 0 --max-old-space-size=8000 tools/run-test/run-inputs-mocha.test.js"
"test:all-inputs": "mocha --timeout 0 --max-old-space-size=8000 tools/run-test/run-inputs-mocha.test.js",
"test:gen-parallel": "node tools/run-test/gen-parallel-tests.js",
"test:run-parallel": "mocha --jobs 2 --timeout 0 --max-old-space-size=8000 --parallel tools/run-test/parallel-tests/*.test.js"
},
"author": "Jordi Baylina",
"license": "UNLICENSED",
"dependencies": {
"@0xpolygonhermez/zkasmcom": "https://github.com/0xPolygonHermez/zkasmcom.git#mandarin",
"@0xpolygonhermez/zkevm-commonjs": "https://github.com/0xpolygonhermez/zkevm-commonjs.git",
"@0xpolygonhermez/zkevm-rom": "https://github.com/0xpolygonhermez/zkevm-rom.git",
"@0xpolygonhermez/zkasmcom": "https://github.com/0xPolygonHermez/zkasmcom.git#v0.4.0.0",
"@0xpolygonhermez/zkevm-commonjs": "https://github.com/0xpolygonhermez/zkevm-commonjs.git#v0.4.0.1",
"@0xpolygonhermez/zkevm-rom": "https://github.com/0xpolygonhermez/zkevm-rom.git#v0.4.0.0",
"chalk": "^3.0.0",
"circomlib": "^2.0.3",
"circomlibjs": "0.1.1",
"ejs": "^3.1.6",
"ethers": "^5.4.7",
"ffjavascript": "^0.2.55",
"fs": "^0.0.1-security",
"pil-stark": "^0.0.25",
"pilcom": "^0.0.17",
"snarkjs": "^0.4.24",
"pil-stark": "0.0.25",
"pilcom": "0.0.18",
"snarkjs": "0.4.27",
"yargs": "^17.4.0"
},
"devDependencies": {
"chai": "^4.3.4",
"chai-as-promised": "^7.1.1",
"circom_tester": "^0.0.9",
"mocha": "^9.1.3"
}
}

1 change: 1 addition & 0 deletions pre.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ PIL="-p ${npm_config_pil:=pil/main.pil}`[ ! -z $npm_config_pilconfig ] && echo \
PILSTARK="node $NODE node_modules/pil-stark/src"
PILCOM="node $NODE node_modules/pilcom/src"
SNARKJS="node $NODE node_modules/snarkjs/cli.js"
BCTREE="${npm_config_bctree:=$PILSTARK/main_buildconsttree.js}"
true
7 changes: 4 additions & 3 deletions src/main_executor.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const fileCachePil = path.join(__dirname, "../cache-main-pil.json");

const argv = require("yargs")
.version(version)
.usage("main_executor <input.json> -r <rom.json> -o <proof.json> -t <test.json> -l <logs.json> -s -d [-p <main.pil>] [-P <pilconfig.json>] -u -e -v")
.usage("main_executor <input.json> -r <rom.json> -o <proof.json> -t <test.json> -l <logs.json> -s -d [-p <main.pil>] [-P <pilconfig.json>] -u -e -v -T")
.alias("o", "output")
.alias("r", "rom")
.alias("t", "test")
Expand All @@ -39,8 +39,8 @@ const argv = require("yargs")
.alias("P", "pilconfig")
.alias("u", "unsigned")
.alias("e", "execute")
.alias("P", "pilconfig")
.alias("v", "verbose")
.alias("T", "tracer")
.argv;

async function run() {
Expand Down Expand Up @@ -106,7 +106,8 @@ async function run() {
inputName: path.basename(inputFile, ".json")
},
unsigned: (argv.unsigned === true),
execute: (argv.execute === true)
execute: (argv.execute === true),
tracer: (argv.tracer === true)
}

const N = cmPols.Main.PC.length;
Expand Down
29 changes: 14 additions & 15 deletions src/sm/sm_main/debug/full-tracer.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,7 @@ class FullTracer {
return;
}
this.info[this.info.length - 1].error = errorName;
// Dont decrease depth if the error is from processing a RETURN opcode
const lastOpcode = this.info[this.info.length - 1]
if (!opDecContext.includes(lastOpcode.opcode)) {
this.depth--
}

// Revert logs
this.logs[ctx.CTX] = null
}
Expand Down Expand Up @@ -223,7 +219,12 @@ class FullTracer {
};

//Set consumed tx gas
response.gas_used = String(Number(response.gas_left) - Number(ctx.GAS));
if(Number(ctx.GAS) > Number(response.gas_left)) {
response.gas_used = String(Number(response.gas_left));
} else {
response.gas_used = String(Number(response.gas_left) - Number(ctx.GAS));
}

response.call_trace.context.gas_used = response.gas_used;
this.accBatchGas += Number(response.gas_used);

Expand Down Expand Up @@ -368,13 +369,14 @@ class FullTracer {
const finalMemory = [];
const lengthMemOffset = findOffsetLabel(ctx.rom.program, "memLength");
const lenMemValue = ctx.mem[offsetCtx + lengthMemOffset];
const lenMemValueFinal = typeof lenMemValue === "undefined" ? 0 : Number(fea2scalar(ctx.Fr, lenMemValue));

const lenMemValueFinal = typeof lenMemValue === "undefined" ? 0 : Math.ceil(Number(fea2scalar(ctx.Fr, lenMemValue))/32);

for (let i = 0; i < lenMemValueFinal; i++) {
const memValue = ctx.mem[addrMem + i];
if (typeof memValue === "undefined")
if (typeof memValue === "undefined") {
finalMemory.push("0".padStart(64, "0"))
continue;
}
let memScalar = fea2scalar(ctx.Fr, memValue);
let hexString = memScalar.toString(16);
hexString = hexString.length % 2 ? `0${hexString}` : hexString;
Expand All @@ -399,6 +401,7 @@ class FullTracer {
}

// add info opcodes
this.depth = Number(getVarFromCtx(ctx, true, "depth"));
singleInfo.depth = this.depth;
singleInfo.pc = Number(ctx.PC);
singleInfo.remaining_gas = ctx.GAS.toString();
Expand Down Expand Up @@ -438,6 +441,7 @@ class FullTracer {
singleInfo.contract.data = getCalldataFromStack(ctx);
singleInfo.contract.gas = this.txGAS[this.depth];
singleInfo.storage = JSON.parse(JSON.stringify(this.deltaStorage[this.depth]));

// Round up to next multiple of 32
singleInfo.memory_size = String(Math.ceil(Number(getVarFromCtx(ctx, false, "memLength")) / 32) * 32);
singleInfo.counters = {
Expand Down Expand Up @@ -481,13 +485,8 @@ class FullTracer {
}
}

//Check opcodes that alter depth
if (opDecContext.includes(singleInfo.opcode)) {
this.depth--;
}
if (opIncContext.includes(singleInfo.opcode)) {
this.depth++;
this.deltaStorage[this.depth] = {};
this.deltaStorage[this.depth + 1] = {};
}
}

Expand Down
128 changes: 0 additions & 128 deletions src/sm/sm_main/debug/tracer.js

This file was deleted.

Loading

0 comments on commit 9dc19a5

Please sign in to comment.