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
text/typescript
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 };
};