UNPKG

@nori-zk/proof-conversion

Version:

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

34 lines 1.41 kB
import { Field, Poseidon, Provable, ZkProgram } from 'o1js'; import { FrC } from '../../towers/index.js'; import { VK } from '../vk_from_env.js'; import { G1Affine } from '../../ec/index.js'; import { bn254 } from '../../ec/g1.js'; const zkp15 = ZkProgram({ name: 'zkp15', publicInput: Field, publicOutput: Field, methods: { compute: { privateInputs: [G1Affine, G1Affine, Provable.Array(FrC.provable, 5)], async method(input, PI, acc, pis) { const pi_hash = Poseidon.hashPacked(G1Affine, PI); const pis_hash = Poseidon.hashPacked(Provable.Array(FrC.provable, 5), pis); const acc_hash = Poseidon.hashPacked(G1Affine, acc); input.assertEquals(Poseidon.hashPacked(Provable.Array(Field, 3), [ pi_hash, pis_hash, acc_hash, ])); let accBn = new bn254({ x: acc.x, y: acc.y }); accBn = accBn.add(VK.ic4.scale(pis[3])); accBn = accBn.add(VK.ic5.scale(pis[4])); accBn.x.assertCanonical().assertEquals(PI.x); accBn.y.assertCanonical().assertEquals(PI.y); return { publicOutput: pis_hash }; }, }, }, }); const ZKP15Proof = ZkProgram.Proof(zkp15); export { ZKP15Proof, zkp15 }; //# sourceMappingURL=zkp15.js.map