UNPKG

@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
"use strict"; 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