From 0bbb1ae015c1488b60352cb9fd33a8d2db84ebe6 Mon Sep 17 00:00:00 2001 From: cedoor Date: Wed, 24 Jan 2024 15:10:13 +0000 Subject: [PATCH] chore(contracts): create script to add mock data on testnets Former-commit-id: 76aba71eba561c5c0ad0700295ff56f5941d7b30 --- packages/contracts/package.json | 1 + .../contracts/scripts/create-mock-groups.ts | 62 +++++++++++++++++++ packages/contracts/scripts/utils.ts | 15 +++++ .../contracts/scripts/verify-contracts.ts | 16 +---- 4 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 packages/contracts/scripts/create-mock-groups.ts create mode 100644 packages/contracts/scripts/utils.ts diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 9aba9bb5..24859d1b 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -6,6 +6,7 @@ "compile": "hardhat compile", "deploy": "hardhat deploy", "verify": "hardhat run scripts/verify-contracts.ts", + "mock": "hardhat run scripts/create-mock-groups.ts", "test": "hardhat test", "test:report-gas": "REPORT_GAS=true hardhat test", "test:coverage": "hardhat coverage", diff --git a/packages/contracts/scripts/create-mock-groups.ts b/packages/contracts/scripts/create-mock-groups.ts new file mode 100644 index 00000000..486102a3 --- /dev/null +++ b/packages/contracts/scripts/create-mock-groups.ts @@ -0,0 +1,62 @@ +import { Group } from "@semaphore-protocol/group" +import { Identity } from "@semaphore-protocol/identity" +import { generateProof } from "@semaphore-protocol/proof" +import { ethers, hardhatArguments } from "hardhat" +import { getDeployedContracts } from "./utils" + +async function main() { + const deployedContracts = getDeployedContracts(hardhatArguments.network) + + if (deployedContracts) { + const semaphoreContract = await ethers.getContractAt("Semaphore", deployedContracts.Semaphore) + + const [admin] = await ethers.getSigners() + const adminAddress = await admin.getAddress() + + const identity = new Identity(0) + const members = Array.from({ length: 3 }, (_, i) => new Identity(i)).map(({ commitment }) => commitment) + const group = new Group(members) + + const groupId = 42 + + console.info(`Creating group '${groupId}' with ${members.length} members...`) + + // Create a group and add 3 members. + await semaphoreContract["createGroup(uint256,address)"](groupId, adminAddress) + await semaphoreContract.addMembers(groupId, members) + + console.info(`Removing third member from group '${groupId}'...`) + + // Remove the third member. + { + group.removeMember(2) + const { siblings } = group.generateMerkleProof(2) + + await semaphoreContract.removeMember(groupId, members[2], siblings) + } + + console.info(`Updating second member from group '${groupId}'...`) + + // Update the second member. + { + group.updateMember(1, members[2]) + const { siblings } = group.generateMerkleProof(1) + + await semaphoreContract.updateMember(groupId, members[1], members[2], siblings) + } + + console.info(`Validating a proof generated by the first member of group '${groupId}'...`) + + // Validate a proof. + const proof = await generateProof(identity, group, 42, 9, 10) + + await semaphoreContract.validateProof(groupId, proof) + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) diff --git a/packages/contracts/scripts/utils.ts b/packages/contracts/scripts/utils.ts new file mode 100644 index 00000000..285264a9 --- /dev/null +++ b/packages/contracts/scripts/utils.ts @@ -0,0 +1,15 @@ +import { readFileSync } from "fs" + +export type DeployedContracts = { + Poseidon: string + Semaphore: string + Verifier: string +} + +export function getDeployedContracts(network: string | undefined): DeployedContracts | null { + try { + return JSON.parse(readFileSync(`./deployed-contracts/${network}.json`, "utf8")) + } catch (error) { + return null + } +} diff --git a/packages/contracts/scripts/verify-contracts.ts b/packages/contracts/scripts/verify-contracts.ts index 0ad25a8f..43c1e1af 100644 --- a/packages/contracts/scripts/verify-contracts.ts +++ b/packages/contracts/scripts/verify-contracts.ts @@ -1,19 +1,5 @@ import { hardhatArguments, run } from "hardhat" -import { readFileSync } from "fs" - -type DeployedContracts = { - Poseidon: string - Semaphore: string - Verifier: string -} - -export function getDeployedContracts(network: string | undefined): DeployedContracts | null { - try { - return JSON.parse(readFileSync(`./deployed-contracts/${network}.json`, "utf8")) - } catch (error) { - return null - } -} +import { getDeployedContracts } from "./utils" async function verify(address: string, constructorArguments?: any[]): Promise { try {