UNPKG

@nori-zk/proof-conversion

Version:

Verifying zkVM proofs inside o1js circuits, to generate Mina compatible proof

49 lines 2.48 kB
import { Provable } from 'o1js'; import v8 from 'v8'; import { Sp1PlonkVerifier } from './verifier.js'; import { VK } from './vk.js'; import { FrC } from '../towers/fr.js'; import { Sp1PlonkProof, deserializeProof } from './proof.js'; import { parsePublicInputs } from './parse_pi.js'; import { AuXWitness } from './aux_witness.js'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); const g2_lines_required = require('./mm_loop/g2_lines.json'); const tau_lines_required = require('./mm_loop/tau_lines.json'); //import g2_lines_required from './mm_loop/g2_lines.json'; //import tau_lines_required from './mm_loop/tau_lines.json'; const g2_lines = JSON.stringify(g2_lines_required); //fs.readFileSync(`./src/plonk/mm_loop/g2_lines.json`, 'utf8'); const tau_lines = JSON.stringify(tau_lines_required); //fs.readFileSync(`./src/plonk/mm_loop/tau_lines.json`, 'utf8'); const args = process.argv; const hexProof = args[2]; const programVk = args[3]; const hexPi = args[4]; const auxWtnsPath = args[5]; const auxWitness = AuXWitness.loadFromPath(auxWtnsPath); const Verifier = new Sp1PlonkVerifier(VK, g2_lines, tau_lines); function main() { const [pi0, pi1] = Provable.witness(Provable.Array(FrC.provable, 2), () => parsePublicInputs(programVk, hexPi)); const proof = Provable.witness(Sp1PlonkProof, () => new Sp1PlonkProof(deserializeProof(hexProof))); Verifier.verify(proof, pi0, pi1, auxWitness); } // npm run build && node --max-old-space-size=65536 build/src/plonk/e2e_verify.js (async () => { console.time('running Fp constant version'); main(); console.timeEnd('running Fp constant version'); console.time('running Fp witness generation & checks'); await Provable.runAndCheck(main); console.timeEnd('running Fp witness generation & checks'); console.time('creating Fp constraint system'); let cs = await Provable.constraintSystem(main); console.timeEnd('creating Fp constraint system'); console.log(cs.summary()); const totalHeapSize = v8.getHeapStatistics().total_available_size; let totalHeapSizeinGB = (totalHeapSize / 1024 / 1024 / 1024).toFixed(2); console.log(`Total heap size: ${totalHeapSizeinGB} GB`); // used_heap_size const usedHeapSize = v8.getHeapStatistics().used_heap_size; let usedHeapSizeinGB = (usedHeapSize / 1024 / 1024 / 1024).toFixed(2); console.log(`Used heap size: ${usedHeapSizeinGB} GB`); })(); //# sourceMappingURL=e2e_verify.js.map