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
159 lines • 7.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compile = void 0;
/* eslint-disable @typescript-eslint/prefer-for-of */
/* eslint-disable @typescript-eslint/no-unused-vars */
const chalk_1 = __importDefault(require("chalk"));
const child_process_1 = require("child_process");
const enquirer_1 = require("enquirer");
const ora_1 = __importDefault(require("ora"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const packageInfo_1 = require("../../../utils/packageInfo");
const utils_1 = require("../../../utils/utils");
const logger_1 = require("../../../utils/logger");
var Protocol;
(function (Protocol) {
Protocol["GROTH16"] = "groth16";
Protocol["PLONK"] = "plonk";
})(Protocol || (Protocol = {}));
const compile = 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 contributions = {};
for (let i = 0; i < finalConfig.circom.circuits.length; i++) {
try {
fs_extra_1.default.readFileSync(`${process.cwd()}/${finalConfig.circom.inputBasePath}${circuits[i].name}.circom`, {
encoding: "utf-8",
});
}
catch (e) {
(0, logger_1.log)(`unable to read file ${process.cwd()}/${finalConfig.circom.inputBasePath}${circuits[i].name}.circom`, "warning");
continue;
}
if (finalConfig.circom.circuits[i].protocol === "groth16") {
await (0, enquirer_1.prompt)([
{
type: "input",
name: "contributerName",
message: `Please enter the contribution of ${finalConfig.circom.circuits[i].name} circuit for groth16 setup?`,
initial: "1st Contributor Name",
result: async (value) => {
contributions[`${finalConfig.circom.circuits[i].name}`] = {
contributerName: value.toLowerCase(),
randomEntropy: "random text",
};
return value.toLowerCase();
},
},
{
type: "input",
name: "entropy",
message: `Please enter the entropy of ${finalConfig.circom.circuits[i].name} for groth16 setup?`,
initial: "random text",
result: async (value) => {
contributions[`${finalConfig.circom.circuits[i].name}`].randomEntropy = value.toLowerCase();
return value.toLowerCase();
},
},
]);
}
}
for (let i = 0; i < finalConfig.circom.circuits.length; i++) {
const spinner = (0, ora_1.default)(chalk_1.default.greenBright(`Compiling ${finalConfig.circom.circuits[i].name}`)).start();
const contribution = contributions[finalConfig.circom.circuits[i].name];
const executeCompile = (0, child_process_1.spawn)("bash", [
`${(0, packageInfo_1.getPackageRoot)()}/src/commands/scripts/compile.sh`,
finalConfig.circom.inputBasePath,
finalConfig.circom.outputBasePath,
finalConfig.circom.ptau,
finalConfig.circom.circuits[i].name,
finalConfig.circom.circuits[i].protocol,
finalConfig.circom.circuits[i].circuit,
finalConfig.circom.circuits[i].zkey,
contribution ? contribution.contributerName : "",
contribution ? contribution.randomEntropy : "",
]);
executeCompile.stdout.on("data", (data) => (0, logger_1.log)(data.toString(), "info"));
executeCompile.stderr.on("data", (data) => (0, logger_1.log)(data.toString(), "info"));
executeCompile.stdout.once("close", () => {
(0, utils_1.bumpSolidityVersion)(finalConfig.solidity ? finalConfig.solidity : "^0.8.0", finalConfig.circom.circuits[i].name, finalConfig.circom.circuits[i].protocol);
spinner.succeed(chalk_1.default.greenBright(`${finalConfig.circom.circuits[i].name} succesfully compiled.`));
});
}
}
catch (e) {
(0, logger_1.log)(e.message, "error");
}
};
exports.compile = compile;
//# sourceMappingURL=compile.js.map