@nori-zk/proof-conversion
Version:
Verifying zkVM proofs inside o1js circuits, to generate Mina compatible proof
29 lines • 1.36 kB
JavaScript
import { Field, Provable, VerificationKey, Poseidon, ZkProgram, Undefined, } from 'o1js';
import { FrC } from '../towers/index.js';
import { NodeProofLeft } from '../structs.js';
import fs from 'fs';
const workDir = process.env.RISC_ZERO_EXAMPLE_WORK_DIR;
const riscZeroExampleNodeVk = Field.from(JSON.parse(fs.readFileSync(`${workDir}/proofs/layer4/p0.json`, 'utf8'))
.publicOutput[2]);
const vk = VerificationKey.fromJSON(JSON.parse(fs.readFileSync(`${workDir}/vks/nodeVk.json`, 'utf8')));
const riscZeroExampleVerifier = ZkProgram({
name: 'RiscZeroExampleVerifier',
publicInput: Field,
publicOutput: Undefined,
methods: {
compute: {
privateInputs: [NodeProofLeft, Provable.Array(FrC.provable, 5)],
async method(input, proof, pis) {
proof.verify(vk);
proof.publicOutput.subtreeVkDigest.assertEquals(riscZeroExampleNodeVk);
const piDigest = Poseidon.hashPacked(Provable.Array(FrC.provable, 5), pis);
piDigest.assertEquals(input);
piDigest.assertEquals(proof.publicOutput.rightOut);
return undefined;
},
},
},
});
const RiscZeroExampleProof = ZkProgram.Proof(riscZeroExampleVerifier);
export { riscZeroExampleVerifier, RiscZeroExampleProof };
//# sourceMappingURL=verify_risc_zero.js.map