diff --git a/packages/contracts/contracts/maci/MACI.sol b/packages/contracts/contracts/maci/MACI.sol index 7c5a91d0..54f2e948 100644 --- a/packages/contracts/contracts/maci/MACI.sol +++ b/packages/contracts/contracts/maci/MACI.sol @@ -9,11 +9,16 @@ import { ITallyFactory } from "maci-contracts/contracts/interfaces/ITallyFactory import { InitialVoiceCreditProxy } from "maci-contracts/contracts/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol"; import { SignUpGatekeeper } from "maci-contracts/contracts/gatekeepers/SignUpGatekeeper.sol"; +import { ICommon } from "../interfaces/ICommon.sol"; import { IPoll } from "../interfaces/IPoll.sol"; +import { IRegistryManager } from "../interfaces/IRegistryManager.sol"; /// @title MACI - Minimum Anti-Collusion Infrastructure /// @notice A contract which allows users to sign up, and deploy new polls -contract MACI is Ownable, BaseMACI { +contract MACI is Ownable, BaseMACI, ICommon { + /// @notice Registry manager + IRegistryManager public registryManager; + /// @notice Create a new instance of the MACI contract. /// @param pollFactory The PollFactory contract /// @param messageProcessorFactory The MessageProcessorFactory contract @@ -53,4 +58,13 @@ contract MACI is Ownable, BaseMACI { poll.init(); poll.transferOwnership(msg.sender); } + + /// @notice Set RegistryManager for MACI + function setRegistryManager(address registryManagerAddress) public onlyOwner { + if (registryManagerAddress == address(0)) { + revert InvalidAddress(); + } + + registryManager = IRegistryManager(registryManagerAddress); + } } diff --git a/packages/contracts/deploy-config-example.json b/packages/contracts/deploy-config-example.json index 518dc256..e401add4 100644 --- a/packages/contracts/deploy-config-example.json +++ b/packages/contracts/deploy-config-example.json @@ -32,7 +32,11 @@ }, "MACI": { "stateTreeDepth": 10, - "gatekeeper": "EASGatekeeper" + "gatekeeper": "EASGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e" }, "VkRegistry": { "stateTreeDepth": 10, @@ -93,7 +97,11 @@ }, "MACI": { "stateTreeDepth": 10, - "gatekeeper": "ZupassGatekeeper" + "gatekeeper": "ZupassGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0xaEF4103A04090071165F78D45D83A0C0782c2B2a" }, "VkRegistry": { "stateTreeDepth": 10, @@ -155,7 +163,11 @@ }, "MACI": { "stateTreeDepth": 6, - "gatekeeper": "EASGatekeeper" + "gatekeeper": "EASGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0x4200000000000000000000000000000000000021" }, "VkRegistry": { "stateTreeDepth": 6, @@ -217,7 +229,11 @@ }, "MACI": { "stateTreeDepth": 10, - "gatekeeper": "FreeForAllGatekeeper" + "gatekeeper": "FreeForAllGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e" }, "VkRegistry": { "stateTreeDepth": 10, @@ -279,7 +295,11 @@ }, "MACI": { "stateTreeDepth": 10, - "gatekeeper": "FreeForAllGatekeeper" + "gatekeeper": "FreeForAllGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e" }, "VkRegistry": { "stateTreeDepth": 10, @@ -341,7 +361,11 @@ }, "MACI": { "stateTreeDepth": 10, - "gatekeeper": "FreeForAllGatekeeper" + "gatekeeper": "FreeForAllGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0x4200000000000000000000000000000000000021" }, "VkRegistry": { "stateTreeDepth": 10, @@ -408,7 +432,11 @@ }, "MACI": { "stateTreeDepth": 14, - "gatekeeper": "FreeForAllGatekeeper" + "gatekeeper": "FreeForAllGatekeeper", + "registryManager": "EASRegistryManager" + }, + "EASRegistryManager": { + "easAddress": "0x4200000000000000000000000000000000000021" }, "VkRegistry": { "stateTreeDepth": 10, diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 11d23d7d..337cccd1 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -44,7 +44,7 @@ "ethers": "^6.13.2", "hardhat": "^2.22.8", "lowdb": "^1.0.0", - "maci-contracts": "^2.2.1", + "maci-contracts": "0.0.0-ci.17a38c9", "maci-core": "^2.2.0", "maci-domainobjs": "^2.2.0", "solidity-docgen": "^0.6.0-beta.36" diff --git a/packages/contracts/tasks/deploy/maci/05-pollFactory.ts b/packages/contracts/tasks/deploy/maci/05-pollFactory.ts index 471c9f3d..6dfeb601 100644 --- a/packages/contracts/tasks/deploy/maci/05-pollFactory.ts +++ b/packages/contracts/tasks/deploy/maci/05-pollFactory.ts @@ -1,6 +1,6 @@ -import { ContractStorage, Deployment, EContracts, type IDeployParams } from "maci-contracts"; +import { ContractStorage, Deployment, type IDeployParams } from "maci-contracts"; -import { EDeploySteps } from "../../helpers/constants"; +import { EDeploySteps, EContracts } from "../../helpers/constants"; const deployment = Deployment.getInstance(); const storage = ContractStorage.getInstance(); diff --git a/packages/contracts/tasks/deploy/maci/08-maci.ts b/packages/contracts/tasks/deploy/maci/08-maci.ts index 2db081aa..75b219f9 100644 --- a/packages/contracts/tasks/deploy/maci/08-maci.ts +++ b/packages/contracts/tasks/deploy/maci/08-maci.ts @@ -1,7 +1,6 @@ import { ContractStorage, Deployment, - EContracts, genEmptyBallotRoots, type IDeployParams, type GitcoinPassportGatekeeper, @@ -12,7 +11,7 @@ import { } from "maci-contracts"; import { MACI } from "../../../typechain-types"; -import { EDeploySteps } from "../../helpers/constants"; +import { EDeploySteps, EContracts } from "../../helpers/constants"; const deployment = Deployment.getInstance(); const storage = ContractStorage.getInstance(); @@ -53,7 +52,7 @@ deployment.deployTask(EDeploySteps.Maci, "Deploy MACI contract").then((task) => hre.network.name, ); const gatekeeper = - deployment.getDeployConfigField(EContracts.MACI, "gatekeeper") || + deployment.getDeployConfigField(EContracts.MACI, "gatekeeper") || EContracts.FreeForAllGatekeeper; const gatekeeperContractAddress = storage.mustGetAddress(gatekeeper, hre.network.name); const pollFactoryContractAddress = storage.mustGetAddress(EContracts.PollFactory, hre.network.name); diff --git a/packages/contracts/tasks/deploy/maci/10-registryManager.ts b/packages/contracts/tasks/deploy/maci/10-registryManager.ts new file mode 100644 index 00000000..b2e44e65 --- /dev/null +++ b/packages/contracts/tasks/deploy/maci/10-registryManager.ts @@ -0,0 +1,60 @@ +import { ContractStorage, Deployment, type IDeployParams } from "maci-contracts"; + +import type { MACI } from "../../../typechain-types"; + +import { EDeploySteps, EContracts } from "../../helpers/constants"; + +const deployment = Deployment.getInstance(); +const storage = ContractStorage.getInstance(); + +/** + * Deploy step registration and task itself + */ +deployment.deployTask(EDeploySteps.RegistryManager, "Deploy registry manager").then((task) => + task.setAction(async ({ incremental }: IDeployParams, hre) => { + deployment.setHre(hre); + const deployer = await deployment.getDeployer(); + + const registryManagerType = + deployment.getDeployConfigField(EContracts.MACI, "registryManager") || + EContracts.RegistryManager; + + const registryManagerContractAddress = storage.getAddress(registryManagerType, hre.network.name); + + if (incremental && registryManagerContractAddress) { + return; + } + + const easAddress = deployment.getDeployConfigField( + registryManagerType, + "easAddress", + ); + + const args = easAddress ? [easAddress] : []; + + const registryManagerContract = await deployment.deployContract( + { + name: registryManagerType, + signer: deployer, + }, + ...args, + ); + + const maciContractAddress = storage.mustGetAddress(EContracts.MACI, hre.network.name); + + const maciContract = await deployment.getContract({ + name: "contracts/maci/MACI.sol:MACI" as Parameters[0]["name"], + address: maciContractAddress, + }); + + const contractAddress = await registryManagerContract.getAddress(); + await maciContract.setRegistryManager(contractAddress).then((tx) => tx.wait()); + + await storage.register({ + id: registryManagerType, + contract: registryManagerContract, + args, + network: hre.network.name, + }); + }), +); diff --git a/packages/contracts/tasks/helpers/constants/index.ts b/packages/contracts/tasks/helpers/constants/index.ts index 3b13edf4..bbb60ca4 100644 --- a/packages/contracts/tasks/helpers/constants/index.ts +++ b/packages/contracts/tasks/helpers/constants/index.ts @@ -1,10 +1,10 @@ -import { EDeploySteps as EMaciDeploySteps } from "maci-contracts"; +import { EDeploySteps as EMaciDeploySteps, EContracts as EMaciContracts } from "maci-contracts"; /** * Deploy steps for maci-platform related constacts */ export enum EPlatformDeployStep { - Registry = "full:deploy-registry", + RegistryManager = "full:deploy-registry-manager", } /** @@ -15,6 +15,22 @@ export const EDeploySteps = { ...EPlatformDeployStep, }; +/** + * Contracts for maci-platform related constacts + */ +export enum EPlatformContracts { + RegistryManager = "RegistryManager", + EASRegistryManager = "EASRegistryManager", +} + +/** + * Contracts for maci and maci-platform + */ +export const EContracts = { + ...EMaciContracts, + ...EPlatformContracts, +}; + /** * Supported networks for deployment and task running */ diff --git a/packages/contracts/tests/Poll.test.ts b/packages/contracts/tests/Maci.test.ts similarity index 74% rename from packages/contracts/tests/Poll.test.ts rename to packages/contracts/tests/Maci.test.ts index 9efd580d..1b0bcb9e 100644 --- a/packages/contracts/tests/Poll.test.ts +++ b/packages/contracts/tests/Maci.test.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; -import { Signer } from "ethers"; -import { Verifier, VkRegistry, EMode, getSigners } from "maci-contracts"; +import { Signer, ZeroAddress } from "ethers"; +import { Verifier, VkRegistry, EMode, getSigners, deployContract } from "maci-contracts"; import { MaciState } from "maci-core"; import { Keypair, Message, PubKey } from "maci-domainobjs"; @@ -96,5 +96,30 @@ describe("Poll", () => { ); await expect(pollContract.init()).to.be.revertedWithCustomError(pollContract, "PollAlreadyInit"); }); + + it("should not be possible to set zero address as registry manager", async () => { + await expect(maciContract.setRegistryManager(ZeroAddress)).to.be.revertedWithCustomError( + maciContract, + "InvalidAddress", + ); + }); + + it("should not be possible to set registry manager by non-owner", async () => { + const registryManager = await deployContract("RegistryManager", owner, true); + + await expect( + maciContract.connect(user).setRegistryManager(await registryManager.getAddress()), + ).to.be.revertedWithCustomError(maciContract, "OwnableUnauthorizedAccount"); + }); + + it("should set registry manager properly", async () => { + const registryManager = await deployContract("RegistryManager", owner, true); + const registryManagerContractAddress = await registryManager.getAddress(); + + const tx = await maciContract.setRegistryManager(registryManagerContractAddress); + await tx.wait(); + + expect(await maciContract.registryManager()).to.equal(registryManagerContractAddress); + }); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb86b514..187fe15b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,8 +105,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 maci-contracts: - specifier: ^2.2.1 - version: 2.2.1(flxhpragqyg57es62n2ruk56xe) + specifier: 0.0.0-ci.17a38c9 + version: 0.0.0-ci.17a38c9(flxhpragqyg57es62n2ruk56xe) maci-core: specifier: ^2.2.0 version: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -9260,6 +9260,9 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + maci-circuits@0.0.0-ci.17a38c9: + resolution: {integrity: sha512-4D3dBdTHMF2q4Nqa2QNiz5xOLcYYobWCt9oHCI+GuZ50nZhsiNdOnjs55Xehdk2l1yy+Wn9k85+niWS0b7SuuQ==} + maci-circuits@2.1.0: resolution: {integrity: sha512-nYk8OM8NigLPhod+hPRK2sNpfoKjsOakBflsYqOKTA6N/fWHsMsfQUS83Qg6v7y5s1m5Nr/cATj+eWea2esd2Q==} @@ -9274,6 +9277,10 @@ packages: resolution: {integrity: sha512-byWUEeoZ7Z/QvMhe+/321sMNsLWwDAYEfYxTgyW4BJX0X4yX2SldcRIcQWs5U5tEqszlcwz4FH3oBMuYrjBZqQ==} hasBin: true + maci-contracts@0.0.0-ci.17a38c9: + resolution: {integrity: sha512-XHh+TfOsLZ2uwZWsnHEh66NJ8qXi2AIipCqWlP5NYE2sEuBMXhcFZl5butVovmMlB66PtiDLNfyCfo2wartD+Q==} + hasBin: true + maci-contracts@2.1.0: resolution: {integrity: sha512-OwYSYPEmcyXlyrd9LauMsJwbXKftYcdWdcGvcl4o0W8EqlC1ujrav/nWLXDbl6EiHB7QL/mhhlNIP/RQSCstDQ==} hasBin: true @@ -9282,15 +9289,24 @@ packages: resolution: {integrity: sha512-X6NK47fDZ5Gt9K9V0MMFmkU4HwdwhX5bZ34pfme3oTnuagpOXhOWbnALfyKqPwikTjwPwj5190ahiwfTUCFnyw==} hasBin: true + maci-core@0.0.0-ci.17a38c9: + resolution: {integrity: sha512-n5KxNEoY1KXbCm6hKeZ1JjTKTsxhUQ1G6wmo4Wv7E3f98SR+Vtp+/mo7pwuIl75PXV1THBejOTgaZhWouaXBCw==} + maci-core@2.2.0: resolution: {integrity: sha512-jHS40/uGJZMYvslfDls3LUPXK8gAijVrc8L8o51SJQX44iocgR3aWpWycD8df9rBCGBxScZPbtn04CmtFT0lhQ==} + maci-crypto@0.0.0-ci.17a38c9: + resolution: {integrity: sha512-OzEujYBc8wwOA9XfNuvSp2ckIAWbr/i0XBwu1EEryJaJRExbDDNqHhodvor0w/uTPVXPpqK3NSAoQ4NeWrEdow==} + maci-crypto@2.0.0: resolution: {integrity: sha512-bkgOoDA1ABG49MXDzzsQPsFVEijAkLk8ocJKGyeNQS7YpNhC3YEVVz/SE4g0td+N4xJhD3PbXsyHeaTM3ApIjw==} maci-crypto@2.2.0: resolution: {integrity: sha512-kSbWfuAdDWOdtQsEyofvgDIdAE//+iRjFdYjluDpvXnk7//x4t+/U4VEQJlE0kJ3TbCVjmsAaGNcbkmwmU977Q==} + maci-domainobjs@0.0.0-ci.17a38c9: + resolution: {integrity: sha512-UbokT12pJCaTlsyIrV5bPF/9BfeU0G5UTgyQs9S8z9FvZEaiWg+4fDHZ2YU1NQdyLRacwCo0d3WtDhSWw8oczQ==} + maci-domainobjs@2.0.0: resolution: {integrity: sha512-FmQdIC1omsWR/98wt8WvEJj0SDfnVTl9/2FMDp3N4WwUy1lzmmlVjUGKSFKj2+dj2Rx26DmBWsmKhbTIQeoPOQ==} @@ -25425,6 +25441,20 @@ snapshots: lz-string@1.5.0: {} + maci-circuits@0.0.0-ci.17a38c9(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@zk-kit/circuits': 0.4.0 + circomkit: 0.2.1(@types/snarkjs@0.7.8)(snarkjs@0.7.4) + circomlib: 2.0.5 + maci-core: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-crypto: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-domainobjs: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + snarkjs: 0.7.4 + transitivePeerDependencies: + - '@types/snarkjs' + - bufferutil + - utf-8-validate + maci-circuits@2.1.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@zk-kit/circuits': 0.4.0 @@ -25527,20 +25557,20 @@ snapshots: - typescript - utf-8-validate - maci-contracts@2.1.0(7htv7pg2ka7ncyn53uwoaz3m6q): + maci-contracts@0.0.0-ci.17a38c9(flxhpragqyg57es62n2ruk56xe): dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-toolbox': 5.0.0(qc2x6fg2hvcwib2hi3ibxymkay) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-toolbox': 5.0.0(croq2hzbpfcsi44fcj2jwym2jy) '@openzeppelin/contracts': 5.0.2 circomlibjs: 0.1.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) + hardhat: 2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lowdb: 1.0.0 - maci-circuits: 2.1.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-core: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-crypto: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-domainobjs: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - solidity-docgen: 0.6.0-beta.36(hardhat@2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + maci-circuits: 0.0.0-ci.17a38c9(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-core: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-crypto: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-domainobjs: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + solidity-docgen: 0.6.0-beta.36(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) uuid: 10.0.0 transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' @@ -25564,20 +25594,20 @@ snapshots: - typescript - utf-8-validate - maci-contracts@2.2.1(7htv7pg2ka7ncyn53uwoaz3m6q): + maci-contracts@2.1.0(7htv7pg2ka7ncyn53uwoaz3m6q): dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-toolbox': 5.0.0(73opvmet7kz3zbowkltdbofndi) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-toolbox': 5.0.0(qc2x6fg2hvcwib2hi3ibxymkay) '@openzeppelin/contracts': 5.0.2 circomlibjs: 0.1.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) + hardhat: 2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lowdb: 1.0.0 - maci-circuits: 2.2.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-circuits: 2.1.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-core: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-crypto: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-crypto: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-domainobjs: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - solidity-docgen: 0.6.0-beta.36(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + solidity-docgen: 0.6.0-beta.36(hardhat@2.22.7(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) uuid: 10.0.0 transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' @@ -25601,20 +25631,20 @@ snapshots: - typescript - utf-8-validate - maci-contracts@2.2.1(flxhpragqyg57es62n2ruk56xe): + maci-contracts@2.2.1(7htv7pg2ka7ncyn53uwoaz3m6q): dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-toolbox': 5.0.0(croq2hzbpfcsi44fcj2jwym2jy) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-toolbox': 5.0.0(73opvmet7kz3zbowkltdbofndi) '@openzeppelin/contracts': 5.0.2 circomlibjs: 0.1.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) + hardhat: 2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10) lowdb: 1.0.0 maci-circuits: 2.2.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-core: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-crypto: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-domainobjs: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - solidity-docgen: 0.6.0-beta.36(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) + solidity-docgen: 0.6.0-beta.36(hardhat@2.22.8(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))(typescript@5.5.4)(utf-8-validate@5.0.10)) uuid: 10.0.0 transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' @@ -25638,6 +25668,14 @@ snapshots: - typescript - utf-8-validate + maci-core@0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + maci-crypto: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-domainobjs: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + maci-core@2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: maci-crypto: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -25646,6 +25684,16 @@ snapshots: - bufferutil - utf-8-validate + maci-crypto@0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@zk-kit/baby-jubjub': 1.0.1 + '@zk-kit/eddsa-poseidon': 1.0.2 + '@zk-kit/poseidon-cipher': 0.3.1 + ethers: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + maci-crypto@2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@zk-kit/baby-jubjub': 1.0.1 @@ -25666,6 +25714,13 @@ snapshots: - bufferutil - utf-8-validate + maci-domainobjs@0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + maci-crypto: 0.0.0-ci.17a38c9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + maci-domainobjs@2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: maci-crypto: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)