From b026c30938dcf1a048262f23408f259bedaf831c Mon Sep 17 00:00:00 2001 From: yu-zhen Date: Tue, 24 Sep 2024 01:16:47 +0900 Subject: [PATCH] feat: collect metadata from console and upload --- packages/coordinator/.env.example | 4 + packages/coordinator/package.json | 5 +- .../scripts/uploadRoundMetadata.ts | 161 ++++++++++++++++++ packages/subgraph/.gitignore | 2 +- packages/subgraph/config/network.example.json | 7 + packages/subgraph/config/network.json | 8 +- packages/subgraph/package.json | 2 +- packages/subgraph/schemas/schema.v1.graphql | 1 + pnpm-lock.yaml | 75 +++++++- 9 files changed, 250 insertions(+), 15 deletions(-) create mode 100644 packages/coordinator/scripts/uploadRoundMetadata.ts create mode 100644 packages/subgraph/config/network.example.json diff --git a/packages/coordinator/.env.example b/packages/coordinator/.env.example index 027629d7..17f50eb1 100644 --- a/packages/coordinator/.env.example +++ b/packages/coordinator/.env.example @@ -53,3 +53,7 @@ TEST_PRIVATE_KEY="" # An RPC API KEY to interact with live networks (used in e2e tests) RPC_API_KEY="" + +# Storage for metadata +# Create a Blob database and get token here: https://vercel.com/dashboard/stores?type=blob +BLOB_READ_WRITE_TOKEN= diff --git a/packages/coordinator/package.json b/packages/coordinator/package.json index d6f12bfc..0d51174d 100644 --- a/packages/coordinator/package.json +++ b/packages/coordinator/package.json @@ -25,7 +25,8 @@ "types": "tsc -p tsconfig.json --noEmit", "generate-keypair": "pnpm run run:node ./scripts/generateKeypair.ts", "download-zkeys:test": "pnpm run run:node ./scripts/downloadZKeys.ts test ./zkeys", - "download-zkeys:prod": "pnpm run run:node ./scripts/downloadZKeys.ts prod ./zkeys" + "download-zkeys:prod": "pnpm run run:node ./scripts/downloadZKeys.ts prod ./zkeys", + "upload-round-metadata": "pnpm run run:node ./scripts/uploadRoundMetadata.ts" }, "dependencies": { "@graphprotocol/graph-cli": "^0.79.0", @@ -38,6 +39,7 @@ "@nestjs/websockets": "^10.3.10", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@vercel/blob": "^0.19.0", "@zerodev/ecdsa-validator": "^5.3.1", "@zerodev/permissions": "^5.4.3", "@zerodev/sdk": "^5.3.8", @@ -54,6 +56,7 @@ "maci-contracts": "^2.3.0", "maci-domainobjs": "^2.0.0", "maci-subgraph": "^2.3.0", + "moment": "^2.30.1", "mustache": "^4.2.0", "permissionless": ">=0.1.18 <=0.1.29", "reflect-metadata": "^0.2.0", diff --git a/packages/coordinator/scripts/uploadRoundMetadata.ts b/packages/coordinator/scripts/uploadRoundMetadata.ts new file mode 100644 index 00000000..86c555c4 --- /dev/null +++ b/packages/coordinator/scripts/uploadRoundMetadata.ts @@ -0,0 +1,161 @@ +import { put } from "@vercel/blob"; +import dotenv from "dotenv"; +import moment from "moment"; + +import path from "path"; +import * as readline from "readline"; + +export interface RoundMetadata { + roundId: string; + description: string; + startsAt: Date; + registrationEndsAt: Date; + votingStartsAt: Date; + votingEndsAt: Date; +} + +interface IUploadMetadataProps { + data: RoundMetadata; + name: string; +} + +dotenv.config({ path: path.resolve(import.meta.dirname, "../.env") }); + +export async function uploadRoundMetadata({ data, name }: IUploadMetadataProps): Promise { + try { + const blob = await put(name, JSON.stringify(data), { + access: "public", + token: process.env.BLOB_READ_WRITE_TOKEN, + }); + + return blob.url; + } catch (e) { + throw new Error(e as string); + } +} + +export async function collectMetadata(): Promise { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + const askRoundId = () => + new Promise((resolve) => { + rl.question("How would you name your round? ", (answer) => { + // eslint-disable-next-line no-console + console.log(`Your roundId is: ${answer}`); + resolve(answer); + }); + }); + + const askDescription = () => + new Promise((resolve) => { + rl.question("Could you briefly introduce this round? ", (answer) => { + // eslint-disable-next-line no-console + console.log(`Your round description is: ${answer}`); + resolve(answer); + }); + }); + + const askStartTime = () => + new Promise((resolve, reject) => { + rl.question("When would you like to start this round? (Please respond in the format yyyy-mm-dd) ", (answer) => { + const isValid = moment(answer, "yyyy-mm-dd").isValid(); + + if (!isValid) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors + reject("Please answer in valid format."); + } + + // eslint-disable-next-line no-console + console.log("You would like to start this round at:", answer); + resolve(new Date(answer)); + }); + }); + + const askRegistrationEndTime = () => + new Promise((resolve, reject) => { + rl.question( + "When would you like to end the registration for applications? (Please respond in the format yyyy-mm-dd) ", + (answer) => { + const isValid = moment(answer, "yyyy-mm-dd").isValid(); + + if (!isValid) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors + reject("Please answer in valid format."); + } + + // eslint-disable-next-line no-console + console.log(`Your application registration end date for this round is: ${answer}`); + resolve(new Date(answer)); + }, + ); + }); + + const askVotingStartTime = () => + new Promise((resolve, reject) => { + rl.question( + "When would you like to start the voting for this round? (Please respond in the format yyyy-mm-dd) ", + (answer) => { + const isValid = moment(answer, "yyyy-mm-dd").isValid(); + + if (!isValid) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors + reject("Please answer in valid format."); + } + + // eslint-disable-next-line no-console + console.log(`Your voting start date for this round is: ${answer}`); + resolve(new Date(answer)); + }, + ); + }); + + const askVotingEndTime = () => + new Promise((resolve, reject) => { + rl.question( + "When would you like to end the voting for this round? (Please respond in the format yyyy-mm-dd) ", + (answer) => { + const isValid = moment(answer, "yyyy-mm-dd").isValid(); + + if (!isValid) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors + reject("Please answer in valid format."); + } + + // eslint-disable-next-line no-console + console.log(`Your voting end date for this round is: ${answer}`); + resolve(new Date(answer)); + }, + ); + }); + + const roundId = await askRoundId(); + const description = await askDescription(); + const startsAt = await askStartTime(); + const registrationEndsAt = await askRegistrationEndTime(); + const votingStartsAt = await askVotingStartTime(); + const votingEndsAt = await askVotingEndTime(); + + rl.close(); + + return { + roundId, + description, + startsAt, + registrationEndsAt, + votingStartsAt, + votingEndsAt, + }; +} + +async function main(): Promise { + const metadata = await collectMetadata(); + const url = await uploadRoundMetadata({ data: metadata, name: `${metadata.roundId}.json` }); + + // eslint-disable-next-line no-console + console.log("The url of uploaded metadata is:", url); +} + +main(); diff --git a/packages/subgraph/.gitignore b/packages/subgraph/.gitignore index 477b9b79..ebace9a7 100644 --- a/packages/subgraph/.gitignore +++ b/packages/subgraph/.gitignore @@ -4,6 +4,6 @@ build generated subgraph.yaml schema.graphql +config/network.json tests/.bin/ tests/.latest.json - diff --git a/packages/subgraph/config/network.example.json b/packages/subgraph/config/network.example.json new file mode 100644 index 00000000..3b588300 --- /dev/null +++ b/packages/subgraph/config/network.example.json @@ -0,0 +1,7 @@ +{ + "network": "optimism-sepolia", + "maciContractAddress": "0xac4d16D0541ca7255579b501A2F1D6F3a436521E", + "registryManagerContractAddress": "0xed5875D05DebcDdDbd902f471447dA97c6d26d7E", + "registryManagerContractStartBlock": 17396799, + "maciContractStartBlock": 17396799 +} diff --git a/packages/subgraph/config/network.json b/packages/subgraph/config/network.json index 3b588300..e2874bbe 100644 --- a/packages/subgraph/config/network.json +++ b/packages/subgraph/config/network.json @@ -1,7 +1,7 @@ { "network": "optimism-sepolia", - "maciContractAddress": "0xac4d16D0541ca7255579b501A2F1D6F3a436521E", - "registryManagerContractAddress": "0xed5875D05DebcDdDbd902f471447dA97c6d26d7E", - "registryManagerContractStartBlock": 17396799, - "maciContractStartBlock": 17396799 + "maciContractAddress": "0xF367D3dAed6d7C6508b70791cF1B0a8354B48543", + "registryManagerContractAddress": "0x7d750119Cd29Bf1d714184b7369A2628555d463a", + "registryManagerContractStartBlock": 17481727, + "maciContractStartBlock": 17481716 } diff --git a/packages/subgraph/package.json b/packages/subgraph/package.json index 8b82d41a..503588d0 100644 --- a/packages/subgraph/package.json +++ b/packages/subgraph/package.json @@ -17,7 +17,7 @@ "generate:schema": "cp ./schemas/schema.${VERSION:-v1}.graphql schema.graphql", "prebuild": "pnpm codegen", "build": "graph build", - "deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ maci-subgraph", + "deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ maci", "create-local": "graph create --node http://localhost:8020/ maci-subgraph", "remove-local": "graph remove --node http://localhost:8020/ maci-subgraph", "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 maci-subgraph --network localhost", diff --git a/packages/subgraph/schemas/schema.v1.graphql b/packages/subgraph/schemas/schema.v1.graphql index f474836e..89dd624c 100644 --- a/packages/subgraph/schemas/schema.v1.graphql +++ b/packages/subgraph/schemas/schema.v1.graphql @@ -68,6 +68,7 @@ type Recipient @entity { type Registry @entity { id: Bytes! # address + metadataUrl: String! "relations" poll: Poll recipients: [Recipient!]! @derivedFrom(field: "registry") diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b1fac88..ede61fb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -192,6 +192,9 @@ importers: '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 version: 5.0.0(hke34ef7km4fdyz52h5gry5opq) + '@vercel/blob': + specifier: ^0.19.0 + version: 0.19.0 '@zerodev/ecdsa-validator': specifier: ^5.3.1 version: 5.3.1(@zerodev/sdk@5.3.9(permissionless@0.1.29(viem@2.19.1(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)))(viem@2.19.1(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)))(permissionless@0.1.29(viem@2.19.1(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)))(viem@2.19.1(bufferutil@4.0.8)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)) @@ -240,6 +243,9 @@ importers: maci-subgraph: specifier: ^2.3.0 version: 2.3.0(jqbxnb2fveugzmo4mmcj7czc2y) + moment: + specifier: ^2.30.1 + version: 2.30.1 mustache: specifier: ^4.2.0 version: 4.2.0 @@ -517,7 +523,7 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.30.0 version: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) @@ -9916,6 +9922,9 @@ packages: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} @@ -16558,6 +16567,27 @@ snapshots: typechain: 8.3.2(typescript@5.5.4) typescript: 5.5.4 + '@nomicfoundation/hardhat-toolbox@5.0.0(72yospjtc42fkew5yhzh5yik5m)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.8(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.8(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.8(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(hke34ef7km4fdyz52h5gry5opq)': dependencies: '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.8(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)))(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)) @@ -22289,7 +22319,7 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) @@ -22312,12 +22342,29 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0): dependencies: debug: 4.3.6(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.6 + is-core-module: 2.15.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0): + dependencies: + debug: 4.3.6(supports-color@8.1.1) + enhanced-resolve: 5.17.1 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 @@ -22353,7 +22400,7 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -22368,14 +22415,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): + dependencies: + debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + eslint: 8.57.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -26274,7 +26331,7 @@ snapshots: maci-contracts@2.3.0(tnqgnvgpfdbm2nfzhwjuiounlm): dependencies: '@nomicfoundation/hardhat-ethers': 3.0.8(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(4lzaewf5vhmhgkr3zdkxldxwse) + '@nomicfoundation/hardhat-toolbox': 5.0.0(72yospjtc42fkew5yhzh5yik5m) '@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) @@ -27068,6 +27125,8 @@ snapshots: modify-values@1.0.1: {} + moment@2.30.1: {} + motion@10.16.2: dependencies: '@motionone/animation': 10.18.0