feat: add new scripts

Former-commit-id: c70b85e36c
This commit is contained in:
cedoor
2022-05-30 15:26:08 +02:00
parent ac7f03a695
commit 12e92840a4
4 changed files with 61 additions and 80 deletions

View File

@@ -1,79 +0,0 @@
import { exec as _exec } from "child_process"
import download from "download"
import fs from "fs"
import logger from "js-logger"
import rimraf from "rimraf"
import { zKey } from "snarkjs"
import { promisify } from "util"
import { config } from "../package.json"
logger.useDefaults()
async function exec(command: string) {
const { stderr, stdout } = await promisify(_exec)(command)
if (stderr) {
throw new Error(stderr)
}
logger.info(stdout)
}
async function main() {
const buildPath = config.paths.build.snark
const templatesPath = config.paths["snarkjs-templates"]
const solidityVersion = config.solidity.version
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/powersOfTau28_hez_final_14.ptau"
await download(url, buildPath)
}
await exec(`circom ./circuits/semaphore.circom --r1cs --wasm -o ${buildPath}`)
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
)
let verifierCode = await zKey.exportSolidityVerifier(
`${buildPath}/semaphore_final.zkey`,
{ groth16: fs.readFileSync(`${templatesPath}/verifier_groth16.sol.ejs`, "utf8") },
logger
)
verifierCode = verifierCode.replace(/pragma solidity \^\d+\.\d+\.\d+/, `pragma solidity ^${solidityVersion}`)
fs.writeFileSync(`${config.paths.contracts}/base/Verifier.sol`, verifierCode, "utf-8")
const verificationKey = await zKey.exportVerificationKey(`${buildPath}/semaphore_final.zkey`, logger)
fs.writeFileSync(`${buildPath}/verification_key.json`, JSON.stringify(verificationKey), "utf-8")
fs.renameSync(`${buildPath}/semaphore_js/semaphore.wasm`, `${buildPath}/semaphore.wasm`)
rimraf.sync(`${buildPath}/semaphore_js`)
rimraf.sync(`${buildPath}/powersOfTau28_hez_final_14.ptau`)
rimraf.sync(`${buildPath}/semaphore_0000.zkey`)
rimraf.sync(`${buildPath}/semaphore.r1cs`)
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})

View File

@@ -0,0 +1,25 @@
import download from "download"
import fs from "fs"
import { config } from "../package.json"
async function main() {
const buildPath = config.paths.build["zk-files"]
const url = "http://www.trusted-setup-pse.org/semaphore/semaphore.zip"
if (!fs.existsSync(buildPath)) {
fs.mkdirSync(buildPath, { recursive: true })
}
if (!fs.existsSync(`${buildPath}/16/semaphore.zkey`)) {
await download(url, buildPath, {
extract: true
})
}
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})

View File

@@ -0,0 +1,34 @@
import fs from "fs"
import logger from "js-logger"
import { zKey } from "snarkjs"
import { config } from "../package.json"
logger.useDefaults()
async function main() {
const buildPath = config.paths.build["zk-files"]
const contractsPath = config.paths.contracts
const templatesPath = config.paths["snarkjs-templates"]
const solidityVersion = config.solidity.version
if (fs.existsSync(`${buildPath}/16/semaphore.zkey`)) {
for (let treeDepth = 16; treeDepth <= 32; treeDepth++) {
let verifierCode = await zKey.exportSolidityVerifier(
`${buildPath}/${treeDepth}/semaphore.zkey`,
{ groth16: fs.readFileSync(`${templatesPath}/verifier_groth16.sol.ejs`, "utf8") },
logger
)
verifierCode = verifierCode.replace(/pragma solidity \^\d+\.\d+\.\d+/, `pragma solidity ^${solidityVersion}`)
verifierCode = verifierCode.replace(/Verifier/, `Verifier${treeDepth}`)
fs.writeFileSync(`${contractsPath}/verifiers/Verifier${treeDepth}.sol`, verifierCode, "utf-8")
}
}
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})