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

150 lines 7.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.debug = void 0; /* eslint-disable @typescript-eslint/prefer-for-of */ /* eslint-disable @typescript-eslint/no-unused-vars */ const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const logger_1 = require("../../../utils/logger"); const wasm_1 = require("../../../utils/wasm"); const utils_1 = require("../../../utils/utils"); const snarkjs_1 = require("../../../utils/snarkjs"); const checker_1 = require("../../../utils/checker"); // @ts-ignore const r1csfile_1 = require("r1csfile"); // @ts-ignore const ffjavascript_1 = require("ffjavascript"); const fs = require("fs/promises"); var Protocol; (function (Protocol) { Protocol["GROTH16"] = "groth16"; Protocol["PLONK"] = "plonk"; })(Protocol || (Protocol = {})); const debug = async (options) => { try { let userConfig; let circuits; const defaultConfig = { solidity: "^0.8.0", circom: { inputBasePath: "/circuits", outputBasePath: "/build", ptau: "", circuits: [], }, }; try { userConfig = require(`${process.cwd()}/shield.config.js`); circuits = userConfig.circom.circuits; if (options.circuit) { circuits = circuits.filter((circuit) => { return circuit.name === options.circuit; }); } if (!userConfig.circom) { (0, logger_1.log)("unable to locate circom user defined config in file shield.config.js.", "error"); process.exit(1); } else if (!userConfig.circom.ptau) { (0, logger_1.log)("please define the ptau file name in file shield.config.js.", "error"); process.exit(1); } else if (!circuits.length) { (0, logger_1.log)("please define the circuit details for compilation of circuits in file shield.config.js.", "error"); process.exit(1); } else { for (let i = 0; i < circuits.length; i++) { if (!circuits[i].name) { (0, logger_1.log)("please define the circuit name for compilation of the circuit in file shield.config.js.", "error"); process.exit(1); } if (!circuits[i].protocol) { circuits[i].protocol = Protocol.GROTH16; } if (!circuits[i].zkey) { circuits[i].zkey = circuits[i].name; } if (!circuits[i].circuit) { circuits[i].circuit = `${circuits[i].name}.circom`; } } } } catch (e) { (0, logger_1.log)("unable to locate shield config file.", "error"); process.exit(1); } const finalConfig = { solidity: userConfig.solidity ? userConfig.solidity : defaultConfig.solidity, circom: { inputBasePath: userConfig.circom.inputBasePath ? userConfig.circom.inputBasePath : defaultConfig.circom.inputBasePath, outputBasePath: userConfig.circom.outputBasePath ? userConfig.circom.outputBasePath : defaultConfig.circom.outputBasePath, ptau: userConfig.circom.ptau, circuits, }, }; const wasmFs = await (0, wasm_1.initFS)(); const outputBasePath = `${process.cwd()}${finalConfig.circom.outputBasePath}`; for (let i = 0; i < finalConfig.circom.circuits.length; i++) { const circuitName = finalConfig.circom.circuits[i].name; const spinner = (0, ora_1.default)(chalk_1.default.greenBright(`Debugging ${circuitName}\n`)).start(); const wtnsFilePath = `${process.cwd()}${finalConfig.circom.inputBasePath}/${finalConfig.circom.circuits[i].name}_witness.wtns`; const wasmFilePath = `${outputBasePath}/${circuitName}/${circuitName}_js/${circuitName}.wasm`; const r1csFilePath = `${outputBasePath}/${circuitName}/${circuitName}.r1cs`; const symFilePath = `${outputBasePath}/${circuitName}/${circuitName}.sym`; if (!(await (0, utils_1.fileExists)(wasmFilePath))) { (0, logger_1.log)(`\nUnable to locate ${circuitName}.wasm at dir ${wasmFilePath}, run shield compile to generate .wasm file in this output dir`, "error"); continue; } if (!(await (0, utils_1.fileExists)(r1csFilePath))) { (0, logger_1.log)(`\nUnable to locate file ${circuitName}.r1cs at dir ${r1csFilePath}, run shield compile to generate .r1cs file in this output dir`, "error"); continue; } if (!(await (0, utils_1.fileExists)(symFilePath))) { (0, logger_1.log)(`\nUnable to locate file ${circuitName}.sym at dir ${symFilePath}, run shield compile to generate .sym file in this output dir`, "error"); continue; } const inputFilePath = `${process.cwd()}${finalConfig.circom.inputBasePath}/${finalConfig.circom.circuits[i].input}`; if (await (0, utils_1.fileExists)(inputFilePath)) { try { const input = ffjavascript_1.utils.unstringifyBigInts(JSON.parse(await fs.readFile(inputFilePath, "utf8"))); const wtnsFile = await snarkjs_1.WrappedSnarkJs.util.generateWtns(wtnsFilePath, wasmFilePath, input); const r1cs = await (0, r1csfile_1.load)(r1csFilePath, true, false); const symFile = await wasmFs.readFileSync(symFilePath); await (0, logger_1.logSignals)(r1cs, wtnsFile, symFile, input); const checker = new checker_1.Checker(r1csFilePath, symFilePath); await checker.checkConstraintsAndOutput(wtnsFilePath.replace(".wtns", ".json")); spinner.succeed(chalk_1.default.greenBright(`${circuitName} successfully debugged.`)); } catch (error) { if (error instanceof Error) { spinner.fail(chalk_1.default.redBright(`${error.message}`)); } else { (0, logger_1.log)(`\nerror while debugging the circuit ${circuitName} ${error}`, "error"); spinner.fail(chalk_1.default.redBright(`${error}`)); } } } else { (0, logger_1.log)(`unable to locate ${finalConfig.circom.circuits[i].input} at dir ${inputFilePath} user defined config in file shield.config.js.`, "error"); } } process.exit(0); } catch (error) { (0, logger_1.log)(error.message, "error"); } }; exports.debug = debug; //# sourceMappingURL=debug.js.map