以Merkle Tree路径证明为例,使用nodejs与sanrkjs生成零知识证明,并进行本地验证。
版本
"circom": "0.0.35",
"circomlib": "0.0.20",
"snarkjs": "0.1.20"
源码
genKeypair.js
setup,生成pk和vk
const {
compiler } = require("circom");
const {
Circuit, groth ,stringifyBigInts } = require("snarkjs");
const path = require("path");
const fs = require("fs");
const genKeypair = async () => {
console.log("start....");
console.log("Get circtui definition....");
const circuitDef = await compiler(
path.join(__dirname, "./withdraw.circom"),{
}
);
const circuit = new Circuit(circuitDef);
console.log("Setup....");
const {
vk_proof,vk_verifier} = groth.setup(circuit);
//save pk,vk file
fs.writeFileSync("proving_key.json", JSON.stringify(stringifyBigInts(vk_proof)), 'utf8');
fs.writeFileSync("verification_key.json", JSON.stringify(stringifyBigInts(vk_verifier)), 'utf8');
console.log("finish....");
process