mirror of
https://github.com/semaphore-protocol/semaphore.git
synced 2026-04-28 03:00:41 -04:00
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { Group } from "@semaphore-protocol/group"
|
|
import { Identity } from "@semaphore-protocol/identity"
|
|
import { generateProof } from "@semaphore-protocol/proof"
|
|
import { ethers, hardhatArguments } from "hardhat"
|
|
import { getDeployedContractAddress } from "./utils"
|
|
|
|
async function main() {
|
|
if (!hardhatArguments.network) {
|
|
throw Error("Please, define a supported network")
|
|
}
|
|
|
|
const semaphoreAddress = getDeployedContractAddress(hardhatArguments.network, "Semaphore")
|
|
|
|
const semaphoreContract = await ethers.getContractAt("Semaphore", semaphoreAddress)
|
|
|
|
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)
|
|
})
|