diff --git a/.github/workflows/hardhat-tasks.yml b/.github/workflows/hardhat-tasks.yml new file mode 100644 index 00000000..ef17f8b6 --- /dev/null +++ b/.github/workflows/hardhat-tasks.yml @@ -0,0 +1,65 @@ +name: Hardhat Tasks + +on: + push: + branches: [main] + pull_request: + +env: + NEXT_PUBLIC_CHAIN_NAME: ${{ vars.NEXT_PUBLIC_CHAIN_NAME }} + NEXT_PUBLIC_ADMIN_ADDRESS: ${{ vars.NEXT_PUBLIC_ADMIN_ADDRESS }} + NEXT_PUBLIC_APPROVAL_SCHEMA: ${{ vars.NEXT_PUBLIC_APPROVAL_SCHEMA }} + NEXT_PUBLIC_METADATA_SCHEMA: ${{ vars.NEXT_PUBLIC_METADATA_SCHEMA }} + NEXT_PUBLIC_ROUND_ID: ${{ vars.NEXT_PUBLIC_ROUND_ID }} + NEXT_PUBLIC_MACI_ADDRESS: ${{ vars.NEXT_PUBLIC_MACI_ADDRESS }} + NEXT_PUBLIC_TALLY_URL: ${{ vars.NEXT_PUBLIC_TALLY_URL }} + NEXT_PUBLIC_WALLETCONNECT_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_ID }} + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + hardhat-tasks: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "pnpm" + + - name: Install + run: | + pnpm install --frozen-lockfile --prefer-offline + + - name: Build + run: | + pnpm run build + working-directory: packages/contracts + + - name: Run hardhat fork + run: | + pnpm run hardhat & + sleep 5 + working-directory: packages/contracts + + - name: Download zkeys + run: | + pnpm download-zkeys:test + + - name: hardhat tasks + run: | + cp ./deploy-config-example.json ./deploy-config.json + pnpm deploy:localhost + working-directory: packages/contracts + + - name: Stop Hardhat + if: always() + run: kill $(lsof -t -i:8545) diff --git a/packages/contracts/contracts/mocks/Mocker.sol b/packages/contracts/contracts/mocks/Mocker.sol index a94260f2..81b9d2eb 100644 --- a/packages/contracts/contracts/mocks/Mocker.sol +++ b/packages/contracts/contracts/mocks/Mocker.sol @@ -2,8 +2,9 @@ pragma solidity ^0.8.20; import "maci-contracts/contracts/crypto/Hasher.sol"; +import "maci-contracts/contracts/crypto/Verifier.sol"; import "maci-contracts/contracts/crypto/MockVerifier.sol"; -import "maci-contracts/contracts/gatekeepers/FreeForAllSignUpGatekeeper.sol"; +import "maci-contracts/contracts/gatekeepers/FreeForAllGatekeeper.sol"; import "maci-contracts/contracts/initialVoiceCreditProxy/ConstantInitialVoiceCreditProxy.sol"; import "maci-contracts/contracts/VkRegistry.sol"; import "maci-contracts/contracts/TallyFactory.sol"; diff --git a/packages/contracts/deploy-config-example.json b/packages/contracts/deploy-config-example.json new file mode 100644 index 00000000..518dc256 --- /dev/null +++ b/packages/contracts/deploy-config-example.json @@ -0,0 +1,440 @@ +{ + "sepolia": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": false + }, + "EASGatekeeper": { + "deploy": true, + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0xe53C60F8069C2f0c3a84F9B3DB5cf56f3100ba56", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0A09FB3f63c13F1C54F2fA41AFB1e7a98cffc774", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 10, + "gatekeeper": "EASGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + }, + "scroll_sepolia": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": false + }, + "EASGatekeeper": { + "deploy": false, + "easAddress": "0xaEF4103A04090071165F78D45D83A0C0782c2B2a", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "0xcbc8a82e3dfc6faa2506f3033271ebc7447f096b" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0x2443D22Db6d25D141A1138D80724e3Eee54FD4C2", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": true, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "d2ce5bb2-99a3-5a61-b7e6-1cd46d2ee00d" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0000000000000000000000000000000000000000", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 10, + "gatekeeper": "ZupassGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 10800, + "coordinatorPubkey": "macipk.0a1ce79a43fa676ee3d2882c79d9164a24d4a22bb6190e3d8fa25d97bffc069a", + "useQuadraticVoting": false + } + }, + "optimism": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": false + }, + "EASGatekeeper": { + "deploy": true, + "easAddress": "0x4200000000000000000000000000000000000021", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0x5558D441779Eca04A329BcD6b47830D2C6607769", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0000000000000000000000000000000000000000", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 6, + "gatekeeper": "EASGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 6, + "intStateTreeDepth": 2, + "messageTreeDepth": 9, + "voteOptionTreeDepth": 3, + "messageBatchDepth": 2, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_6-9-2-3/processMessages_6-9-2-3.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_6-2-3/tallyVotes_6-2-3.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_6-9-2-3/ProcessMessages_6-9-2-3_js/ProcessMessages_6-9-2-3.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_6-2-3/TallyVotes_6-2-3_js/TallyVotes_6-2-3.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_6-9-2-3/processMessagesNonQv_6-9-2-3.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_6-2-3/tallyVotesNonQv_6-2-3.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_6-9-2-3/ProcessMessagesNonQv_6-9-2-3_js/ProcessMessagesNonQv_6-9-2-3.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_6-2-3/TallyVotesNonQv_6-2-3_js/TallyVotesNonQv_6-2-3.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + }, + "arbitrum_sepolia": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": true + }, + "EASGatekeeper": { + "deploy": false, + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0xe53C60F8069C2f0c3a84F9B3DB5cf56f3100ba56", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0A09FB3f63c13F1C54F2fA41AFB1e7a98cffc774", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 10, + "gatekeeper": "FreeForAllGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + }, + "localhost": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": true + }, + "EASGatekeeper": { + "deploy": false, + "easAddress": "0xC2679fBD37d54388Ce493F1DB75320D236e1815e", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0xe53C60F8069C2f0c3a84F9B3DB5cf56f3100ba56", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0A09FB3f63c13F1C54F2fA41AFB1e7a98cffc774", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 10, + "gatekeeper": "FreeForAllGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + }, + "base_sepolia": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": true + }, + "EASGatekeeper": { + "deploy": false, + "easAddress": "0x4200000000000000000000000000000000000021", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0xe53C60F8069C2f0c3a84F9B3DB5cf56f3100ba56", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0A09FB3f63c13F1C54F2fA41AFB1e7a98cffc774", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 10, + "gatekeeper": "FreeForAllGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + }, + "optimism_sepolia": { + "ConstantInitialVoiceCreditProxy": { + "deploy": true, + "amount": 99 + }, + "FreeForAllGatekeeper": { + "deploy": true + }, + "HatsGatekeeper": { + "deploy": false, + "criterionHats": ["26960358043289970096177553829315270011263390106506980876069447401472"], + "hatsProtocolAddress": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137" + }, + "EASGatekeeper": { + "deploy": false, + "easAddress": "0x4200000000000000000000000000000000000021", + "schema": "0xe2636f31239f7948afdd9a9c477048b7fc2a089c347af60e3aa1251e5bf63e5c", + "attester": "the-attester-address" + }, + "GitcoinPassportGatekeeper": { + "deploy": false, + "decoderAddress": "0x5558D441779Eca04A329BcD6b47830D2C6607769", + "passingScore": 5 + }, + "ZupassGatekeeper": { + "deploy": false, + "signer1": "13908133709081944902758389525983124100292637002438232157513257158004852609027", + "signer2": "7654374482676219729919246464135900991450848628968334062174564799457623790084", + "eventId": "69c0caaa-c65d-5345-a20c-867774f18c67", + "zupassVerifier": "0x2272cdb3596617886d0F48524DA486044E0376d6" + }, + "SemaphoreGatekeeper": { + "deploy": false, + "semaphoreContract": "0x0000000000000000000000000000000000000000", + "groupId": 0 + }, + "MACI": { + "stateTreeDepth": 14, + "gatekeeper": "FreeForAllGatekeeper" + }, + "VkRegistry": { + "stateTreeDepth": 10, + "intStateTreeDepth": 1, + "messageTreeDepth": 2, + "voteOptionTreeDepth": 2, + "messageBatchDepth": 1, + "zkeys": { + "qv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessages_10-2-1-2_test/ProcessMessages_10-2-1-2_test_js/ProcessMessages_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotes_10-1-2_test/TallyVotes_10-1-2_test_js/TallyVotes_10-1-2_test.wasm" + }, + "nonQv": { + "processMessagesZkey": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test.0.zkey", + "tallyVotesZkey": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test.0.zkey", + "processWasm": "../coordinator/zkeys/ProcessMessagesNonQv_10-2-1-2_test/ProcessMessagesNonQv_10-2-1-2_test_js/ProcessMessagesNonQv_10-2-1-2_test.wasm", + "tallyWasm": "../coordinator/zkeys/TallyVotesNonQv_10-1-2_test/TallyVotesNonQv_10-1-2_test_js/TallyVotesNonQv_10-1-2_test.wasm" + } + } + }, + "Poll": { + "pollDuration": 3600, + "coordinatorPubkey": "macipk.9a59264310d95cfd8eb7083aebeba221b5c26e77427f12b7c0f50bc1cc35e621", + "useQuadraticVoting": false + } + } +} diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 5fee94be..6960b8b0 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -3,11 +3,15 @@ import "@nomicfoundation/hardhat-toolbox"; import dotenv from "dotenv"; import "hardhat-artifactor"; import "hardhat-contract-sizer"; +import "maci-contracts/tasks/deploy"; +import "maci-contracts/tasks/runner/deployFull"; +import "maci-contracts/tasks/runner/verifyFull"; import "solidity-docgen"; import type { HardhatUserConfig } from "hardhat/config"; // Don't forget to import new tasks here +import "./tasks/deploy"; import { EChainId, ESupportedChains, getEtherscanApiKeys, getNetworkRpcUrls } from "./tasks/helpers/constants"; dotenv.config(); diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 96d6b8f2..11d23d7d 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -32,22 +32,26 @@ "types": "tsc -p tsconfig.json --noEmit", "docs": "hardhat docgen", "coverage": "BLOCK_GAS_LIMIT=1599511627775 hardhat coverage", - "test": "hardhat test --network hardhat" + "test": "hardhat test --network hardhat", + "deploy": "hardhat deploy-full", + "deploy:localhost": "pnpm run deploy" }, "dependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.6", "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/contracts": "^5.0.2", + "circomlibjs": "^0.1.7", "ethers": "^6.13.2", "hardhat": "^2.22.8", "lowdb": "^1.0.0", - "maci-contracts": "0.0.0-ci.b8d42a3", - "maci-core": "^2.0.0", - "maci-domainobjs": "^2.0.0", + "maci-contracts": "^2.2.1", + "maci-core": "^2.2.0", + "maci-domainobjs": "^2.2.0", "solidity-docgen": "^0.6.0-beta.36" }, "devDependencies": { "@types/chai": "^4.3.11", + "@types/circomlibjs": "^0.1.6", "@types/lowdb": "^1.0.15", "@types/mocha": "^10.0.7", "@types/node": "^22.2.0", diff --git a/packages/contracts/scripts/compileSol.ts b/packages/contracts/scripts/compileSol.ts index 30156314..27548bb8 100644 --- a/packages/contracts/scripts/compileSol.ts +++ b/packages/contracts/scripts/compileSol.ts @@ -1,5 +1,5 @@ +import { poseidonContract } from "circomlibjs"; import hre from "hardhat"; -import { buildPoseidonT3, buildPoseidonT4, buildPoseidonT5, buildPoseidonT6 } from "maci-contracts"; import fs from "fs"; import path from "path"; @@ -10,6 +10,17 @@ const PATHS = [ path.resolve(__dirname, "..", "typechain-types"), ]; +type ExtendedHre = typeof hre & { overwriteArtifact: (name: string, code: unknown) => Promise }; + +const buildPoseidon = async (numInputs: number) => { + await (hre as ExtendedHre).overwriteArtifact(`PoseidonT${numInputs + 1}`, poseidonContract.createCode(numInputs)); +}; + +const buildPoseidonT3 = (): Promise => buildPoseidon(2); +const buildPoseidonT4 = (): Promise => buildPoseidon(3); +const buildPoseidonT5 = (): Promise => buildPoseidon(4); +const buildPoseidonT6 = (): Promise => buildPoseidon(5); + async function main(): Promise { await Promise.all(PATHS.map((filepath) => fs.existsSync(filepath) && fs.promises.rm(filepath, { recursive: true }))); diff --git a/packages/contracts/tasks/deploy/index.ts b/packages/contracts/tasks/deploy/index.ts new file mode 100644 index 00000000..7e9c76a3 --- /dev/null +++ b/packages/contracts/tasks/deploy/index.ts @@ -0,0 +1,21 @@ +import fs from "fs"; +import path from "path"; + +/** + * The same as individual imports but doesn't require to add new import line every time + */ +["maci"].forEach((folder) => { + const tasksPath = path.resolve(__dirname, folder); + + if (fs.existsSync(tasksPath)) { + fs.readdirSync(tasksPath) + .filter( + (p) => + (p.endsWith(".ts") && !p.endsWith("index.ts") && !p.endsWith("d.ts")) || + (p.endsWith(".js") && !p.endsWith("index.js")), + ) + .forEach((task) => { + import(`${tasksPath}/${task}`); + }); + } +}); diff --git a/packages/contracts/tasks/deploy/maci/05-pollFactory.ts b/packages/contracts/tasks/deploy/maci/05-pollFactory.ts new file mode 100644 index 00000000..471c9f3d --- /dev/null +++ b/packages/contracts/tasks/deploy/maci/05-pollFactory.ts @@ -0,0 +1,51 @@ +import { ContractStorage, Deployment, EContracts, type IDeployParams } from "maci-contracts"; + +import { EDeploySteps } from "../../helpers/constants"; + +const deployment = Deployment.getInstance(); +const storage = ContractStorage.getInstance(); + +/** + * Deploy step registration and task itself + */ +deployment.deployTask(EDeploySteps.PollFactory, "Deploy poll factory").then((task) => + task.setAction(async ({ incremental }: IDeployParams, hre) => { + deployment.setHre(hre); + const deployer = await deployment.getDeployer(); + + const pollFactoryContractAddress = storage.getAddress(EContracts.PollFactory, hre.network.name); + + if (incremental && pollFactoryContractAddress) { + return; + } + + const poseidonT3ContractAddress = storage.mustGetAddress(EContracts.PoseidonT3, hre.network.name); + const poseidonT4ContractAddress = storage.mustGetAddress(EContracts.PoseidonT4, hre.network.name); + const poseidonT5ContractAddress = storage.mustGetAddress(EContracts.PoseidonT5, hre.network.name); + const poseidonT6ContractAddress = storage.mustGetAddress(EContracts.PoseidonT6, hre.network.name); + + const linkedPollFactoryContract = await hre.ethers.getContractFactory( + "contracts/maci/PollFactory.sol:PollFactory", + { + signer: deployer, + libraries: { + PoseidonT3: poseidonT3ContractAddress, + PoseidonT4: poseidonT4ContractAddress, + PoseidonT5: poseidonT5ContractAddress, + PoseidonT6: poseidonT6ContractAddress, + }, + }, + ); + + const pollFactoryContract = await deployment.deployContractWithLinkedLibraries({ + contractFactory: linkedPollFactoryContract, + }); + + await storage.register({ + id: EContracts.PollFactory, + contract: pollFactoryContract, + args: [], + network: hre.network.name, + }); + }), +); diff --git a/packages/contracts/tasks/deploy/maci/08-maci.ts b/packages/contracts/tasks/deploy/maci/08-maci.ts new file mode 100644 index 00000000..2db081aa --- /dev/null +++ b/packages/contracts/tasks/deploy/maci/08-maci.ts @@ -0,0 +1,138 @@ +import { + ContractStorage, + Deployment, + EContracts, + genEmptyBallotRoots, + type IDeployParams, + type GitcoinPassportGatekeeper, + type EASGatekeeper, + type ZupassGatekeeper, + type SemaphoreGatekeeper, + type HatsGatekeeperBase, +} from "maci-contracts"; + +import { MACI } from "../../../typechain-types"; +import { EDeploySteps } from "../../helpers/constants"; + +const deployment = Deployment.getInstance(); +const storage = ContractStorage.getInstance(); + +const DEFAULT_STATE_TREE_DEPTH = 10; + +/** + * Deploy step registration and task itself + */ +deployment.deployTask(EDeploySteps.Maci, "Deploy MACI contract").then((task) => + task.setAction(async ({ incremental }: IDeployParams, hre) => { + deployment.setHre(hre); + const deployer = await deployment.getDeployer(); + + const maciContractAddress = storage.getAddress(EContracts.MACI, hre.network.name); + + if (incremental && maciContractAddress) { + return; + } + + const poseidonT3ContractAddress = storage.mustGetAddress(EContracts.PoseidonT3, hre.network.name); + const poseidonT4ContractAddress = storage.mustGetAddress(EContracts.PoseidonT4, hre.network.name); + const poseidonT5ContractAddress = storage.mustGetAddress(EContracts.PoseidonT5, hre.network.name); + const poseidonT6ContractAddress = storage.mustGetAddress(EContracts.PoseidonT6, hre.network.name); + + const maciContractFactory = await hre.ethers.getContractFactory("contracts/maci/MACI.sol:MACI", { + signer: deployer, + libraries: { + PoseidonT3: poseidonT3ContractAddress, + PoseidonT4: poseidonT4ContractAddress, + PoseidonT5: poseidonT5ContractAddress, + PoseidonT6: poseidonT6ContractAddress, + }, + }); + + const constantInitialVoiceCreditProxyContractAddress = storage.mustGetAddress( + EContracts.ConstantInitialVoiceCreditProxy, + hre.network.name, + ); + const 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); + const messageProcessorFactoryContractAddress = storage.mustGetAddress( + EContracts.MessageProcessorFactory, + hre.network.name, + ); + const tallyFactoryContractAddress = storage.mustGetAddress(EContracts.TallyFactory, hre.network.name); + + const stateTreeDepth = + deployment.getDeployConfigField(EContracts.MACI, "stateTreeDepth") ?? DEFAULT_STATE_TREE_DEPTH; + + const emptyBallotRoots = genEmptyBallotRoots(stateTreeDepth); + + const maciContract = await deployment.deployContractWithLinkedLibraries( + { contractFactory: maciContractFactory }, + pollFactoryContractAddress, + messageProcessorFactoryContractAddress, + tallyFactoryContractAddress, + gatekeeperContractAddress, + constantInitialVoiceCreditProxyContractAddress, + stateTreeDepth, + emptyBallotRoots, + ); + + if (gatekeeper === EContracts.EASGatekeeper) { + const gatekeeperContract = await deployment.getContract({ + name: EContracts.EASGatekeeper, + address: gatekeeperContractAddress, + }); + const maciInstanceAddress = await maciContract.getAddress(); + + await gatekeeperContract.setMaciInstance(maciInstanceAddress).then((tx) => tx.wait()); + } else if (gatekeeper === EContracts.GitcoinPassportGatekeeper) { + const gatekeeperContract = await deployment.getContract({ + name: EContracts.GitcoinPassportGatekeeper, + address: gatekeeperContractAddress, + }); + const maciInstanceAddress = await maciContract.getAddress(); + + await gatekeeperContract.setMaciInstance(maciInstanceAddress).then((tx) => tx.wait()); + } else if (gatekeeper === EContracts.ZupassGatekeeper) { + const gatekeeperContract = await deployment.getContract({ + name: EContracts.ZupassGatekeeper, + address: gatekeeperContractAddress, + }); + const maciInstanceAddress = await maciContract.getAddress(); + await gatekeeperContract.setMaciInstance(maciInstanceAddress).then((tx) => tx.wait()); + } else if (gatekeeper === EContracts.SemaphoreGatekeeper) { + const gatekeeperContract = await deployment.getContract({ + name: EContracts.SemaphoreGatekeeper, + address: gatekeeperContractAddress, + }); + + const maciInstanceAddress = await maciContract.getAddress(); + await gatekeeperContract.setMaciInstance(maciInstanceAddress).then((tx) => tx.wait()); + } else if (gatekeeper === EContracts.HatsGatekeeper) { + const gatekeeperContract = await deployment.getContract({ + name: EContracts.HatsGatekeeper, + address: gatekeeperContractAddress, + }); + + const maciInstanceAddress = await maciContract.getAddress(); + await gatekeeperContract.setMaciInstance(maciInstanceAddress).then((tx) => tx.wait()); + } + + await storage.register({ + id: EContracts.MACI, + contract: maciContract, + args: [ + pollFactoryContractAddress, + messageProcessorFactoryContractAddress, + tallyFactoryContractAddress, + gatekeeperContractAddress, + constantInitialVoiceCreditProxyContractAddress, + stateTreeDepth, + emptyBallotRoots.map((root) => root.toString()), + ], + network: hre.network.name, + }); + }), +); diff --git a/packages/contracts/tasks/helpers/constants/index.ts b/packages/contracts/tasks/helpers/constants/index.ts index 38ed0b0b..3b13edf4 100644 --- a/packages/contracts/tasks/helpers/constants/index.ts +++ b/packages/contracts/tasks/helpers/constants/index.ts @@ -1,3 +1,20 @@ +import { EDeploySteps as EMaciDeploySteps } from "maci-contracts"; + +/** + * Deploy steps for maci-platform related constacts + */ +export enum EPlatformDeployStep { + Registry = "full:deploy-registry", +} + +/** + * Deploy steps for maci and maci-platform + */ +export const EDeploySteps = { + ...EMaciDeploySteps, + ...EPlatformDeployStep, +}; + /** * Supported networks for deployment and task running */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d57b289e..8ff17f62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,6 +92,9 @@ importers: '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 + circomlibjs: + specifier: ^0.1.7 + version: 0.1.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: specifier: ^6.13.2 version: 6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -102,14 +105,14 @@ importers: specifier: ^1.0.0 version: 1.0.0 maci-contracts: - specifier: 0.0.0-ci.b8d42a3 - version: 0.0.0-ci.b8d42a3(flxhpragqyg57es62n2ruk56xe) + specifier: ^2.2.1 + version: 2.2.1(flxhpragqyg57es62n2ruk56xe) maci-core: - specifier: ^2.0.0 - version: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + specifier: ^2.2.0 + version: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) maci-domainobjs: - specifier: ^2.0.0 - version: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + specifier: ^2.2.0 + version: 2.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) solidity-docgen: specifier: ^0.6.0-beta.36 version: 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)) @@ -117,6 +120,9 @@ importers: '@types/chai': specifier: ^4.3.11 version: 4.3.17 + '@types/circomlibjs': + specifier: ^0.1.6 + version: 0.1.6 '@types/lowdb': specifier: ^1.0.15 version: 1.0.15 @@ -3783,6 +3789,9 @@ packages: '@types/chai@4.3.17': resolution: {integrity: sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow==} + '@types/circomlibjs@0.1.6': + resolution: {integrity: sha512-yF174bPDaiKgejlZzCSqKwZaqXhlxMcVEHrAtstFohwP05OjtvHXOdxO6HQeTg8WwIdgMg7MJb1WyWZdUCGlPQ==} + '@types/cli-progress@3.11.6': resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} @@ -9172,42 +9181,39 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - maci-circuits@0.0.0-ci.b8d42a3: - resolution: {integrity: sha512-uXZp/m2bYk1ac8MJu1aiexW1G/eqRUHciJv4+sQsjeBCDdnStEMS/rj9KNzZQPbENESiq04vGn2l+jxowFaU3Q==} - maci-circuits@2.1.0: resolution: {integrity: sha512-nYk8OM8NigLPhod+hPRK2sNpfoKjsOakBflsYqOKTA6N/fWHsMsfQUS83Qg6v7y5s1m5Nr/cATj+eWea2esd2Q==} + maci-circuits@2.2.0: + resolution: {integrity: sha512-KKAQaFGuIXXzxXZOcpVys9fFRI8GKsA9gdgnTjC/YRf0ieBF8LvsArTsRVxdtSNSHVi/m6jPITMqjn7PlimIbQ==} + maci-cli@2.1.0: resolution: {integrity: sha512-nrbzEqwtRAoGtW1L34blmyEtXMRJsrZ0ovV2GY++yEZFiaYLLdPGzbDcrxBHMoViIrIjo/nNQn9CxqwzSI5+tw==} hasBin: true - maci-contracts@0.0.0-ci.b8d42a3: - resolution: {integrity: sha512-fnREAdMK92olVulMkxN+XDZlxUqFfszxS81GYOVbYYiGUYsmE2sHHSun2k/2Rqo3r2HtSNHdaQmm7AvYE5/+Eg==} - hasBin: true - maci-contracts@2.1.0: resolution: {integrity: sha512-OwYSYPEmcyXlyrd9LauMsJwbXKftYcdWdcGvcl4o0W8EqlC1ujrav/nWLXDbl6EiHB7QL/mhhlNIP/RQSCstDQ==} hasBin: true - maci-core@0.0.0-ci.b8d42a3: - resolution: {integrity: sha512-fAzIXuwMDWOfFESGxWwg/07j8KyXfEtdzY97C+RIOk5QgPPHCtTm/9HgpqKVLVrX75BHbauB2IEMbrgb/76PgQ==} - - maci-core@2.0.0: - resolution: {integrity: sha512-FI7L3QB5E2mNaHQNrjnfHjNGnpZMvmHN1ZBlHgRHgz1xu02c/uR4FrO8A9cudWoGJzefA/y+nEb4irdirfTFJA==} + maci-contracts@2.2.1: + resolution: {integrity: sha512-X6NK47fDZ5Gt9K9V0MMFmkU4HwdwhX5bZ34pfme3oTnuagpOXhOWbnALfyKqPwikTjwPwj5190ahiwfTUCFnyw==} + hasBin: true - maci-crypto@0.0.0-ci.b8d42a3: - resolution: {integrity: sha512-KnGpZKtg0qlpdgDExN43c8jeVL1I7KltBlC9CRFUb/cgewvEiZhKL0QxXUROBDDURFLqS/Tph7fHEPzPu3VTKA==} + maci-core@2.2.0: + resolution: {integrity: sha512-jHS40/uGJZMYvslfDls3LUPXK8gAijVrc8L8o51SJQX44iocgR3aWpWycD8df9rBCGBxScZPbtn04CmtFT0lhQ==} maci-crypto@2.0.0: resolution: {integrity: sha512-bkgOoDA1ABG49MXDzzsQPsFVEijAkLk8ocJKGyeNQS7YpNhC3YEVVz/SE4g0td+N4xJhD3PbXsyHeaTM3ApIjw==} - maci-domainobjs@0.0.0-ci.b8d42a3: - resolution: {integrity: sha512-25yhHi+obvEkiW7JBnbTGPScORCep8AYJkXpQ72LyU/v+YI1U0zzVcJvoy3wcam9DfV+dh2kL27F+KDXMv8uwQ==} + maci-crypto@2.2.0: + resolution: {integrity: sha512-kSbWfuAdDWOdtQsEyofvgDIdAE//+iRjFdYjluDpvXnk7//x4t+/U4VEQJlE0kJ3TbCVjmsAaGNcbkmwmU977Q==} maci-domainobjs@2.0.0: resolution: {integrity: sha512-FmQdIC1omsWR/98wt8WvEJj0SDfnVTl9/2FMDp3N4WwUy1lzmmlVjUGKSFKj2+dj2Rx26DmBWsmKhbTIQeoPOQ==} + maci-domainobjs@2.2.0: + resolution: {integrity: sha512-pPHqtdIHaPPvMGmWnmx7zXcXQM5+Q8ZGObeSEXgmH60ZKJTQgdoh5z+hs0TfLWEfoWmwWcetLl94EEfZQj0+vg==} + maci-subgraph@2.1.0: resolution: {integrity: sha512-WRyuBoQLO6kf3ZXrrzwKH3IW0IWnQBSL8JL6OZzKYpcw6+ZUG6PO5eS/JSEg6zsSZk3sxdcCwALHMI862D1TOw==} @@ -16020,6 +16026,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@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))': + dependencies: + debug: 4.3.6(supports-color@8.1.1) + 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) + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - supports-color + '@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))': dependencies: debug: 4.3.6(supports-color@8.1.1) @@ -16085,6 +16100,27 @@ snapshots: ethereumjs-util: 7.1.5 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(73opvmet7kz3zbowkltdbofndi)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@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)))(chai@4.5.0)(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-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-ignition-ethers': 0.15.5(@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-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9(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)))(bufferutil@4.0.8)(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))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.5(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)) + '@nomicfoundation/hardhat-network-helpers': 1.0.11(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-verify': 2.0.9(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)) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4))(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))(typechain@8.3.2(typescript@5.5.4)) + '@types/chai': 4.3.17 + '@types/mocha': 10.0.7 + '@types/node': 20.14.14 + chai: 4.5.0 + 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-gas-reporter: 1.0.10(bufferutil@4.0.8)(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))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.12(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)) + ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + typescript: 5.5.4 + '@nomicfoundation/hardhat-toolbox@5.0.0(croq2hzbpfcsi44fcj2jwym2jy)': dependencies: '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@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)))(chai@4.5.0)(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)) @@ -17934,6 +17970,8 @@ snapshots: '@types/chai@4.3.17': {} + '@types/circomlibjs@0.1.6': {} + '@types/cli-progress@3.11.6': dependencies: '@types/node': 20.14.14 @@ -23185,6 +23223,60 @@ snapshots: - supports-color - utf-8-validate + 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): + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/edr': 0.5.2 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chalk: 2.4.2 + chokidar: 3.6.0 + ci-info: 2.0.0 + debug: 4.3.6(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.7 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.7.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.3.6) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + tsort: 0.0.1 + undici: 5.28.4 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + 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): dependencies: '@ethersproject/abi': 5.7.0 @@ -25168,28 +25260,28 @@ snapshots: lz-string@1.5.0: {} - maci-circuits@0.0.0-ci.b8d42a3(@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): 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.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-crypto: 0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-domainobjs: 0.0.0-ci.b8d42a3(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) 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): + maci-circuits@2.2.0(@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: 2.0.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.0.0(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) snarkjs: 0.7.4 transitivePeerDependencies: - '@types/snarkjs' @@ -25205,10 +25297,10 @@ snapshots: 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) maci-circuits: 2.1.0(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-contracts: 2.1.0(7htv7pg2ka7ncyn53uwoaz3m6q) - maci-core: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + maci-contracts: 2.2.1(7htv7pg2ka7ncyn53uwoaz3m6q) + 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.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) prompt: 1.3.0 transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' @@ -25233,20 +25325,20 @@ snapshots: - typescript - utf-8-validate - maci-contracts@0.0.0-ci.b8d42a3(flxhpragqyg57es62n2ruk56xe): + 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@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.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@22.2.0)(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: 0.0.0-ci.b8d42a3(@types/snarkjs@0.7.8)(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-core: 0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-crypto: 0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-domainobjs: 0.0.0-ci.b8d42a3(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)) + 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)) uuid: 10.0.0 transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' @@ -25270,20 +25362,20 @@ snapshots: - typescript - utf-8-validate - maci-contracts@2.1.0(7htv7pg2ka7ncyn53uwoaz3m6q): + 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.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@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.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@20.14.14)(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.0.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.0.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: 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@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' @@ -25307,23 +25399,52 @@ snapshots: - typescript - utf-8-validate - maci-core@0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + maci-contracts@2.2.1(flxhpragqyg57es62n2ruk56xe): dependencies: - maci-crypto: 0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-domainobjs: 0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@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.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.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)) + uuid: 10.0.0 transitivePeerDependencies: + - '@nomicfoundation/hardhat-chai-matchers' + - '@nomicfoundation/hardhat-ignition-ethers' + - '@nomicfoundation/hardhat-network-helpers' + - '@nomicfoundation/hardhat-verify' + - '@typechain/ethers-v6' + - '@typechain/hardhat' + - '@types/chai' + - '@types/mocha' + - '@types/node' + - '@types/snarkjs' - bufferutil + - c-kzg + - chai + - hardhat-gas-reporter + - solidity-coverage + - supports-color + - ts-node + - typechain + - typescript - utf-8-validate - maci-core@2.0.0(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): dependencies: - maci-crypto: 2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - maci-domainobjs: 2.0.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) transitivePeerDependencies: - bufferutil - utf-8-validate - maci-crypto@0.0.0-ci.b8d42a3(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): dependencies: '@zk-kit/baby-jubjub': 1.0.1 '@zk-kit/eddsa-poseidon': 1.0.2 @@ -25333,7 +25454,7 @@ snapshots: - bufferutil - utf-8-validate - maci-crypto@2.0.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): dependencies: '@zk-kit/baby-jubjub': 1.0.1 '@zk-kit/eddsa-poseidon': 1.0.2 @@ -25343,16 +25464,16 @@ snapshots: - bufferutil - utf-8-validate - maci-domainobjs@0.0.0-ci.b8d42a3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + maci-domainobjs@2.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: - maci-crypto: 0.0.0-ci.b8d42a3(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) transitivePeerDependencies: - bufferutil - utf-8-validate - maci-domainobjs@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): dependencies: - maci-crypto: 2.0.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) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -25361,7 +25482,7 @@ snapshots: dependencies: '@graphprotocol/graph-cli': 0.80.0(@types/node@20.14.14)(bufferutil@4.0.8)(encoding@0.1.13)(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.5.4)(utf-8-validate@5.0.10) '@graphprotocol/graph-ts': 0.35.1 - maci-contracts: 2.1.0(7htv7pg2ka7ncyn53uwoaz3m6q) + maci-contracts: 2.2.1(7htv7pg2ka7ncyn53uwoaz3m6q) transitivePeerDependencies: - '@nomicfoundation/hardhat-chai-matchers' - '@nomicfoundation/hardhat-ignition-ethers' @@ -28324,6 +28445,12 @@ snapshots: 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) solidity-ast: 0.4.56 + 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)): + dependencies: + handlebars: 4.7.8 + 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-ast: 0.4.56 + 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)): dependencies: handlebars: 4.7.8