UNPKG

typecccccccccccc

Version:

p align="center" > <img src="https://xord.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F283b98b7-fdae-4e5a-acaf-248242084e4a%2FICON.png?table=block&id=5306223c-a4f7-45d1-9f54-b9a5f4004cd6&spaceId=49976899-64a1-40f

45 lines (39 loc) 1.05 kB
import { BigNumberish } from "ethers"; import path from "path"; // @ts-ignore import { groth16 } from "snarkjs"; export type Witness = { a: number; b: number; c: number; }; export type ProveProps = { solProof: Proof; publicSignals: Array<string>; }; export type Proof = { a: [BigNumberish, BigNumberish]; b: [[BigNumberish, BigNumberish], [BigNumberish, BigNumberish]]; c: [BigNumberish, BigNumberish]; }; export const prove = async (witness: Witness): Promise<ProveProps> => { const wasmPath = path.join( __dirname, "../build/Multiplier/Multiplier_js/Multiplier.wasm" ); const zkeyPath = path.join(__dirname, "../build/Multiplier/Multiplier.zkey"); const { proof, publicSignals } = await groth16.fullProve( witness, wasmPath, zkeyPath ); const solProof: Proof = { a: [proof.pi_a[0], proof.pi_a[1]], b: [ [proof.pi_b[0][1], proof.pi_b[0][0]], [proof.pi_b[1][1], proof.pi_b[1][0]], ], c: [proof.pi_c[0], proof.pi_c[1]], }; return { solProof, publicSignals }; };