From bc4b0acefdbe5f2dee3580b101a993eafc524653 Mon Sep 17 00:00:00 2001 From: Andrija Novakovic Date: Thu, 21 Oct 2021 00:14:20 +0200 Subject: [PATCH] deploy scripts with hardhat-deploy module Former-commit-id: 16b46efcabddcc6c54077654e67d7cc48f415ef9 --- deploy/01_poseidon_t3.js | 14 ++++ deploy/02_poseidon_t6.js | 14 ++++ deploy/1_complete.js | 39 ++++++++++ hardhat.config.js | 9 +++ package-lock.json.REMOVED.git-id | 2 +- package.json | 9 ++- scripts/build-circuits.sh | 2 +- scripts/sample-script.js | 32 -------- serve-files/serve.sh | 5 -- test/semaphore-test.js | 122 ------------------------------- test/verify.ts | 52 ------------- utils/index.js | 15 ++++ 12 files changed, 100 insertions(+), 215 deletions(-) create mode 100644 deploy/01_poseidon_t3.js create mode 100644 deploy/02_poseidon_t6.js create mode 100644 deploy/1_complete.js delete mode 100644 scripts/sample-script.js delete mode 100755 serve-files/serve.sh delete mode 100644 test/semaphore-test.js delete mode 100644 test/verify.ts create mode 100644 utils/index.js diff --git a/deploy/01_poseidon_t3.js b/deploy/01_poseidon_t3.js new file mode 100644 index 00000000..44ac4f51 --- /dev/null +++ b/deploy/01_poseidon_t3.js @@ -0,0 +1,14 @@ +const { poseidon_gencontract: poseidonGenContract } = require('circomlibjs'); + +module.exports = async ({ getNamedAccounts, deployments }) => { + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); + + await deploy("PoseidonT3", { + from: deployer, + log: true, + abi: poseidonGenContract.generateABI(2), + bytecode: poseidonGenContract.createCode(2) + }); +}; +module.exports.tags = ['poseidon-t3', 'poseidon']; \ No newline at end of file diff --git a/deploy/02_poseidon_t6.js b/deploy/02_poseidon_t6.js new file mode 100644 index 00000000..0b7fcb8a --- /dev/null +++ b/deploy/02_poseidon_t6.js @@ -0,0 +1,14 @@ +const { poseidon_gencontract: poseidonGenContract } = require('circomlibjs'); + +module.exports = async ({ getNamedAccounts, deployments }) => { + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); + + await deploy("PoseidonT3", { + from: deployer, + log: true, + abi: poseidonGenContract.generateABI(5), + bytecode: poseidonGenContract.createCode(5) + }); +}; +module.exports.tags = ['poseidon-t6', 'poseidon']; \ No newline at end of file diff --git a/deploy/1_complete.js b/deploy/1_complete.js new file mode 100644 index 00000000..d131dcd4 --- /dev/null +++ b/deploy/1_complete.js @@ -0,0 +1,39 @@ +const { poseidon_gencontract: poseidonGenContract } = require('circomlibjs'); +const { genExternalNullifier } = require('../utils'); + +module.exports = async ({ getNamedAccounts, deployments }) => { + const { deploy } = deployments; + const { deployer } = await getNamedAccounts(); + + const poseidonT3 = await deploy("PoseidonT3", { + from: deployer, + log: true, + abi: poseidonGenContract.generateABI(2), + bytecode: poseidonGenContract.createCode(2) + }); + + const poseidonT6 = await deploy("PoseidonT6", { + from: deployer, + log: true, + abi: poseidonGenContract.generateABI(5), + bytecode: poseidonGenContract.createCode(5) + }); + + const externalNullifier = genExternalNullifier('test-voting'); + const semaphore = await deploy('Semaphore', { + from: deployer, + log: true, + args: [20, externalNullifier], + libraries: { + PoseidonT3: poseidonT3.address, + PoseidonT6: poseidonT6.address + } + }); + + await deploy('SemaphoreClient', { + from: deployer, + log: true, + args: [semaphore.address], + }); +}; +module.exports.tags = ['complete']; \ No newline at end of file diff --git a/hardhat.config.js b/hardhat.config.js index f5ba1c1f..5ff07d9c 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,4 +1,5 @@ require("@nomiclabs/hardhat-waffle"); +require('hardhat-deploy'); // This is a sample Hardhat task. To learn how to create your own go to // https://hardhat.org/guides/create-task.html @@ -24,4 +25,12 @@ module.exports = { allowUnlimitedContractSize: true, }, }, + namedAccounts: { + deployer: 0, + tokenOwner: 1, + }, + paths: { + deploy: 'deploy', + deployments: 'deployments', + }, }; diff --git a/package-lock.json.REMOVED.git-id b/package-lock.json.REMOVED.git-id index 7e726a21..2fb8a58d 100644 --- a/package-lock.json.REMOVED.git-id +++ b/package-lock.json.REMOVED.git-id @@ -1 +1 @@ -350d6b1fa2a2537ad0a0585a837479fa82459080 \ No newline at end of file +15bb0cac2b8d3091fe503a0783186b5051ebf07f \ No newline at end of file diff --git a/package.json b/package.json index 9df17803..daeacaa9 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,13 @@ { "name": "semaphore", - "version": "1.0.0", + "version": "2.0.0", "description": "Solidity contracts, zk-SNARK circuits, and test scripts for the Semaphore zero-knowledge signalling gadget. This version uses the Poseidon hash and does not use EdDSA signatures.", "scripts": { - "test": "ts-node test/verify.ts" + "test": "npx hardhat test", + "compile": "npx hardhat compile", + "develop": "npx hardhat node", + "deploy": "npx hardhat deploy --tags complete", + "deployPoseidon": "npx hardhat deploy --tags poseidon" }, "repository": { "type": "git", @@ -20,6 +24,7 @@ "@libsem/identity": "^1.0.8", "@libsem/protocols": "^1.0.9", "circomlib": "^0.5.3", + "hardhat-deploy": "^0.9.4", "web3": "^1.5.2" }, "devDependencies": { diff --git a/scripts/build-circuits.sh b/scripts/build-circuits.sh index edbdc0d2..77f61718 100755 --- a/scripts/build-circuits.sh +++ b/scripts/build-circuits.sh @@ -20,7 +20,7 @@ npx snarkjs zkey contribute semaphore_0000.zkey semaphore_final.zkey npx snarkjs zkey export verificationkey semaphore_final.zkey verification_key.json -snarkjs zkey export solidityverifier semaphore_final.zkey verifier.sol +npx snarkjs zkey export solidityverifier semaphore_final.zkey verifier.sol mv verifier.sol ../contracts/Verifier.sol diff --git a/scripts/sample-script.js b/scripts/sample-script.js deleted file mode 100644 index 90cd8197..00000000 --- a/scripts/sample-script.js +++ /dev/null @@ -1,32 +0,0 @@ -// We require the Hardhat Runtime Environment explicitly here. This is optional -// but useful for running the script in a standalone fashion through `node