diff --git a/scripts/build-circuits.sh b/scripts/build-circuits.sh deleted file mode 100755 index 2cc4a6e3..00000000 --- a/scripts/build-circuits.sh +++ /dev/null @@ -1,31 +0,0 @@ -cd "$(dirname "$0")" - -mkdir -p ../build -mkdir -p ../zkeyFiles -mkdir -p ../contracts - -cd ../build - -if [ -f ./powersOfTau28_hez_final_14.ptau ]; then - echo "powersOfTau28_hez_final_14.ptau already exists. Skipping." -else - echo 'Downloading powersOfTau28_hez_final_14.ptau' - wget https://hermez.s3-eu-west-1.amazonaws.com/powersOfTau28_hez_final_14.ptau -fi - -circom ../circuits/semaphore.circom --r1cs --wasm --sym -snarkjs r1cs export json semaphore.r1cs semaphore.r1cs.json - -snarkjs groth16 setup semaphore.r1cs powersOfTau28_hez_final_14.ptau semaphore_0000.zkey - -snarkjs zkey contribute semaphore_0000.zkey semaphore_0001.zkey --name="Frist contribution" -v -e="Random entropy" -snarkjs zkey contribute semaphore_0001.zkey semaphore_0002.zkey --name="Second contribution" -v -e="Another random entropy" -snarkjs zkey beacon semaphore_0002.zkey semaphore_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2" - -snarkjs zkey export verificationkey semaphore_final.zkey verification_key.json -snarkjs zkey export solidityverifier semaphore_final.zkey verifier.sol - -cp verifier.sol ../contracts/Verifier.sol -cp verification_key.json ../zkeyFiles/verification_key.json -cp semaphore_js/semaphore.wasm ../zkeyFiles/semaphore.wasm -cp semaphore_final.zkey ../zkeyFiles/semaphore_final.zkey \ No newline at end of file diff --git a/scripts/bump-solidity.js b/scripts/bump-solidity.js deleted file mode 100644 index 924d3f7d..00000000 --- a/scripts/bump-solidity.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require("fs"); -const solidityRegex = /pragma solidity \^\d+\.\d+\.\d+/ - -process.chdir('./contracts'); -const content = fs.readFileSync("Verifier.sol", { encoding: 'utf-8' }); -const bumped = content.replace(solidityRegex, 'pragma solidity ^0.8.0'); - - -fs.writeFileSync("Verifier.sol", bumped); \ No newline at end of file diff --git a/scripts/compile-circuits.ts b/scripts/compile-circuits.ts new file mode 100644 index 00000000..2ab220c6 --- /dev/null +++ b/scripts/compile-circuits.ts @@ -0,0 +1,73 @@ +import { exec as _exec } from "child_process" +import download from "download" +import { r1cs, zKey } from "snarkjs" +import fs from "fs" +import util from "util" +import { config } from "../package.json" +import logger from "js-logger" + +logger.useDefaults() + +async function exec(command: string) { + const { stderr, stdout } = await util.promisify(_exec)(command) + + if (stderr) { + throw new Error(stderr) + } + + logger.info(stdout) +} + +async function main() { + const buildPath = config.paths.build.snark + + if (!fs.existsSync(buildPath)) { + fs.mkdirSync(buildPath, { recursive: true }) + } + + if (!fs.existsSync(`${buildPath}/powersOfTau28_hez_final_14.ptau`)) { + const url = "https://hermez.s3-eu-west-1.amazonaws.com" + const fileName = "powersOfTau28_hez_final_14.ptau" + + await download(`${url}/${fileName}`, buildPath) + } + + await exec(`circom ./circuits/semaphore.circom --r1cs --wasm --sym -o ${buildPath}`) + + await r1cs.info(`${buildPath}/semaphore.r1cs`, logger) + + await zKey.newZKey( + `${buildPath}/semaphore.r1cs`, + `${buildPath}/powersOfTau28_hez_final_14.ptau`, + `${buildPath}/semaphore_0000.zkey`, + logger + ) + + await zKey.beacon( + `${buildPath}/semaphore_0000.zkey`, + `${buildPath}/semaphore_final.zkey`, + "Final Beacon", + "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", + 10, + logger + ) + + const verificationKey = await zKey.exportVerificationKey(`${buildPath}/semaphore_final.zkey`, logger) + + let verifierCode = await zKey.exportSolidityVerifier( + `${buildPath}/semaphore_final.zkey`, + { groth16: fs.readFileSync("./node_modules/snarkjs/templates/verifier_groth16.sol.ejs", "utf8") }, + logger + ) + verifierCode = verifierCode.replace(/pragma solidity \^\d+\.\d+\.\d+/, "pragma solidity ^0.8.0") + + fs.writeFileSync(`${buildPath}/verification_key.json`, JSON.stringify(verificationKey), "utf-8") + fs.writeFileSync(`${config.paths.contracts}/Verifier.sol`, verifierCode, "utf-8") +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + })