@xorddotcom/shield
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
190 lines • 7.99 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WrappedSnarkJs = void 0;
// @ts-ignore
const bfj_1 = __importDefault(require("bfj"));
// @ts-ignore
const ffjavascript_1 = require("ffjavascript");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const shelljs_1 = __importDefault(require("shelljs"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const utils_1 = require("./utils");
const logger_1 = require("./logger");
const witness_1 = require("./witness");
// @ts-ignore
const fastFile = __importStar(require("fastfile"));
const { zKey, plonk } = require("snarkjs");
const { stringifyBigInts } = ffjavascript_1.utils;
// @ts-ignore
const DEFAULT_NODE_ARGS = "--max-old-space-size=8192 --stack-size=65500";
const NODE_ARGS = process.env.NODE_ARGS || DEFAULT_NODE_ARGS;
const NODE_CMD = `node ${NODE_ARGS}`;
exports.WrappedSnarkJs = {
groth16: {
setup: async (r1csPath, ptauPath, zkeyPath) => {
try {
const response = await zKey.newZKey(r1csPath, ptauPath, zkeyPath);
if (response) {
(0, logger_1.log)(`\n✓ Successful Groth16 setup\n`, "success");
}
return response;
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
contribute: async (zkeyPath, finalZkPath, contributer, entropy) => {
try {
const response = await zKey.contribute(zkeyPath, finalZkPath, contributer, entropy);
if (response) {
(0, logger_1.log)(`✓ Contributed`, "success");
(0, logger_1.log)(`\n✓ Successfully generated the final zkey file\n`, "success");
}
return response;
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
},
plonk: {
setup: async (r1csPath, ptauPath, zkeyPath) => {
try {
const response = await plonk.setup(r1csPath, ptauPath, zkeyPath);
if (response) {
(0, logger_1.log)(`\n✓ Successful Plonk setup\n`, "success");
}
return response;
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
},
util: {
generateVkey: async (zkeyPath, vKeyPath) => {
try {
const vKey = await zKey.exportVerificationKey(zkeyPath);
await bfj_1.default.write(vKeyPath, stringifyBigInts(vKey), { space: 1 });
if (vKey) {
(0, logger_1.log)(`\n✓ Successfully generated the verification key file\n`, "success");
}
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
generateSolidityVerifier: async (zkeyPath, solidityPath) => {
try {
const templates = { groth16: "", plonk: "" };
fs_extra_1.default.createFileSync(solidityPath);
templates.groth16 = await fs_1.default.promises.readFile(path_1.default.join(__dirname, "..", "..", "templates/ejs", "verifier_groth16.sol.ejs"), "utf8");
templates.plonk = await fs_1.default.promises.readFile(path_1.default.join(__dirname, "..", "..", "templates/ejs", "verifier_plonk.sol.ejs"), "utf8");
const response = await zKey.exportSolidityVerifier(zkeyPath, templates);
fs_1.default.writeFileSync(solidityPath, response, "utf-8");
if (response) {
(0, logger_1.log)(`\n✓ Successfully generated the solidity verifier file\n`, "success");
}
return response;
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
downloadPtau: async (ptauPath, ptau) => {
try {
if (await (0, utils_1.fileExists)(ptauPath)) {
(0, logger_1.log)(`\n${ptau} file already exist at ${ptauPath}, skipping this step\n`, "warning");
}
else {
const ptauCmd = `wget -O "${ptauPath}" https://hermez.s3-eu-west-1.amazonaws.com/${ptau}`;
shelljs_1.default.exec(ptauCmd);
(0, logger_1.log)(`\n✓ Successfully generated the ${ptau} file\n`, "success");
}
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
generateWtns: async (wtnsPath, wasmPath, input) => {
try {
const fdWasm = await fastFile.readExisting(wasmPath);
const wasm = await fdWasm.read(fdWasm.totalSize);
await fdWasm.close();
const logs = [];
const witness = await (0, witness_1.wtnsBuilder)(wasm, {
log(message, label) {
if (label) {
logs.push(label + ": " + message.toString());
}
else {
logs.push(message.toString());
}
},
});
const witnessBinFile = await witness.calculateWTNSBin(input, true);
const fsWtns = await fastFile.createOverride(wtnsPath);
await fsWtns.write(witnessBinFile);
await fsWtns.close();
const snarkjsPath = path_1.default.join(require.resolve("snarkjs"), "..", "cli.cjs");
const command = `${NODE_CMD} ${snarkjsPath} wej ${wtnsPath} ${wtnsPath.replace(".wtns", ".json")}`;
shelljs_1.default.exec(command);
if (witnessBinFile) {
(0, logger_1.log)(`✓ Successfully generated the witness file`, "success");
}
return witnessBinFile;
}
catch (error) {
(0, logger_1.log)(`${error}`, "error");
throw error;
}
},
},
};
function defaultWitnessOption() {
let logFn = console.log;
let calculateWitnessOptions = {
sanityCheck: true,
logTrigger: logFn,
logOutput: logFn,
logStartComponent: logFn,
logFinishComponent: logFn,
logSetSignal: logFn,
logGetSignal: logFn,
};
return calculateWitnessOptions;
}
//# sourceMappingURL=snarkjs.js.map