@nori-zk/proof-conversion
Version:
Verifying zkVM proofs inside o1js circuits, to generate Mina compatible proof
51 lines • 2.01 kB
JavaScript
import { ZkProgram, Field, Poseidon } from 'o1js';
import { Accumulator } from '../accumulator.js';
import { preparePairing_1 } from '../piop/plonk_utils.js';
import { VK } from '../vk.js';
import { G1Affine } from '../../ec/index.js';
import { ArrayListHasher, KzgAccumulator, KzgProof, KzgState, } from '../../kzg/structs.js';
import { Fp12 } from '../../towers/fp12.js';
const zkp12 = ZkProgram({
name: 'zkp12',
publicInput: Field,
publicOutput: Field,
methods: {
compute: {
privateInputs: [Accumulator, Field, Fp12],
async method(input, acc, shift_power, c) {
const inDigest = Poseidon.hashPacked(Accumulator, acc);
inDigest.assertEquals(input);
const [kzg_cm_x, kzg_cm_y] = preparePairing_1(VK, acc.proof, acc.state.kzg_random, acc.state.kzg_cm_x, acc.state.kzg_cm_y, acc.fs.zeta);
const A = new G1Affine({ x: kzg_cm_x, y: kzg_cm_y });
const negB = new G1Affine({
x: acc.state.neg_fq_x,
y: acc.state.neg_fq_y,
});
let c_inv = c.inverse();
let kzgProof = new KzgProof({
A,
negB,
shift_power,
c,
c_inv,
pi0: acc.state.pi0,
pi1: acc.state.pi1,
});
let kzgState = new KzgState({
f: c_inv,
lines_hashes_digest: ArrayListHasher.empty(),
});
let kzgAccumulator = new KzgAccumulator({
proof: kzgProof,
state: kzgState,
});
return {
publicOutput: Poseidon.hashPacked(KzgAccumulator, kzgAccumulator),
};
},
},
},
});
const ZKP12Proof = ZkProgram.Proof(zkp12);
export { ZKP12Proof, zkp12 };
//# sourceMappingURL=zkp12.js.map