From 3d5710598231e10424eb162d7ce77a9165ed19dd Mon Sep 17 00:00:00 2001 From: cedoor Date: Wed, 10 Jan 2024 13:21:05 +0000 Subject: [PATCH 1/2] chore(subgraph): move subgraph to main repo --- .eslintignore | 4 + .github/workflows/production.yml | 36 + .github/workflows/pull-requests.yml | 8 +- .prettierignore | 4 + apps/subgraph/.gitignore | 5 + apps/subgraph/README.md | 137 ++ apps/subgraph/abis/Semaphore.json | 626 ++++++++ apps/subgraph/docker-compose-graph.yml | 60 + apps/subgraph/matchstick.yaml | 1 + apps/subgraph/networks.json | 44 + apps/subgraph/package.json | 26 + apps/subgraph/schema.graphql | 35 + apps/subgraph/scripts/generateSubgraph.js | 10 + apps/subgraph/src/semaphore.ts | 191 +++ apps/subgraph/src/utils.ts | 25 + apps/subgraph/subgraph.template.yaml | 35 + apps/subgraph/tests/.bin/semaphore.wasm | Bin 0 -> 50093 bytes apps/subgraph/tests/semaphore-utils.ts | 160 ++ apps/subgraph/tests/semaphore.test.ts | 156 ++ apps/subgraph/tsconfig.json | 4 + package.json | 10 +- packages/contracts/package.json | 2 +- yarn.lock | 1784 +++++++++++++++++++-- 23 files changed, 3265 insertions(+), 98 deletions(-) create mode 100644 apps/subgraph/.gitignore create mode 100644 apps/subgraph/README.md create mode 100644 apps/subgraph/abis/Semaphore.json create mode 100644 apps/subgraph/docker-compose-graph.yml create mode 100644 apps/subgraph/matchstick.yaml create mode 100644 apps/subgraph/networks.json create mode 100644 apps/subgraph/package.json create mode 100644 apps/subgraph/schema.graphql create mode 100644 apps/subgraph/scripts/generateSubgraph.js create mode 100644 apps/subgraph/src/semaphore.ts create mode 100644 apps/subgraph/src/utils.ts create mode 100644 apps/subgraph/subgraph.template.yaml create mode 100644 apps/subgraph/tests/.bin/semaphore.wasm create mode 100644 apps/subgraph/tests/semaphore-utils.ts create mode 100644 apps/subgraph/tests/semaphore.test.ts create mode 100644 apps/subgraph/tsconfig.json diff --git a/.eslintignore b/.eslintignore index 1d32fe2de..3cf5385d6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -24,6 +24,10 @@ dist build /docs +# subgraph +subgraph.template.yaml +generated + # Docusaurus cache and generated files .docusaurus .cache-loader diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 7c4956b88..f1d3a5133 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -43,12 +43,48 @@ jobs: - name: Build libraries run: yarn build:libraries + - name: Build subgraph + run: yarn build:subgraph + - name: Run Prettier run: yarn prettier - name: Run Eslint run: yarn lint + test-subgraph: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Install Node.js + uses: actions/setup-node@v1 + with: + node-version: 16.x + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn config get cacheFolder)" + + - name: Restore yarn cache + uses: actions/cache@v3 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn + + - name: Build subgraph + run: yarn build:subgraph + + - name: Test subgraph + run: yarn test:subgraph + test: runs-on: ubuntu-latest strategy: diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml index 1a94ec748..9339ef1f0 100644 --- a/.github/workflows/pull-requests.yml +++ b/.github/workflows/pull-requests.yml @@ -41,6 +41,9 @@ jobs: - name: Build libraries run: yarn build:libraries + - name: Build subgraph + run: yarn build:subgraph + - name: Run Prettier run: yarn prettier @@ -77,5 +80,8 @@ jobs: - name: Build libraries run: yarn build:libraries - - name: Test contracts and libraries + - name: Build subgraph + run: yarn build:subgraph + + - name: Test contracts, libraries and subgraph run: yarn test diff --git a/.prettierignore b/.prettierignore index 5b70d8a1c..1b01a7f17 100644 --- a/.prettierignore +++ b/.prettierignore @@ -27,6 +27,10 @@ dist build /docs +# subgraph +subgraph.template.yaml +generated + # github .github/ISSUE_TEMPLATE diff --git a/apps/subgraph/.gitignore b/apps/subgraph/.gitignore new file mode 100644 index 000000000..cc96ad5c6 --- /dev/null +++ b/apps/subgraph/.gitignore @@ -0,0 +1,5 @@ +# Generate output +generated + +# The Graph +subgraph.yaml diff --git a/apps/subgraph/README.md b/apps/subgraph/README.md new file mode 100644 index 000000000..0fa25361f --- /dev/null +++ b/apps/subgraph/README.md @@ -0,0 +1,137 @@ +

+ Semaphore Subgraph +

+ +

+ + + + + Github license + + + Linter eslint + + + Code style prettier + +

+ +
+

+ + 👥 Contributing + +   |   + + 🤝 Code of conduct + +   |   + + 🔎 Issues + +   |   + + 🗣️ Chat & Support + +

+
+ +| The Graph is an indexing protocol for querying networks like Ethereum and IPFS. Our subgraphs allow you to get data from the [`Semaphore.sol`](https://github.com/semaphore-protocol/semaphore/blob/main/contracts/Semaphore.sol) smart contract. | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + +## Networks + +| Semaphore version | Sepolia | Goerli | Mumbai | Optimism Goerli | Arbitrum Goerli | Arbitrum One | +| ----------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| v2.0 | N/A | N/A | N/A | N/A | N/A | [semaphore-protocol/arbitrum](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/arbitrum) | +| v2.5 | N/A | [semaphore-protocol/goerli](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/goerli) | N/A | N/A | N/A | N/A | +| v2.6 | N/A | [semaphore-protocol/goerli-5259d3](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/goerli-5259d3) | N/A | N/A | N/A | [semaphore-protocol/arbitrum-86337c](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/arbitrum-86337c) | +| v3.0 - v3.1 | N/A | [semaphore-protocol/goerli-89490c](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/goerli-89490c) | N/A | N/A | N/A | [semaphore-protocol/arbitrum-72dca3](https://thegraph.com/hosted-service/subgraph/semaphore-protocol/arbitrum-72dca3) | +| >= v3.2 | [semaphore-sepolia](https://api.studio.thegraph.com/query/14377/semaphore-sepolia/v3.6.1) | [semaphore-goerli](https://api.studio.thegraph.com/query/14377/semaphore-goerli/v3.6.1) | [semaphore-mumbai](https://api.studio.thegraph.com/query/14377/semaphore-mumbai/v3.6.1) | [semaphore-optimism-goerli](https://api.studio.thegraph.com/query/14377/semaphore-optimism-goerli/v3.6.1) | [semaphore-arbitrum-goerli](https://api.studio.thegraph.com/query/14377/semaphore-arbitrum-goerli/v3.6.1) | [semaphore-arbitrum](https://api.studio.thegraph.com/query/14377/semaphore-arbitrum/v3.6.1) | + +## 🛠 Install + +Clone this repository: + +```bash +git clone https://github.com/semaphore-protocol/semaphore.git +``` + +and install the dependencies: + +```bash +cd semaphore/apps/subgraph && yarn +``` + +## Usage + +The subgraph definition consists of a few files: + +- `subgraph.template.yaml`: a YAML file containing the subgraph manifest, +- `schema.graphql`: a GraphQL schema that defines what data is stored for the subgraph, and how to query it via GraphQL, +- `src/semaphore.ts`: AssemblyScript code that translates from the event data to the entities defined in the schema. + +### Code generation + +Generate AssemblyScript types for the subgraph (required every time the schema changes): + +```bash +yarn codegen +``` + +It also generates a `subgraph.yaml` file for your specific network. + +### Testing + +After generating the types and `subgraph.yaml` file, test your subgraph: + +```bash +yarn test +``` + +### Deployment + +#### TheGraph Studio + +Set the authorization code that links your account on thegraph.com: + +```bash +yarn auth +``` + +Deploy the subgraph to the [TheGraph Studio](https://thegraph.com/studio/): + +```bash +yarn deploy +``` + +#### Local + +Start services required for TheGraph node by running: + +```bash +docker compose -f docker-compose-graph.yml up +``` + +Start a local Hardhat node and deploy the [Semaphore contract](https://github.com/semaphore-protocol/semaphore/tree/main/packages/contracts): + +```bash +# CWD = /semaphore/packages/contracts +yarn start +yarn deploy:semaphore --network localhost +``` + +Create the `subgraph.yaml` file for your local network and create/deploy your subgraph: + +```bash +yarn codegen localhost +yarn create-local +yarn deploy-local +``` + +Once the subgraph is published it will start indexing. You can query the subgraph using the following GraphQL endpoint: + +``` +http://127.0.0.1:8000/subgraphs/name/sempahore/graphql +``` diff --git a/apps/subgraph/abis/Semaphore.json b/apps/subgraph/abis/Semaphore.json new file mode 100644 index 000000000..5a0524159 --- /dev/null +++ b/apps/subgraph/abis/Semaphore.json @@ -0,0 +1,626 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Semaphore", + "sourceName": "contracts/Semaphore.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract ISemaphoreVerifier", + "name": "_verifier", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Semaphore__CallerIsNotTheGroupAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__GroupAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__GroupDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__MerkleTreeDepthIsNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__MerkleTreeRootIsExpired", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__MerkleTreeRootIsNotPartOfTheGroup", + "type": "error" + }, + { + "inputs": [], + "name": "Semaphore__YouAreUsingTheSameNillifierTwice", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "GroupAdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "merkleTreeDepth", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "zeroValue", + "type": "uint256" + } + ], + "name": "GroupCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldMerkleTreeDuration", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMerkleTreeDuration", + "type": "uint256" + } + ], + "name": "GroupMerkleTreeDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "merkleTreeRoot", + "type": "uint256" + } + ], + "name": "MemberAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "merkleTreeRoot", + "type": "uint256" + } + ], + "name": "MemberRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIdentityCommitment", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "merkleTreeRoot", + "type": "uint256" + } + ], + "name": "MemberUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "merkleTreeRoot", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nullifierHash", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "externalNullifier", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "ProofVerified", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + } + ], + "name": "addMember", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "identityCommitments", + "type": "uint256[]" + } + ], + "name": "addMembers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "merkleTreeDepth", + "type": "uint256" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "merkleTreeDuration", + "type": "uint256" + } + ], + "name": "createGroup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "merkleTreeDepth", + "type": "uint256" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "createGroup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + } + ], + "name": "getMerkleTreeDepth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + } + ], + "name": "getMerkleTreeRoot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + } + ], + "name": "getNumberOfMerkleTreeLeaves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "groups", + "outputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "merkleTreeDuration", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "proofSiblings", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "proofPathIndices", + "type": "uint8[]" + } + ], + "name": "removeMember", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "updateGroupAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newMerkleTreeDuration", + "type": "uint256" + } + ], + "name": "updateGroupMerkleTreeDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "identityCommitment", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newIdentityCommitment", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "proofSiblings", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "proofPathIndices", + "type": "uint8[]" + } + ], + "name": "updateMember", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "verifier", + "outputs": [ + { + "internalType": "contract ISemaphoreVerifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "groupId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "merkleTreeRoot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nullifierHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "externalNullifier", + "type": "uint256" + }, + { + "internalType": "uint256[8]", + "name": "proof", + "type": "uint256[8]" + } + ], + "name": "verifyProof", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b506040516200214a3803806200214a833981810160405281019062000037919062000096565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000124565b60008151905062000090816200010a565b92915050565b600060208284031215620000a957600080fd5b6000620000b9848285016200007f565b91505092915050565b6000620000cf82620000ea565b9050919050565b6000620000e382620000c2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200011581620000d6565b81146200012157600080fd5b50565b61201680620001346000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636389e1071161008c5780639c112141116100665780639c11214114610246578063dabc4d5114610262578063ec45622a14610292578063fcf0b6ec146102ae576100ea565b80636389e107146101c957806365e54f83146101f957806396324bd414610215576100ea565b80633bc778e3116100c85780633bc778e31461014557806343989f8514610161578063568ee8261461017d578063638480be14610199576100ea565b806304245371146100ef5780631783efc31461010b5780632b7ac3f314610127575b600080fd5b61010960048036038101906101049190611655565b6102ca565b005b610125600480360381019061012091906116ad565b610410565b005b61012f6104fc565b60405161013c9190611b24565b60405180910390f35b61015f600480360381019061015a91906118e6565b610522565b005b61017b6004803603810190610176919061179b565b6107cf565b005b61019760048036038101906101929190611619565b6108c3565b005b6101b360048036038101906101ae91906115f0565b610a22565b6040516101c09190611c5b565b60405180910390f35b6101e360048036038101906101de91906115f0565b610a41565b6040516101f09190611c5b565b60405180910390f35b610213600480360381019061020e9190611738565b610a60565b005b61022f600480360381019061022a91906115f0565b610b84565b60405161023d929190611afb565b60405180910390f35b610260600480360381019061025b91906116e9565b610bc8565b005b61027c600480360381019061027791906115f0565b610ced565b6040516102899190611c5b565b60405180910390f35b6102ac60048036038101906102a79190611836565b610d0c565b005b6102c860048036038101906102c391906116ad565b610e02565b005b826102d3610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461036d576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b838390508110156103cf576103c4858585848181106103b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610f23565b806001019050610370565b5060006103db85610ced565b905042600260008781526020019081526020016000206002016000838152602001908152602001600020819055505050505050565b81610419610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104b3576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104bd8383610f23565b60006104c884610ced565b9050426002600086815260200190815260200160002060020160008381526020019081526020016000208190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061052d87610a41565b9050600081141561056a576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061057588610ced565b9050808714610648576000600260008a815260200190815260200160002060020160008981526020019081526020016000205490506000600260008b81526020019081526020016000206001015490506000821415610600576040517f4d32958600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808261060c9190611dce565b421115610645576040517f9581a99000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b60026000898152602001908152602001600020600301600086815260200190815260200160002060009054906101000a900460ff16156106b4576040517f948d067400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aca8f2a8887898888886040518763ffffffff1660e01b815260040161071996959493929190611d1b565b60006040518083038186803b15801561073157600080fd5b505afa158015610745573d6000803e3d6000fd5b505050506001600260008a8152602001908152602001600020600301600087815260200190815260200160002060006101000a81548160ff0219169083151502179055508387897f48950129900df26c2140187532df49c8af343c3daf74f1e99e562e1b2be07adc888a6040516107bd929190611c76565b60405180910390a45050505050505050565b856107d8610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610872576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088087878787878761104a565b600061088b88610ced565b905042600260008a81526020019081526020016000206002016000838152602001908152602001600020819055505050505050505050565b816108cc610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610966576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816002600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff166109da610f1b565b73ffffffffffffffffffffffffffffffffffffffff16847f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a4505050565b6000806000838152602001908152602001600020600201549050919050565b6000806000838152602001908152602001600020600001549050919050565b826010811080610a705750602081115b15610aa7576040517fecf64f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab18585611172565b826002600087815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000878152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16867f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a45050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b816010811080610bd85750602081115b15610c0f576040517fecf64f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c198484611172565b816002600086815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e1060026000868152602001908152602001600020600101819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16857f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a450505050565b6000806000838152602001908152602001600020600101549050919050565b86610d15610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610daf576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dbe888888888888886112a3565b6000610dc989610ced565b905042600260008b8152602001908152602001600020600201600083815260200190815260200160002081905550505050505050505050565b81610e0b610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060026000858152602001908152602001600020600101549050826002600086815260200190815260200160002060010181905550837f264b2a8f6763c084235fe832ba903482b2ef1a521336881fc75b987c2dfd29c58285604051610f0d929190611c76565b60405180910390a250505050565b600033905090565b6000610f2e83610a41565b1415610f66576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__63168703fa9091836040518363ffffffff1660e01b8152600401610fb2929190611b3f565b60006040518083038186803b158015610fca57600080fd5b505af4158015610fde573d6000803e3d6000fd5b505050506000610fed83610ced565b905060006001610ffc85610a22565b6110069190611e7e565b9050837f19239b3f93cd10558aaf11423af70c77763bf54f52bcc75bfa74d4d13548cde982858560405161103c93929190611c9f565b60405180910390a250505050565b600061105587610a41565b141561108d576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008087815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__630629596f909187878787876040518763ffffffff1660e01b81526004016110e196959493929190611b68565b60006040518083038186803b1580156110f957600080fd5b505af415801561110d573d6000803e3d6000fd5b50505050600061111c87610ced565b9050600061112a84846113d0565b9050877f3108849c053c77b8073a11256dffb5ffd5b55e93e105a355e1c9061db890d87182898560405161116093929190611c9f565b60405180910390a25050505050505050565b600061117d83610a41565b146111b4576040517f8121725b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006008836040516020016111c99190611ae0565b6040516020818303038152906040528051906020012060001c901c905060008084815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__631095fbb4909184846040518463ffffffff1660e01b815260040161123493929190611bbf565b60006040518083038186803b15801561124c57600080fd5b505af4158015611260573d6000803e3d6000fd5b50505050827f0d000126c26c1bbe400fd2332187f75d58b69306f9ec47b408686189d3a008338383604051611296929190611c76565b60405180910390a2505050565b60006112ae88610a41565b14156112e6576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008088815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__63a547882790918888888888886040518863ffffffff1660e01b815260040161133c9796959493929190611bf6565b60006040518083038186803b15801561135457600080fd5b505af4158015611368573d6000803e3d6000fd5b50505050600061137788610ced565b9050600061138584846113d0565b9050887fea3588e4a2a0c93d6a0e69dfeaf7496f43ccccf02ad9ce0a5b7627cbca4b61b1828a8a866040516113bd9493929190611cd6565b60405180910390a2505050505050505050565b6000806000905060008484905090505b60008160ff1611156114f457600082118061145b5750600085856001846114079190611eb2565b60ff16818110611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114559190611970565b60ff1614155b156114e85760028261146d9190611e24565b9150600185856001846114809190611eb2565b60ff168181106114b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114ce9190611970565b60ff1614156114e7576001826114e49190611dce565b91505b5b806001900390506113e0565b508091505092915050565b60008135905061150e81611f9b565b92915050565b60008190508260206008028201111561152c57600080fd5b92915050565b60008083601f84011261154457600080fd5b8235905067ffffffffffffffff81111561155d57600080fd5b60208301915083602082028301111561157557600080fd5b9250929050565b60008083601f84011261158e57600080fd5b8235905067ffffffffffffffff8111156115a757600080fd5b6020830191508360208202830111156115bf57600080fd5b9250929050565b6000813590506115d581611fb2565b92915050565b6000813590506115ea81611fc9565b92915050565b60006020828403121561160257600080fd5b6000611610848285016115c6565b91505092915050565b6000806040838503121561162c57600080fd5b600061163a858286016115c6565b925050602061164b858286016114ff565b9150509250929050565b60008060006040848603121561166a57600080fd5b6000611678868287016115c6565b935050602084013567ffffffffffffffff81111561169557600080fd5b6116a186828701611532565b92509250509250925092565b600080604083850312156116c057600080fd5b60006116ce858286016115c6565b92505060206116df858286016115c6565b9150509250929050565b6000806000606084860312156116fe57600080fd5b600061170c868287016115c6565b935050602061171d868287016115c6565b925050604061172e868287016114ff565b9150509250925092565b6000806000806080858703121561174e57600080fd5b600061175c878288016115c6565b945050602061176d878288016115c6565b935050604061177e878288016114ff565b925050606061178f878288016115c6565b91505092959194509250565b600080600080600080608087890312156117b457600080fd5b60006117c289828a016115c6565b96505060206117d389828a016115c6565b955050604087013567ffffffffffffffff8111156117f057600080fd5b6117fc89828a01611532565b9450945050606087013567ffffffffffffffff81111561181b57600080fd5b61182789828a0161157c565b92509250509295509295509295565b600080600080600080600060a0888a03121561185157600080fd5b600061185f8a828b016115c6565b97505060206118708a828b016115c6565b96505060406118818a828b016115c6565b955050606088013567ffffffffffffffff81111561189e57600080fd5b6118aa8a828b01611532565b9450945050608088013567ffffffffffffffff8111156118c957600080fd5b6118d58a828b0161157c565b925092505092959891949750929550565b6000806000806000806101a0878903121561190057600080fd5b600061190e89828a016115c6565b965050602061191f89828a016115c6565b955050604061193089828a016115c6565b945050606061194189828a016115c6565b935050608061195289828a016115c6565b92505060a061196389828a01611514565b9150509295509295509295565b60006020828403121561198257600080fd5b6000611990848285016115db565b91505092915050565b60006119a58383611ad1565b60208301905092915050565b6119ba81611ee6565b82525050565b6119cd6101008383611f53565b5050565b60006119dd8385611d95565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611a0c57600080fd5b602083029250611a1d838584611f53565b82840190509392505050565b6000611a358385611da6565b9350611a4082611d7e565b8060005b85811015611a7957611a568284611db7565b611a608882611999565b9750611a6b83611d88565b925050600181019050611a44565b5085925050509392505050565b611a8f81611f2f565b82525050565b8082525050565b611aa581611f18565b82525050565b611ab481611f18565b82525050565b611acb611ac682611f18565b611f62565b82525050565b611ada81611f22565b82525050565b6000611aec8284611aba565b60208201915081905092915050565b6000604082019050611b1060008301856119b1565b611b1d6020830184611a9c565b9392505050565b6000602082019050611b396000830184611a86565b92915050565b6000604082019050611b546000830185611a95565b611b616020830184611aab565b9392505050565b6000608082019050611b7d6000830189611a95565b611b8a6020830188611aab565b8181036040830152611b9d8186886119d1565b90508181036060830152611bb2818486611a29565b9050979650505050505050565b6000606082019050611bd46000830186611a95565b611be16020830185611aab565b611bee6040830184611aab565b949350505050565b600060a082019050611c0b600083018a611a95565b611c186020830189611aab565b611c256040830188611aab565b8181036060830152611c388186886119d1565b90508181036080830152611c4d818486611a29565b905098975050505050505050565b6000602082019050611c706000830184611a9c565b92915050565b6000604082019050611c8b6000830185611a9c565b611c986020830184611a9c565b9392505050565b6000606082019050611cb46000830186611a9c565b611cc16020830185611a9c565b611cce6040830184611a9c565b949350505050565b6000608082019050611ceb6000830187611a9c565b611cf86020830186611a9c565b611d056040830185611a9c565b611d126060830184611a9c565b95945050505050565b60006101a082019050611d316000830189611a9c565b611d3e6020830188611a9c565b611d4b6040830187611a9c565b611d586060830186611a9c565b611d6560808301856119c0565b611d73610180830184611a9c565b979650505050505050565b6000819050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611dc660208401846115db565b905092915050565b6000611dd982611f18565b9150611de483611f18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e1957611e18611f6c565b5b828201905092915050565b6000611e2f82611f18565b9150611e3a83611f18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e7357611e72611f6c565b5b828202905092915050565b6000611e8982611f18565b9150611e9483611f18565b925082821015611ea757611ea6611f6c565b5b828203905092915050565b6000611ebd82611f22565b9150611ec883611f22565b925082821015611edb57611eda611f6c565b5b828203905092915050565b6000611ef182611ef8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611f3a82611f41565b9050919050565b6000611f4c82611ef8565b9050919050565b82818337600083830152505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611fa481611ee6565b8114611faf57600080fd5b50565b611fbb81611f18565b8114611fc657600080fd5b50565b611fd281611f22565b8114611fdd57600080fd5b5056fea2646970667358221220a6777edc645a16d8f81beacbb5ec133f19452c578127e38e7f40d5540508d08464736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636389e1071161008c5780639c112141116100665780639c11214114610246578063dabc4d5114610262578063ec45622a14610292578063fcf0b6ec146102ae576100ea565b80636389e107146101c957806365e54f83146101f957806396324bd414610215576100ea565b80633bc778e3116100c85780633bc778e31461014557806343989f8514610161578063568ee8261461017d578063638480be14610199576100ea565b806304245371146100ef5780631783efc31461010b5780632b7ac3f314610127575b600080fd5b61010960048036038101906101049190611655565b6102ca565b005b610125600480360381019061012091906116ad565b610410565b005b61012f6104fc565b60405161013c9190611b24565b60405180910390f35b61015f600480360381019061015a91906118e6565b610522565b005b61017b6004803603810190610176919061179b565b6107cf565b005b61019760048036038101906101929190611619565b6108c3565b005b6101b360048036038101906101ae91906115f0565b610a22565b6040516101c09190611c5b565b60405180910390f35b6101e360048036038101906101de91906115f0565b610a41565b6040516101f09190611c5b565b60405180910390f35b610213600480360381019061020e9190611738565b610a60565b005b61022f600480360381019061022a91906115f0565b610b84565b60405161023d929190611afb565b60405180910390f35b610260600480360381019061025b91906116e9565b610bc8565b005b61027c600480360381019061027791906115f0565b610ced565b6040516102899190611c5b565b60405180910390f35b6102ac60048036038101906102a79190611836565b610d0c565b005b6102c860048036038101906102c391906116ad565b610e02565b005b826102d3610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461036d576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b838390508110156103cf576103c4858585848181106103b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610f23565b806001019050610370565b5060006103db85610ced565b905042600260008781526020019081526020016000206002016000838152602001908152602001600020819055505050505050565b81610419610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104b3576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104bd8383610f23565b60006104c884610ced565b9050426002600086815260200190815260200160002060020160008381526020019081526020016000208190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061052d87610a41565b9050600081141561056a576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061057588610ced565b9050808714610648576000600260008a815260200190815260200160002060020160008981526020019081526020016000205490506000600260008b81526020019081526020016000206001015490506000821415610600576040517f4d32958600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808261060c9190611dce565b421115610645576040517f9581a99000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b60026000898152602001908152602001600020600301600086815260200190815260200160002060009054906101000a900460ff16156106b4576040517f948d067400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aca8f2a8887898888886040518763ffffffff1660e01b815260040161071996959493929190611d1b565b60006040518083038186803b15801561073157600080fd5b505afa158015610745573d6000803e3d6000fd5b505050506001600260008a8152602001908152602001600020600301600087815260200190815260200160002060006101000a81548160ff0219169083151502179055508387897f48950129900df26c2140187532df49c8af343c3daf74f1e99e562e1b2be07adc888a6040516107bd929190611c76565b60405180910390a45050505050505050565b856107d8610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610872576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088087878787878761104a565b600061088b88610ced565b905042600260008a81526020019081526020016000206002016000838152602001908152602001600020819055505050505050505050565b816108cc610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610966576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816002600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff166109da610f1b565b73ffffffffffffffffffffffffffffffffffffffff16847f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a4505050565b6000806000838152602001908152602001600020600201549050919050565b6000806000838152602001908152602001600020600001549050919050565b826010811080610a705750602081115b15610aa7576040517fecf64f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab18585611172565b826002600087815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000878152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16867f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a45050505050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b816010811080610bd85750602081115b15610c0f576040517fecf64f1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c198484611172565b816002600086815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e1060026000868152602001908152602001600020600101819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16857f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e360405160405180910390a450505050565b6000806000838152602001908152602001600020600101549050919050565b86610d15610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610daf576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dbe888888888888886112a3565b6000610dc989610ced565b905042600260008b8152602001908152602001600020600201600083815260200190815260200160002081905550505050505050505050565b81610e0b610f1b565b73ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517fbb9bf27800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060026000858152602001908152602001600020600101549050826002600086815260200190815260200160002060010181905550837f264b2a8f6763c084235fe832ba903482b2ef1a521336881fc75b987c2dfd29c58285604051610f0d929190611c76565b60405180910390a250505050565b600033905090565b6000610f2e83610a41565b1415610f66576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__63168703fa9091836040518363ffffffff1660e01b8152600401610fb2929190611b3f565b60006040518083038186803b158015610fca57600080fd5b505af4158015610fde573d6000803e3d6000fd5b505050506000610fed83610ced565b905060006001610ffc85610a22565b6110069190611e7e565b9050837f19239b3f93cd10558aaf11423af70c77763bf54f52bcc75bfa74d4d13548cde982858560405161103c93929190611c9f565b60405180910390a250505050565b600061105587610a41565b141561108d576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008087815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__630629596f909187878787876040518763ffffffff1660e01b81526004016110e196959493929190611b68565b60006040518083038186803b1580156110f957600080fd5b505af415801561110d573d6000803e3d6000fd5b50505050600061111c87610ced565b9050600061112a84846113d0565b9050877f3108849c053c77b8073a11256dffb5ffd5b55e93e105a355e1c9061db890d87182898560405161116093929190611c9f565b60405180910390a25050505050505050565b600061117d83610a41565b146111b4576040517f8121725b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006008836040516020016111c99190611ae0565b6040516020818303038152906040528051906020012060001c901c905060008084815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__631095fbb4909184846040518463ffffffff1660e01b815260040161123493929190611bbf565b60006040518083038186803b15801561124c57600080fd5b505af4158015611260573d6000803e3d6000fd5b50505050827f0d000126c26c1bbe400fd2332187f75d58b69306f9ec47b408686189d3a008338383604051611296929190611c76565b60405180910390a2505050565b60006112ae88610a41565b14156112e6576040517f029f057900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008088815260200190815260200160002073__$0c6eb7207c37accf1552a1c47686411ac0$__63a547882790918888888888886040518863ffffffff1660e01b815260040161133c9796959493929190611bf6565b60006040518083038186803b15801561135457600080fd5b505af4158015611368573d6000803e3d6000fd5b50505050600061137788610ced565b9050600061138584846113d0565b9050887fea3588e4a2a0c93d6a0e69dfeaf7496f43ccccf02ad9ce0a5b7627cbca4b61b1828a8a866040516113bd9493929190611cd6565b60405180910390a2505050505050505050565b6000806000905060008484905090505b60008160ff1611156114f457600082118061145b5750600085856001846114079190611eb2565b60ff16818110611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114559190611970565b60ff1614155b156114e85760028261146d9190611e24565b9150600185856001846114809190611eb2565b60ff168181106114b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906114ce9190611970565b60ff1614156114e7576001826114e49190611dce565b91505b5b806001900390506113e0565b508091505092915050565b60008135905061150e81611f9b565b92915050565b60008190508260206008028201111561152c57600080fd5b92915050565b60008083601f84011261154457600080fd5b8235905067ffffffffffffffff81111561155d57600080fd5b60208301915083602082028301111561157557600080fd5b9250929050565b60008083601f84011261158e57600080fd5b8235905067ffffffffffffffff8111156115a757600080fd5b6020830191508360208202830111156115bf57600080fd5b9250929050565b6000813590506115d581611fb2565b92915050565b6000813590506115ea81611fc9565b92915050565b60006020828403121561160257600080fd5b6000611610848285016115c6565b91505092915050565b6000806040838503121561162c57600080fd5b600061163a858286016115c6565b925050602061164b858286016114ff565b9150509250929050565b60008060006040848603121561166a57600080fd5b6000611678868287016115c6565b935050602084013567ffffffffffffffff81111561169557600080fd5b6116a186828701611532565b92509250509250925092565b600080604083850312156116c057600080fd5b60006116ce858286016115c6565b92505060206116df858286016115c6565b9150509250929050565b6000806000606084860312156116fe57600080fd5b600061170c868287016115c6565b935050602061171d868287016115c6565b925050604061172e868287016114ff565b9150509250925092565b6000806000806080858703121561174e57600080fd5b600061175c878288016115c6565b945050602061176d878288016115c6565b935050604061177e878288016114ff565b925050606061178f878288016115c6565b91505092959194509250565b600080600080600080608087890312156117b457600080fd5b60006117c289828a016115c6565b96505060206117d389828a016115c6565b955050604087013567ffffffffffffffff8111156117f057600080fd5b6117fc89828a01611532565b9450945050606087013567ffffffffffffffff81111561181b57600080fd5b61182789828a0161157c565b92509250509295509295509295565b600080600080600080600060a0888a03121561185157600080fd5b600061185f8a828b016115c6565b97505060206118708a828b016115c6565b96505060406118818a828b016115c6565b955050606088013567ffffffffffffffff81111561189e57600080fd5b6118aa8a828b01611532565b9450945050608088013567ffffffffffffffff8111156118c957600080fd5b6118d58a828b0161157c565b925092505092959891949750929550565b6000806000806000806101a0878903121561190057600080fd5b600061190e89828a016115c6565b965050602061191f89828a016115c6565b955050604061193089828a016115c6565b945050606061194189828a016115c6565b935050608061195289828a016115c6565b92505060a061196389828a01611514565b9150509295509295509295565b60006020828403121561198257600080fd5b6000611990848285016115db565b91505092915050565b60006119a58383611ad1565b60208301905092915050565b6119ba81611ee6565b82525050565b6119cd6101008383611f53565b5050565b60006119dd8385611d95565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611a0c57600080fd5b602083029250611a1d838584611f53565b82840190509392505050565b6000611a358385611da6565b9350611a4082611d7e565b8060005b85811015611a7957611a568284611db7565b611a608882611999565b9750611a6b83611d88565b925050600181019050611a44565b5085925050509392505050565b611a8f81611f2f565b82525050565b8082525050565b611aa581611f18565b82525050565b611ab481611f18565b82525050565b611acb611ac682611f18565b611f62565b82525050565b611ada81611f22565b82525050565b6000611aec8284611aba565b60208201915081905092915050565b6000604082019050611b1060008301856119b1565b611b1d6020830184611a9c565b9392505050565b6000602082019050611b396000830184611a86565b92915050565b6000604082019050611b546000830185611a95565b611b616020830184611aab565b9392505050565b6000608082019050611b7d6000830189611a95565b611b8a6020830188611aab565b8181036040830152611b9d8186886119d1565b90508181036060830152611bb2818486611a29565b9050979650505050505050565b6000606082019050611bd46000830186611a95565b611be16020830185611aab565b611bee6040830184611aab565b949350505050565b600060a082019050611c0b600083018a611a95565b611c186020830189611aab565b611c256040830188611aab565b8181036060830152611c388186886119d1565b90508181036080830152611c4d818486611a29565b905098975050505050505050565b6000602082019050611c706000830184611a9c565b92915050565b6000604082019050611c8b6000830185611a9c565b611c986020830184611a9c565b9392505050565b6000606082019050611cb46000830186611a9c565b611cc16020830185611a9c565b611cce6040830184611a9c565b949350505050565b6000608082019050611ceb6000830187611a9c565b611cf86020830186611a9c565b611d056040830185611a9c565b611d126060830184611a9c565b95945050505050565b60006101a082019050611d316000830189611a9c565b611d3e6020830188611a9c565b611d4b6040830187611a9c565b611d586060830186611a9c565b611d6560808301856119c0565b611d73610180830184611a9c565b979650505050505050565b6000819050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611dc660208401846115db565b905092915050565b6000611dd982611f18565b9150611de483611f18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e1957611e18611f6c565b5b828201905092915050565b6000611e2f82611f18565b9150611e3a83611f18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e7357611e72611f6c565b5b828202905092915050565b6000611e8982611f18565b9150611e9483611f18565b925082821015611ea757611ea6611f6c565b5b828203905092915050565b6000611ebd82611f22565b9150611ec883611f22565b925082821015611edb57611eda611f6c565b5b828203905092915050565b6000611ef182611ef8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611f3a82611f41565b9050919050565b6000611f4c82611ef8565b9050919050565b82818337600083830152505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611fa481611ee6565b8114611faf57600080fd5b50565b611fbb81611f18565b8114611fc657600080fd5b50565b611fd281611f22565b8114611fdd57600080fd5b5056fea2646970667358221220a6777edc645a16d8f81beacbb5ec133f19452c578127e38e7f40d5540508d08464736f6c63430008040033", + "linkReferences": { + "@zk-kit/incremental-merkle-tree.sol/IncrementalBinaryTree.sol": { + "IncrementalBinaryTree": [ + { + "length": 20, + "start": 4270 + }, + { + "length": 20, + "start": 4565 + }, + { + "length": 20, + "start": 4910 + }, + { + "length": 20, + "start": 5166 + } + ] + } + }, + "deployedLinkReferences": { + "@zk-kit/incremental-merkle-tree.sol/IncrementalBinaryTree.sol": { + "IncrementalBinaryTree": [ + { + "length": 20, + "start": 3962 + }, + { + "length": 20, + "start": 4257 + }, + { + "length": 20, + "start": 4602 + }, + { + "length": 20, + "start": 4858 + } + ] + } + } +} diff --git a/apps/subgraph/docker-compose-graph.yml b/apps/subgraph/docker-compose-graph.yml new file mode 100644 index 000000000..332efbc5b --- /dev/null +++ b/apps/subgraph/docker-compose-graph.yml @@ -0,0 +1,60 @@ +version: "3.9" + +services: + graph-node: + image: graphprotocol/graph-node + ports: + - "8000:8000" + - "8001:8001" + - "8020:8020" + - "8030:8030" + - "8040:8040" + depends_on: + - ipfs + - postgres + environment: + postgres_host: postgres + postgres_user: graph-node + postgres_pass: let-me-in + postgres_db: graph-node + postgres_port: 5432 + ipfs: "ipfs:5001" + ethereum: "localhost:http://host.docker.internal:8545" # Should use the `localhost` as network name in subgraph.yml + # ethereum: 'goerli:https://goerli.infura.io/v3/YOUR-API-KEY' + GRAPH_LOG: info + GRAPH_ALLOW_NON_DETERMINISTIC_IPFS: 1 + networks: + - the-graph + + ipfs: + image: ipfs/go-ipfs:v0.4.23 + ports: + - "5001:5001" + volumes: + - graph-ipfs:/data/ipfs + networks: + - the-graph + + postgres: + image: postgres + ports: + - "5433:5432" + command: ["postgres", "-cshared_preload_libraries=pg_stat_statements"] + environment: + POSTGRES_USER: graph-node + POSTGRES_PASSWORD: let-me-in + POSTGRES_DB: graph-node + POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" + networks: + - the-graph + volumes: + - graph-postgres:/var/lib/postgresql/data + +networks: + the-graph: + internal: false + driver: bridge + +volumes: + graph-postgres: + graph-ipfs: diff --git a/apps/subgraph/matchstick.yaml b/apps/subgraph/matchstick.yaml new file mode 100644 index 000000000..8851578cc --- /dev/null +++ b/apps/subgraph/matchstick.yaml @@ -0,0 +1 @@ +libsFolder: ../../node_modules diff --git a/apps/subgraph/networks.json b/apps/subgraph/networks.json new file mode 100644 index 000000000..2066652d3 --- /dev/null +++ b/apps/subgraph/networks.json @@ -0,0 +1,44 @@ +{ + "sepolia": { + "Semaphore": { + "address": "0x3889927F0B5Eb1a02C6E2C20b39a1Bd4EAd76131", + "startBlock": 3231111 + } + }, + "goerli": { + "Semaphore": { + "address": "0x3889927F0B5Eb1a02C6E2C20b39a1Bd4EAd76131", + "startBlock": 8777695 + } + }, + "mumbai": { + "Semaphore": { + "address": "0x3889927F0B5Eb1a02C6E2C20b39a1Bd4EAd76131", + "startBlock": 33995010 + } + }, + "optimism-goerli": { + "Semaphore": { + "address": "0x3889927F0B5Eb1a02C6E2C20b39a1Bd4EAd76131", + "startBlock": 7632846 + } + }, + "arbitrum-goerli": { + "Semaphore": { + "address": "0x3889927F0B5Eb1a02C6E2C20b39a1Bd4EAd76131", + "startBlock": 15174410 + } + }, + "arbitrum-one": { + "Semaphore": { + "address": "0xc60E0Ee1a2770d5F619858C641f14FC4a6401520", + "startBlock": 77278430 + } + }, + "localhost": { + "Semaphore": { + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "startBlock": 0 + } + } +} diff --git a/apps/subgraph/package.json b/apps/subgraph/package.json new file mode 100644 index 000000000..1cff22ed5 --- /dev/null +++ b/apps/subgraph/package.json @@ -0,0 +1,26 @@ +{ + "name": "semaphore-subgraph", + "type": "module", + "description": "Semaphore subgraph definition (The Graph).", + "license": "MIT", + "private": true, + "scripts": { + "codegen": "node scripts/generateSubgraph.js ${0} && graph codegen", + "build": "graph build", + "auth": "graph auth --studio", + "deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ ${0}", + "create-local": "graph create --node http://localhost:8020/ semaphore", + "remove-local": "graph remove --node http://localhost:8020/ semaphore", + "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 semaphore", + "test": "graph test Semaphore -v 0.5.0" + }, + "dependencies": { + "@graphprotocol/graph-cli": "0.56.0", + "@graphprotocol/graph-ts": "^0.31.0" + }, + "devDependencies": { + "@types/mustache": "^4.2.2", + "matchstick-as": "0.5.0", + "mustache": "^4.2.0" + } +} diff --git a/apps/subgraph/schema.graphql b/apps/subgraph/schema.graphql new file mode 100644 index 000000000..f8d238b2b --- /dev/null +++ b/apps/subgraph/schema.graphql @@ -0,0 +1,35 @@ +type MerkleTree @entity { + id: ID! + depth: BigInt! + root: BigInt + zeroValue: BigInt! + numberOfLeaves: Int! + group: Group! +} + +type Group @entity { + id: ID! + merkleTree: MerkleTree! + timestamp: BigInt! + admin: Bytes + members: [Member!] @derivedFrom(field: "group") + verifiedProofs: [VerifiedProof!] @derivedFrom(field: "group") +} + +type Member @entity { + id: ID! + identityCommitment: BigInt! + timestamp: BigInt! + index: Int! + group: Group! +} + +type VerifiedProof @entity { + id: ID! + signal: BigInt! + merkleTreeRoot: BigInt! + nullifierHash: BigInt! + externalNullifier: BigInt! + timestamp: BigInt! + group: Group! +} diff --git a/apps/subgraph/scripts/generateSubgraph.js b/apps/subgraph/scripts/generateSubgraph.js new file mode 100644 index 000000000..8b8679698 --- /dev/null +++ b/apps/subgraph/scripts/generateSubgraph.js @@ -0,0 +1,10 @@ +import Mustache from "mustache" +import { readFileSync, writeFileSync } from "fs" + +const network = process.argv.at(2) + +const template = readFileSync("./subgraph.template.yaml", "utf-8") +const networks = JSON.parse(readFileSync("./networks.json", "utf-8")) +const subgraph = Mustache.render(template, { network, ...networks[network].Semaphore }) + +writeFileSync("./subgraph.yaml", subgraph) diff --git a/apps/subgraph/src/semaphore.ts b/apps/subgraph/src/semaphore.ts new file mode 100644 index 000000000..1bc564369 --- /dev/null +++ b/apps/subgraph/src/semaphore.ts @@ -0,0 +1,191 @@ +import { ByteArray, log } from "@graphprotocol/graph-ts" +import { + GroupAdminUpdated, + GroupCreated, + MemberAdded, + MemberRemoved, + MemberUpdated, + ProofVerified +} from "../generated/Semaphore/Semaphore" +import { Member, Group, VerifiedProof, MerkleTree } from "../generated/schema" +import { concat, hash } from "./utils" + +/** + * Creates a new group. + * @param event Ethereum event emitted when a group is created. + */ +export function createGroup(event: GroupCreated): void { + log.debug(`GroupCreated event block: {}`, [event.block.number.toString()]) + + const group = new Group(event.params.groupId.toString()) + const merkleTree = new MerkleTree(event.params.groupId.toString()) + + log.info("Creating group '{}'", [group.id]) + + merkleTree.depth = event.params.merkleTreeDepth + merkleTree.zeroValue = event.params.zeroValue + merkleTree.numberOfLeaves = 0 + merkleTree.group = group.id + + group.timestamp = event.block.timestamp + group.merkleTree = merkleTree.id + + merkleTree.save() + group.save() + + log.info("Group '{}' has been created", [group.id]) +} + +/** + * Updates the admin of a group. + * @param event Ethereum event emitted when a group admin is updated. + */ +export function updateGroupAdmin(event: GroupAdminUpdated): void { + log.debug(`GroupAdminUpdated event block: {}`, [event.block.number.toString()]) + + const group = Group.load(event.params.groupId.toString()) + + if (group) { + log.info("Updating admin '{}' in the group '{}'", [event.params.newAdmin.toString(), group.id]) + + group.admin = event.params.newAdmin + + group.save() + + log.info("Admin '{}' of the group '{}' has been updated ", [group.admin!.toString(), group.id]) + } +} + +/** + * Adds a member to a group. + * @param event Ethereum event emitted when a member is added to a group. + */ +export function addMember(event: MemberAdded): void { + log.debug(`MemberAdded event block {}`, [event.block.number.toString()]) + + const merkleTree = MerkleTree.load(event.params.groupId.toString()) + + if (merkleTree) { + const memberId = hash( + concat(ByteArray.fromBigInt(event.params.index), ByteArray.fromBigInt(event.params.groupId)) + ) + const member = new Member(memberId) + + log.info("Adding member '{}' in the onchain group '{}'", [member.id, merkleTree.group]) + + member.group = merkleTree.group + member.identityCommitment = event.params.identityCommitment + member.timestamp = event.block.timestamp + member.index = merkleTree.numberOfLeaves + + member.save() + + merkleTree.root = event.params.merkleTreeRoot + merkleTree.numberOfLeaves += 1 + + merkleTree.save() + + log.info("Member '{}' of the onchain group '{}' has been added", [member.id, merkleTree.id]) + } +} + +/** + * Updates a member in a group. + * @param event Ethereum event emitted when a member is removed from a group. + */ +export function updateMember(event: MemberUpdated): void { + log.debug(`MemberUpdated event block {}`, [event.block.number.toString()]) + + const merkleTree = MerkleTree.load(event.params.groupId.toString()) + + if (merkleTree) { + const memberId = hash( + concat(ByteArray.fromBigInt(event.params.index), ByteArray.fromBigInt(event.params.groupId)) + ) + const member = Member.load(memberId) + + if (member) { + log.info("Updating member '{}' from the onchain group '{}'", [member.id, merkleTree.group]) + + member.identityCommitment = event.params.newIdentityCommitment + + member.save() + + merkleTree.root = event.params.merkleTreeRoot + + merkleTree.save() + + log.info("Member '{}' of the onchain group '{}' has been removed", [member.id, merkleTree.group]) + } + } +} + +/** + * Removes a member from a group. + * @param event Ethereum event emitted when a member is removed from a group. + */ +export function removeMember(event: MemberRemoved): void { + log.debug(`MemberRemoved event block {}`, [event.block.number.toString()]) + + const merkleTree = MerkleTree.load(event.params.groupId.toString()) + + if (merkleTree) { + const memberId = hash( + concat(ByteArray.fromBigInt(event.params.index), ByteArray.fromBigInt(event.params.groupId)) + ) + const member = Member.load(memberId) + + if (member) { + log.info("Removing member '{}' from the onchain group '{}'", [member.id, merkleTree.group]) + + member.identityCommitment = merkleTree.zeroValue + + member.save() + + merkleTree.root = event.params.merkleTreeRoot + + merkleTree.save() + + log.info("Member '{}' of the onchain group '{}' has been removed", [member.id, merkleTree.group]) + } + } +} + +/** + * Adds a verified proof in a group. + * @param event Ethereum event emitted when a proof has been verified. + */ +export function addVerifiedProof(event: ProofVerified): void { + log.debug(`ProofVerified event block {}`, [event.block.number.toString()]) + + const group = Group.load(event.params.groupId.toString()) + + if (group) { + const verifiedProofId = hash( + concat(ByteArray.fromBigInt(event.params.nullifierHash), ByteArray.fromBigInt(event.params.groupId)) + ) + + const verifiedProof = new VerifiedProof(verifiedProofId) + + log.info("Adding verified proof with signal '{}' in the onchain group '{}'", [ + event.params.signal.toHexString(), + group.id + ]) + + verifiedProof.group = group.id + verifiedProof.signal = event.params.signal + verifiedProof.merkleTreeRoot = event.params.merkleTreeRoot + verifiedProof.externalNullifier = event.params.externalNullifier + verifiedProof.nullifierHash = event.params.nullifierHash + verifiedProof.timestamp = event.block.timestamp + + verifiedProof.save() + + group.save() + + log.info("Verified proof with signal '{}' in the onchain group '{}' has been added", [ + event.params.signal.toHexString(), + group.id + ]) + } +} diff --git a/apps/subgraph/src/utils.ts b/apps/subgraph/src/utils.ts new file mode 100644 index 000000000..0c3549fdb --- /dev/null +++ b/apps/subgraph/src/utils.ts @@ -0,0 +1,25 @@ +import { ByteArray, crypto } from "@graphprotocol/graph-ts" + +/** + * Concatenates two byte arrays. + * @param a First byte array. + * @param b Second byte array. + * @returns Final concatenated byte array. + */ +export function concat(a: ByteArray, b: ByteArray): ByteArray { + const c = new ByteArray(a.length + b.length) + + c.set(a) + c.set(b, a.length) + + return c +} + +/** + * Creates a Keccak256 hash. + * @param message Message to hash. + * @returns Hexadecimal string of the Keccak256 hash. + */ +export function hash(message: ByteArray): string { + return crypto.keccak256(message).toHexString() +} diff --git a/apps/subgraph/subgraph.template.yaml b/apps/subgraph/subgraph.template.yaml new file mode 100644 index 000000000..434a461a3 --- /dev/null +++ b/apps/subgraph/subgraph.template.yaml @@ -0,0 +1,35 @@ +specVersion: 0.0.5 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum + name: Semaphore + network: {{ network }} + source: + address: "{{ address }}" + abi: Semaphore + startBlock: {{ startBlock }} + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Group + - Member + abis: + - name: Semaphore + file: ./abis/Semaphore.json + eventHandlers: + - event: GroupCreated(indexed uint256,uint256,uint256) + handler: createGroup + - event: GroupAdminUpdated(indexed uint256,indexed address,indexed address) + handler: updateGroupAdmin + - event: MemberAdded(indexed uint256,uint256,uint256,uint256) + handler: addMember + - event: MemberUpdated(indexed uint256,uint256,uint256,uint256,uint256) + handler: updateMember + - event: MemberRemoved(indexed uint256,uint256,uint256,uint256) + handler: removeMember + - event: ProofVerified(indexed uint256,indexed uint256,uint256,indexed uint256,uint256) + handler: addVerifiedProof + file: ./src/semaphore.ts diff --git a/apps/subgraph/tests/.bin/semaphore.wasm b/apps/subgraph/tests/.bin/semaphore.wasm new file mode 100644 index 0000000000000000000000000000000000000000..30bf3dc8c1b59f7173d9c35117cb8343c1cca3ed GIT binary patch literal 50093 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 literal 0 HcmV?d00001 diff --git a/apps/subgraph/tests/semaphore-utils.ts b/apps/subgraph/tests/semaphore-utils.ts new file mode 100644 index 000000000..38b963f1f --- /dev/null +++ b/apps/subgraph/tests/semaphore-utils.ts @@ -0,0 +1,160 @@ +import { newMockEvent } from "matchstick-as" +import { ethereum, BigInt, Address } from "@graphprotocol/graph-ts" +import { + GroupAdminUpdated, + GroupCreated, + GroupMerkleTreeDurationUpdated, + MemberAdded, + MemberRemoved, + MemberUpdated, + ProofVerified +} from "../generated/Semaphore/Semaphore" + +export function createGroupCreatedEvent(groupId: BigInt, merkleTreeDepth: BigInt, zeroValue: BigInt): GroupCreated { + const groupCreatedEvent = changetype(newMockEvent()) + + groupCreatedEvent.parameters = [] + + groupCreatedEvent.parameters.push(new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId))) + groupCreatedEvent.parameters.push( + new ethereum.EventParam("merkleTreeDepth", ethereum.Value.fromUnsignedBigInt(merkleTreeDepth)) + ) + groupCreatedEvent.parameters.push( + new ethereum.EventParam("zeroValue", ethereum.Value.fromUnsignedBigInt(zeroValue)) + ) + + return groupCreatedEvent +} + +export function createGroupAdminUpdatedEvent(groupId: BigInt, oldAdmin: Address, newAdmin: Address): GroupAdminUpdated { + const groupAdminUpdatedEvent = changetype(newMockEvent()) + + groupAdminUpdatedEvent.parameters = [] + + groupAdminUpdatedEvent.parameters.push( + new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId)) + ) + groupAdminUpdatedEvent.parameters.push(new ethereum.EventParam("oldAdmin", ethereum.Value.fromAddress(oldAdmin))) + groupAdminUpdatedEvent.parameters.push(new ethereum.EventParam("newAdmin", ethereum.Value.fromAddress(newAdmin))) + + return groupAdminUpdatedEvent +} + +export function createGroupMerkleTreeDurationUpdatedEvent( + groupId: BigInt, + oldMerkleTreeDuration: BigInt, + newMerkleTreeDuration: BigInt +): GroupMerkleTreeDurationUpdated { + const groupMerkleTreeDurationUpdatedEvent = changetype(newMockEvent()) + + groupMerkleTreeDurationUpdatedEvent.parameters = [] + + groupMerkleTreeDurationUpdatedEvent.parameters.push( + new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId)) + ) + groupMerkleTreeDurationUpdatedEvent.parameters.push( + new ethereum.EventParam("oldMerkleTreeDuration", ethereum.Value.fromUnsignedBigInt(oldMerkleTreeDuration)) + ) + groupMerkleTreeDurationUpdatedEvent.parameters.push( + new ethereum.EventParam("newMerkleTreeDuration", ethereum.Value.fromUnsignedBigInt(newMerkleTreeDuration)) + ) + + return groupMerkleTreeDurationUpdatedEvent +} + +export function createMemberAddedEvent( + groupId: BigInt, + index: BigInt, + identityCommitment: BigInt, + merkleTreeRoot: BigInt +): MemberAdded { + const memberAddedEvent = changetype(newMockEvent()) + + memberAddedEvent.parameters = [] + + memberAddedEvent.parameters.push(new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId))) + memberAddedEvent.parameters.push(new ethereum.EventParam("index", ethereum.Value.fromUnsignedBigInt(index))) + memberAddedEvent.parameters.push( + new ethereum.EventParam("identityCommitment", ethereum.Value.fromUnsignedBigInt(identityCommitment)) + ) + memberAddedEvent.parameters.push( + new ethereum.EventParam("merkleTreeRoot", ethereum.Value.fromUnsignedBigInt(merkleTreeRoot)) + ) + + return memberAddedEvent +} + +export function createMemberRemovedEvent( + groupId: BigInt, + index: BigInt, + identityCommitment: BigInt, + merkleTreeRoot: BigInt +): MemberRemoved { + const memberRemovedEvent = changetype(newMockEvent()) + + memberRemovedEvent.parameters = [] + + memberRemovedEvent.parameters.push(new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId))) + memberRemovedEvent.parameters.push(new ethereum.EventParam("index", ethereum.Value.fromUnsignedBigInt(index))) + memberRemovedEvent.parameters.push( + new ethereum.EventParam("identityCommitment", ethereum.Value.fromUnsignedBigInt(identityCommitment)) + ) + memberRemovedEvent.parameters.push( + new ethereum.EventParam("merkleTreeRoot", ethereum.Value.fromUnsignedBigInt(merkleTreeRoot)) + ) + + return memberRemovedEvent +} + +export function createMemberUpdatedEvent( + groupId: BigInt, + index: BigInt, + identityCommitment: BigInt, + newIdentityCommitment: BigInt, + merkleTreeRoot: BigInt +): MemberUpdated { + const memberUpdatedEvent = changetype(newMockEvent()) + + memberUpdatedEvent.parameters = [] + + memberUpdatedEvent.parameters.push(new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId))) + memberUpdatedEvent.parameters.push(new ethereum.EventParam("index", ethereum.Value.fromUnsignedBigInt(index))) + memberUpdatedEvent.parameters.push( + new ethereum.EventParam("identityCommitment", ethereum.Value.fromUnsignedBigInt(identityCommitment)) + ) + memberUpdatedEvent.parameters.push( + new ethereum.EventParam("newIdentityCommitment", ethereum.Value.fromUnsignedBigInt(newIdentityCommitment)) + ) + memberUpdatedEvent.parameters.push( + new ethereum.EventParam("merkleTreeRoot", ethereum.Value.fromUnsignedBigInt(merkleTreeRoot)) + ) + + return memberUpdatedEvent +} + +export function createProofVerifiedEvent( + groupId: BigInt, + merkleTreeRoot: BigInt, + externalNullifier: BigInt, + nullifierHash: BigInt, + signal: BigInt +): ProofVerified { + const proofVerifiedEvent = changetype(newMockEvent()) + + proofVerifiedEvent.parameters = [] + + proofVerifiedEvent.parameters.push(new ethereum.EventParam("groupId", ethereum.Value.fromUnsignedBigInt(groupId))) + proofVerifiedEvent.parameters.push( + new ethereum.EventParam("merkleTreeRoot", ethereum.Value.fromUnsignedBigInt(merkleTreeRoot)) + ) + proofVerifiedEvent.parameters.push( + new ethereum.EventParam("nullifierHash", ethereum.Value.fromUnsignedBigInt(nullifierHash)) + ) + proofVerifiedEvent.parameters.push( + new ethereum.EventParam("externalNullifier", ethereum.Value.fromUnsignedBigInt(externalNullifier)) + ) + + proofVerifiedEvent.parameters.push(new ethereum.EventParam("signal", ethereum.Value.fromUnsignedBigInt(signal))) + + return proofVerifiedEvent +} diff --git a/apps/subgraph/tests/semaphore.test.ts b/apps/subgraph/tests/semaphore.test.ts new file mode 100644 index 000000000..64e6d2ef4 --- /dev/null +++ b/apps/subgraph/tests/semaphore.test.ts @@ -0,0 +1,156 @@ +import { Address, BigInt, ByteArray } from "@graphprotocol/graph-ts" +import { afterAll, assert, clearStore, describe, test } from "matchstick-as/assembly/index" +import { + addMember, + addVerifiedProof, + createGroup, + removeMember, + updateGroupAdmin, + updateMember +} from "../src/semaphore" +import { concat, hash } from "../src/utils" +import { + createGroupAdminUpdatedEvent, + createGroupCreatedEvent, + createMemberAddedEvent, + createMemberRemovedEvent, + createMemberUpdatedEvent, + createProofVerifiedEvent +} from "./semaphore-utils" + +// https://thegraph.com/docs/en/developer/matchstick +describe("Semaphore subgraph", () => { + afterAll(() => { + clearStore() + }) + + describe("# createGroup", () => { + test("Should have created a group", () => { + const groupId = BigInt.fromI32(234) + const merkleTreeDepth = BigInt.fromI32(20) + const zeroValue = BigInt.fromI32(0) + const oldAdmin = Address.fromString("0x0000000000000000000000000000000000000000") + const newAdmin = Address.fromString("0x0000000000000000000000000000000000000001") + + const event1 = createGroupCreatedEvent(groupId, merkleTreeDepth, zeroValue) + const event2 = createGroupAdminUpdatedEvent(groupId, oldAdmin, newAdmin) + + createGroup(event1) + updateGroupAdmin(event2) + + assert.entityCount("Group", 1) + assert.entityCount("MerkleTree", 1) + + assert.fieldEquals("Group", groupId.toString(), "admin", "0x0000000000000000000000000000000000000001") + assert.fieldEquals("Group", groupId.toString(), "merkleTree", groupId.toString()) + + assert.fieldEquals("MerkleTree", groupId.toString(), "depth", "20") + assert.fieldEquals("MerkleTree", groupId.toString(), "zeroValue", "0") + assert.fieldEquals("MerkleTree", groupId.toString(), "numberOfLeaves", "0") + assert.fieldEquals("MerkleTree", groupId.toString(), "group", groupId.toString()) + }) + }) + + describe("# updateGroupAdmin", () => { + test("Should have updated a group admin", () => { + const groupId = BigInt.fromI32(234) + const oldAdmin = Address.fromString("0x0000000000000000000000000000000000000001") + const newAdmin = Address.fromString("0x0000000000000000000000000000000000000002") + + const event = createGroupAdminUpdatedEvent(groupId, oldAdmin, newAdmin) + + updateGroupAdmin(event) + + assert.fieldEquals("Group", groupId.toString(), "admin", "0x0000000000000000000000000000000000000002") + }) + }) + + describe("# addMember", () => { + test("Should have added a group member", () => { + const groupId = BigInt.fromI32(234) + const index = BigInt.fromI32(0) + const identityCommitment = BigInt.fromI32(123) + const merkleTreeRoot = BigInt.fromI32(999) + const id = hash(concat(ByteArray.fromBigInt(index), ByteArray.fromBigInt(groupId))) + + const event = createMemberAddedEvent(groupId, index, identityCommitment, merkleTreeRoot) + + addMember(event) + + assert.entityCount("Member", 1) + + assert.fieldEquals("Member", id, "index", "0") + assert.fieldEquals("Member", id, "identityCommitment", "123") + assert.fieldEquals("Member", id, "group", groupId.toString()) + + assert.fieldEquals("MerkleTree", groupId.toString(), "root", "999") + assert.fieldEquals("MerkleTree", groupId.toString(), "numberOfLeaves", "1") + }) + }) + + describe("# updateMember", () => { + test("Should have added a group member", () => { + const groupId = BigInt.fromI32(234) + const index = BigInt.fromI32(0) + const identityCommitment = BigInt.fromI32(123) + const newIdentityCommitment = BigInt.fromI32(124) + const merkleTreeRoot = BigInt.fromI32(1000) + const id = hash(concat(ByteArray.fromBigInt(index), ByteArray.fromBigInt(groupId))) + + const event = createMemberUpdatedEvent( + groupId, + index, + identityCommitment, + newIdentityCommitment, + merkleTreeRoot + ) + + updateMember(event) + + assert.fieldEquals("Member", id, "identityCommitment", "124") + + assert.fieldEquals("MerkleTree", groupId.toString(), "root", "1000") + }) + }) + + describe("# removeMember", () => { + test("Should have removed a group member", () => { + const groupId = BigInt.fromI32(234) + const index = BigInt.fromI32(0) + const identityCommitment = BigInt.fromI32(123) + const merkleTreeRoot = BigInt.fromI32(1001) + const id = hash(concat(ByteArray.fromBigInt(index), ByteArray.fromBigInt(groupId))) + + const event = createMemberRemovedEvent(groupId, index, identityCommitment, merkleTreeRoot) + + removeMember(event) + + assert.fieldEquals("Member", id, "identityCommitment", "0") + + assert.fieldEquals("MerkleTree", groupId.toString(), "root", "1001") + }) + }) + + describe("# addVerifiedProof", () => { + test("Should have added a proof", () => { + const groupId = BigInt.fromI32(234) + const merkleTreeRoot = BigInt.fromI32(1001) + const externalNullifier = BigInt.fromI32(1) + const nullifierHash = BigInt.fromI32(666) + const signal = BigInt.fromI32(2) + const id = hash(concat(ByteArray.fromBigInt(nullifierHash), ByteArray.fromBigInt(groupId))) + + const event = createProofVerifiedEvent(groupId, merkleTreeRoot, externalNullifier, nullifierHash, signal) + + addVerifiedProof(event) + + assert.entityCount("VerifiedProof", 1) + + assert.fieldEquals("VerifiedProof", id, "merkleTreeRoot", "1001") + assert.fieldEquals("VerifiedProof", id, "externalNullifier", "1") + assert.fieldEquals("VerifiedProof", id, "nullifierHash", "666") + assert.fieldEquals("VerifiedProof", id, "signal", "2") + assert.fieldEquals("VerifiedProof", id, "group", groupId.toString()) + }) + }) +}) diff --git a/apps/subgraph/tsconfig.json b/apps/subgraph/tsconfig.json new file mode 100644 index 000000000..1c33f88af --- /dev/null +++ b/apps/subgraph/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", + "include": ["src", "scripts", "tests"] +} diff --git a/package.json b/package.json index 3dd2b6424..7f5851bac 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,15 @@ "private": true, "scripts": { "build:libraries": "yarn workspaces foreach -t --no-private run build", - "compile:contracts": "yarn workspace contracts compile", + "build:subgraph": "yarn workspace semaphore-subgraph codegen goerli && yarn workspace semaphore-subgraph build", + "compile:contracts": "yarn workspace semaphore-contracts compile", "download:snark-artifacts": "rimraf snark-artifacts && ts-node scripts/download-snark-artifacts.ts", "remove:template-files": "ts-node scripts/remove-template-files.ts", - "test": "yarn test:libraries && yarn test:contracts", + "test": "yarn test:libraries && yarn test:contracts && yarn test:subgraph", "test:libraries": "jest --coverage", - "test:contracts": "yarn workspace contracts test:coverage", - "lint": "eslint . --ext .js,.ts,.tsx && yarn workspace contracts lint", + "test:subgraph": "yarn workspace semaphore-subgraph test", + "test:contracts": "yarn workspace semaphore-contracts test:coverage", + "lint": "eslint . --ext .js,.ts,.tsx && yarn workspace semaphore-contracts lint", "prettier": "prettier -c .", "prettier:write": "prettier -w .", "docs": "typedoc --cname js.semaphore.pse.dev --githubPages true", diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 783d8027e..9eeb023cd 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,5 +1,5 @@ { - "name": "contracts", + "name": "semaphore-contracts", "private": true, "scripts": { "start": "hardhat node", diff --git a/yarn.lock b/yarn.lock index 27e13e856..90c3d6912 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5808,6 +5808,23 @@ __metadata: languageName: node linkType: hard +"@ethersproject/abi@npm:5.0.7": + version: 5.0.7 + resolution: "@ethersproject/abi@npm:5.0.7" + dependencies: + "@ethersproject/address": ^5.0.4 + "@ethersproject/bignumber": ^5.0.7 + "@ethersproject/bytes": ^5.0.4 + "@ethersproject/constants": ^5.0.4 + "@ethersproject/hash": ^5.0.4 + "@ethersproject/keccak256": ^5.0.3 + "@ethersproject/logger": ^5.0.5 + "@ethersproject/properties": ^5.0.3 + "@ethersproject/strings": ^5.0.4 + checksum: 47bce732782187ef0343662aa0ffdabb98be752d3ede57234205b118df511f35d8cddabd468f139e367d908ce7fbb0555f5af943f4b47cf3165c8fd61811183d + languageName: node + linkType: hard + "@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.4.7, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" @@ -5853,7 +5870,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.7.0": +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.4, @ethersproject/address@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" dependencies: @@ -5885,7 +5902,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.5.0, @ethersproject/bignumber@npm:^5.7.0": +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.0.7, @ethersproject/bignumber@npm:^5.5.0, @ethersproject/bignumber@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bignumber@npm:5.7.0" dependencies: @@ -5896,7 +5913,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.0.4, @ethersproject/bytes@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: @@ -5905,7 +5922,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.0.4, @ethersproject/constants@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/constants@npm:5.7.0" dependencies: @@ -5932,7 +5949,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.0.4, @ethersproject/hash@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/hash@npm:5.7.0" dependencies: @@ -5990,7 +6007,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.0.3, @ethersproject/keccak256@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/keccak256@npm:5.7.0" dependencies: @@ -6000,7 +6017,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.0.5, @ethersproject/logger@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/logger@npm:5.7.0" checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d @@ -6026,7 +6043,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.0.3, @ethersproject/properties@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/properties@npm:5.7.0" dependencies: @@ -6150,7 +6167,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.5.0, @ethersproject/strings@npm:^5.6.1, @ethersproject/strings@npm:^5.7.0": +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.0.4, @ethersproject/strings@npm:^5.5.0, @ethersproject/strings@npm:^5.6.1, @ethersproject/strings@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/strings@npm:5.7.0" dependencies: @@ -6238,6 +6255,20 @@ __metadata: languageName: node linkType: hard +"@float-capital/float-subgraph-uncrashable@npm:^0.0.0-alpha.4": + version: 0.0.0-internal-testing.5 + resolution: "@float-capital/float-subgraph-uncrashable@npm:0.0.0-internal-testing.5" + dependencies: + "@rescript/std": 9.0.0 + graphql: ^16.6.0 + graphql-import-node: ^0.0.5 + js-yaml: ^4.1.0 + bin: + uncrashable: bin/uncrashable + checksum: ae75dd9779cd5f40cfdc4a14d52df07c80de4f7afec027a28ced2b73772ac7b0a51420d6a090004b54fde07117e0e13a44add407b8729b2adec1be340723b41a + languageName: node + linkType: hard + "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -6245,6 +6276,60 @@ __metadata: languageName: node linkType: hard +"@graphprotocol/graph-cli@npm:0.56.0": + version: 0.56.0 + resolution: "@graphprotocol/graph-cli@npm:0.56.0" + dependencies: + "@float-capital/float-subgraph-uncrashable": ^0.0.0-alpha.4 + "@oclif/core": 2.8.6 + "@whatwg-node/fetch": ^0.8.4 + assemblyscript: 0.19.23 + binary-install-raw: 0.0.13 + chalk: 3.0.0 + chokidar: 3.5.3 + debug: 4.3.4 + docker-compose: 0.23.19 + dockerode: 2.5.8 + fs-extra: 9.1.0 + glob: 9.3.5 + gluegun: 5.1.2 + graphql: 15.5.0 + immutable: 4.2.1 + ipfs-http-client: 55.0.0 + jayson: 4.0.0 + js-yaml: 3.14.1 + prettier: 1.19.1 + request: 2.88.2 + semver: 7.4.0 + sync-request: 6.1.0 + tmp-promise: 3.0.3 + web3-eth-abi: 1.7.0 + which: 2.0.2 + yaml: 1.10.2 + bin: + graph: bin/run + checksum: 485eadfbbda06096cbca1573cf28a786dc9f4b5cc899475ea9b3b5ad8c2e3b477415257d885631bdb958a13cd753230ebf49bdcf2748c37005121b660ab5efba + languageName: node + linkType: hard + +"@graphprotocol/graph-ts@npm:^0.27.0": + version: 0.27.0 + resolution: "@graphprotocol/graph-ts@npm:0.27.0" + dependencies: + assemblyscript: 0.19.10 + checksum: d2916b9d0a8063ed3f00486012fd625301332fced8c9407f57908b43f0724d512c56b89b1c40e1cb67eca2ced9b1d437e237b04ab588b1d962573c301848a31a + languageName: node + linkType: hard + +"@graphprotocol/graph-ts@npm:^0.31.0": + version: 0.31.0 + resolution: "@graphprotocol/graph-ts@npm:0.31.0" + dependencies: + assemblyscript: 0.19.10 + checksum: 20394b17d3241a662f0b2efebdc02f44e4e0814fdbb09b4cac0c84b84a173798325840bc1daf1d11ebaf27b1b3e13ff6e2766567c755cb77c1321ba1462fbecc + languageName: node + linkType: hard + "@hapi/hoek@npm:^9.0.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" @@ -6293,6 +6378,35 @@ __metadata: languageName: node linkType: hard +"@ipld/dag-cbor@npm:^7.0.0": + version: 7.0.3 + resolution: "@ipld/dag-cbor@npm:7.0.3" + dependencies: + cborg: ^1.6.0 + multiformats: ^9.5.4 + checksum: c0c59907ab6146a214c1ecb2341cc02904bc952255e15544554990690f7841380a87636d5937aaa23e9004b1c141e90238277d088ed6932b5b0e6d2e6ee1fe02 + languageName: node + linkType: hard + +"@ipld/dag-json@npm:^8.0.1": + version: 8.0.11 + resolution: "@ipld/dag-json@npm:8.0.11" + dependencies: + cborg: ^1.5.4 + multiformats: ^9.5.4 + checksum: 5ce25e4ed4004839a0dc18a51b09d0e2bda02a00bc15e8066809ddcedf5927ef8829a7dacaaf71ba0eb1c8699599130389af6d137da1d6f524394f5ddb0763f0 + languageName: node + linkType: hard + +"@ipld/dag-pb@npm:^2.1.3": + version: 2.1.18 + resolution: "@ipld/dag-pb@npm:2.1.18" + dependencies: + multiformats: ^9.5.4 + checksum: 46b9a7dabf6e87698fc268f88d94b710ba3988e26ab7918bcdf10c4356e15eb32393b6ab56eaf0d8936b369cb77456e491495f1025f78b099f1bd26cc5ccda06 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -7629,6 +7743,43 @@ __metadata: languageName: node linkType: hard +"@oclif/core@npm:2.8.6": + version: 2.8.6 + resolution: "@oclif/core@npm:2.8.6" + dependencies: + "@types/cli-progress": ^3.11.0 + ansi-escapes: ^4.3.2 + ansi-styles: ^4.3.0 + cardinal: ^2.1.1 + chalk: ^4.1.2 + clean-stack: ^3.0.1 + cli-progress: ^3.12.0 + debug: ^4.3.4 + ejs: ^3.1.8 + fs-extra: ^9.1.0 + get-package-type: ^0.1.0 + globby: ^11.1.0 + hyperlinker: ^1.0.0 + indent-string: ^4.0.0 + is-wsl: ^2.2.0 + js-yaml: ^3.14.1 + natural-orderby: ^2.0.3 + object-treeify: ^1.1.33 + password-prompt: ^1.1.2 + semver: ^7.3.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + supports-color: ^8.1.1 + supports-hyperlinks: ^2.2.0 + ts-node: ^10.9.1 + tslib: ^2.5.0 + widest-line: ^3.1.0 + wordwrap: ^1.0.0 + wrap-ansi: ^7.0.0 + checksum: 4b1ed6b7860cb6b1f79fa7c83fb8e0cf842790ea6baac2f215c2133ff5c0dec7f33b4fa63bf46da56b09dbf113283b0d7006aa1932192f0cb77fa9108a27b793 + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:4.7.3": version: 4.7.3 resolution: "@openzeppelin/contracts@npm:4.7.3" @@ -7695,6 +7846,28 @@ __metadata: languageName: node linkType: hard +"@peculiar/json-schema@npm:^1.1.12": + version: 1.1.12 + resolution: "@peculiar/json-schema@npm:1.1.12" + dependencies: + tslib: ^2.0.0 + checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 + languageName: node + linkType: hard + +"@peculiar/webcrypto@npm:^1.4.0": + version: 1.4.3 + resolution: "@peculiar/webcrypto@npm:1.4.3" + dependencies: + "@peculiar/asn1-schema": ^2.3.6 + "@peculiar/json-schema": ^1.1.12 + pvtsutils: ^1.3.2 + tslib: ^2.5.0 + webcrypto-core: ^1.7.7 + checksum: 5604c02b7e9a8cef61bb4430e733e939c7737533ba65ba5fac4beb3a6d613add478ab45455cb57506789b6d00704d83e4965a0f712de3e8f40706e0961670e5c + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -7716,6 +7889,86 @@ __metadata: languageName: node linkType: hard +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 + languageName: node + linkType: hard + +"@rescript/std@npm:9.0.0": + version: 9.0.0 + resolution: "@rescript/std@npm:9.0.0" + checksum: f63916d567ac5ecb1fd955e7866e1e74fddb97938b7bc7a2c60437783f2244eea04fe7eb209b5822ebdace30b78c42e184b04db634174c00f001f5e118250bac + languageName: node + linkType: hard + "@rollup/plugin-babel@npm:^5.2.0": version: 5.3.1 resolution: "@rollup/plugin-babel@npm:5.3.1" @@ -9081,6 +9334,15 @@ __metadata: languageName: node linkType: hard +"@types/cli-progress@npm:^3.11.0": + version: 3.11.5 + resolution: "@types/cli-progress@npm:3.11.5" + dependencies: + "@types/node": "*" + checksum: 571fb3b11646415ac49c90e8003b82f3ac58d75fde5952caf40b4a079517b6e25e79ab0a7455d0ab0398d0b2de062646dba075d3d1f8d147eed2ab4d41abbf64 + languageName: node + linkType: hard + "@types/concat-stream@npm:^1.6.0": version: 1.6.1 resolution: "@types/concat-stream@npm:1.6.1" @@ -9100,7 +9362,7 @@ __metadata: languageName: node linkType: hard -"@types/connect@npm:*": +"@types/connect@npm:*, @types/connect@npm:^3.4.33": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" dependencies: @@ -9389,6 +9651,13 @@ __metadata: languageName: node linkType: hard +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4 + languageName: node + linkType: hard + "@types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" @@ -9426,6 +9695,13 @@ __metadata: languageName: node linkType: hard +"@types/minimatch@npm:^3.0.4": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.2 resolution: "@types/minimist@npm:1.2.2" @@ -9447,6 +9723,13 @@ __metadata: languageName: node linkType: hard +"@types/mustache@npm:^4.2.2": + version: 4.2.5 + resolution: "@types/mustache@npm:4.2.5" + checksum: 0ff1d52022fd3ab0db1c97964ca0c24b45ad74e81ec62e05d27eab5b66ef1d78ff257f4cfb481c72b8b511f15520ca48717e000dc5fa8c3fdf732790b28f05cb + languageName: node + linkType: hard + "@types/node-fetch@npm:*": version: 3.0.2 resolution: "@types/node-fetch@npm:3.0.2" @@ -9479,6 +9762,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=13.7.0": + version: 20.10.8 + resolution: "@types/node@npm:20.10.8" + dependencies: + undici-types: ~5.26.4 + checksum: ce9b7ee545b3605f667be2ea900e38ab58d7b561192a7342443e5d7f61c44fd9d016eac48e95d3011f090ceea65a727e83a31d51fabdd9fc20ff9992edcbc682 + languageName: node + linkType: hard + "@types/node@npm:^10.0.3": version: 10.17.60 resolution: "@types/node@npm:10.17.60" @@ -9486,7 +9778,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^12.12.6": +"@types/node@npm:^12.12.54, @types/node@npm:^12.12.6": version: 12.20.55 resolution: "@types/node@npm:12.20.55" checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 @@ -9926,6 +10218,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^7.4.4": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "*" + checksum: b4c9b8ad209620c9b21e78314ce4ff07515c0cadab9af101c1651e7bfb992d7fd933bd8b9c99d110738fd6db523ed15f82f29f50b45510288da72e964dedb1a3 + languageName: node + linkType: hard + "@types/ws@npm:^8.5.5": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -10243,6 +10544,39 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/events@npm:^0.0.3": + version: 0.0.3 + resolution: "@whatwg-node/events@npm:0.0.3" + checksum: af26f40d4d0a0f5f0ee45fc6124afb8d6b33988dae96ab0fb87aa5e66d1ff08a749491b9da533ea524bbaebd4a770736f254d574a91ab4455386aa098cee8c77 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.8.4": + version: 0.8.8 + resolution: "@whatwg-node/fetch@npm:0.8.8" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + "@whatwg-node/node-fetch": ^0.3.6 + busboy: ^1.6.0 + urlpattern-polyfill: ^8.0.0 + web-streams-polyfill: ^3.2.1 + checksum: 891407ba57e32e5af70a3b0a86980c4466dcf2ba8581b6927475c85400280b163085519e98821dd94776da9aa1b0b1e221e718009e2abed9c8a0d4721025b2ab + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.3.6": + version: 0.3.6 + resolution: "@whatwg-node/node-fetch@npm:0.3.6" + dependencies: + "@whatwg-node/events": ^0.0.3 + busboy: ^1.6.0 + fast-querystring: ^1.1.1 + fast-url-parser: ^1.1.3 + tslib: ^2.3.1 + checksum: d3d7b0a0242c0511c7b666de66d9096fb24ea251426ce76e3a26a8ca17408de5d4d4f81b5aaec840cc7025f0321fb97e06067c53f377c844a5a9473dd76491ae + languageName: node + linkType: hard + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -10322,7 +10656,19 @@ __metadata: languageName: node linkType: hard -"JSONStream@npm:^1.0.4": +"JSONStream@npm:1.3.2": + version: 1.3.2 + resolution: "JSONStream@npm:1.3.2" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: d83b86f846eaeba7b947181245b977bb7e32c49e25d210234ecbf6b2d9128924610224e150558deeb65d063b07b8c28e5a1a4ab8daeb89d4c34e718047f046fd + languageName: node + linkType: hard + +"JSONStream@npm:^1.0.4, JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" dependencies: @@ -10660,7 +11006,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -10731,7 +11077,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0, ansi-styles@npm:^4.3.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -10754,6 +11100,13 @@ __metadata: languageName: node linkType: hard +"ansicolors@npm:~0.3.2": + version: 0.3.2 + resolution: "ansicolors@npm:0.3.2" + checksum: e84fae7ebc27ac96d9dbb57f35f078cd6dde1b7046b0f03f73dcefc9fbb1f2e82e3685d083466aded8faf038f9fa9ebb408d215282bcd7aaa301d5ac3c486815 + languageName: node + linkType: hard + "antlr4@npm:^4.11.0": version: 4.12.0 resolution: "antlr4@npm:4.12.0" @@ -10770,6 +11123,23 @@ __metadata: languageName: node linkType: hard +"any-signal@npm:^2.1.2": + version: 2.1.2 + resolution: "any-signal@npm:2.1.2" + dependencies: + abort-controller: ^3.0.0 + native-abort-controller: ^1.0.3 + checksum: 498603e30357f82e438ddc972086b3180ddbaf5ea9772f535d103b754711eb13d4c24577e497d5a1146e571ee38f167c316ace7dc1a03b62a8a8c7677e9d660f + languageName: node + linkType: hard + +"any-signal@npm:^3.0.0": + version: 3.0.1 + resolution: "any-signal@npm:3.0.1" + checksum: 073eb14c365b7552f9f16fbf36cd76171e4a0fe156a8faa865fe1d5ac4ed2f5c5ab6e3faad0ac0d4c69511b5892971c5573baa8a1cbf85fe250d0c54ff0734ff + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -10780,6 +11150,22 @@ __metadata: languageName: node linkType: hard +"apisauce@npm:^2.1.5": + version: 2.1.6 + resolution: "apisauce@npm:2.1.6" + dependencies: + axios: ^0.21.4 + checksum: 3db1447f03ecfa0d8fb9be0991bd4732a8eb4a5c96282c964c0b5f9d215dc1bca1e0fec7f5187080286368c1028deb0de8fb69cd7bccb92441b327aa1028598a + languageName: node + linkType: hard + +"app-module-path@npm:^2.2.0": + version: 2.2.0 + resolution: "app-module-path@npm:2.2.0" + checksum: b52aa49cfa809efbad41b514222e8ef3f8ee9e147f5eccf79280b45eddcc61f7aeb302b0049474e3f42072dd53a28348c57dd96f36cd461d2e31cc8ab1ef56b5 + languageName: node + linkType: hard + "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -11073,7 +11459,7 @@ __metadata: languageName: node linkType: hard -"asn1js@npm:^3.0.5": +"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": version: 3.0.5 resolution: "asn1js@npm:3.0.5" dependencies: @@ -11084,6 +11470,33 @@ __metadata: languageName: node linkType: hard +"assemblyscript@npm:0.19.10": + version: 0.19.10 + resolution: "assemblyscript@npm:0.19.10" + dependencies: + binaryen: 101.0.0-nightly.20210723 + long: ^4.0.0 + bin: + asc: bin/asc + asinit: bin/asinit + checksum: d4087bcbae402eb0e972a78d8dfee607b2b51f4b29fcee5359f4db3052912ec12492a8714916bed8424f7f495f9357c7c6ab2482ba1d4ea4a44c55a86df5a67c + languageName: node + linkType: hard + +"assemblyscript@npm:0.19.23, assemblyscript@npm:^0.19.20": + version: 0.19.23 + resolution: "assemblyscript@npm:0.19.23" + dependencies: + binaryen: 102.0.0-nightly.20211028 + long: ^5.2.0 + source-map-support: ^0.5.20 + bin: + asc: bin/asc + asinit: bin/asinit + checksum: f5a5d808ccf5a5f5065c9690f67b74e8ab434d30c9dda688acaab92416ee296cdcae4b7a272ce1abd416e1e37e44aee61588713882c2638af037cf83c2ee933b + languageName: node + linkType: hard + "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" @@ -11227,6 +11640,15 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.21.1, axios@npm:^0.21.4": + version: 0.21.4 + resolution: "axios@npm:0.21.4" + dependencies: + follow-redirects: ^1.14.0 + checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c + languageName: node + linkType: hard + "axios@npm:^0.25.0": version: 0.25.0 resolution: "axios@npm:0.25.0" @@ -11575,6 +11997,35 @@ __metadata: languageName: node linkType: hard +"binary-install-raw@npm:0.0.13": + version: 0.0.13 + resolution: "binary-install-raw@npm:0.0.13" + dependencies: + axios: ^0.21.1 + rimraf: ^3.0.2 + tar: ^6.1.0 + checksum: f18515976237100459b4e2983832c941421ed8767c7fbc0ca716aa96210ccdd6c8ae9fdb9e0c39099248ebd8a3f4653560cb0b655192bb3b4efa1f7be204343a + languageName: node + linkType: hard + +"binaryen@npm:101.0.0-nightly.20210723": + version: 101.0.0-nightly.20210723 + resolution: "binaryen@npm:101.0.0-nightly.20210723" + bin: + wasm-opt: bin/wasm-opt + checksum: b1f7cc8e9fb4f1530e9454b5ea6deba17e2d863cea4efc6d0ba1b2af2325e9080c29df0ffeaf9708d455705a629a6a4fbef0ac29ed789a4e316b4c1437879f57 + languageName: node + linkType: hard + +"binaryen@npm:102.0.0-nightly.20211028": + version: 102.0.0-nightly.20211028 + resolution: "binaryen@npm:102.0.0-nightly.20211028" + bin: + wasm-opt: bin/wasm-opt + checksum: d360de0f21e35b73e868837278161ae0d3ccca4a2f87bd02c1cf28750ab355e3469a6a56664ca078f3ed5c2baade6575871b63cc61c9f98f101e55fbbe4ff024 + languageName: node + linkType: hard + "bl@npm:^1.0.0": version: 1.2.3 resolution: "bl@npm:1.2.3" @@ -11646,6 +12097,15 @@ __metadata: languageName: node linkType: hard +"blob-to-it@npm:^1.0.1": + version: 1.0.4 + resolution: "blob-to-it@npm:1.0.4" + dependencies: + browser-readablestream-to-it: ^1.0.3 + checksum: e7fbebe5bd7b8187a4a88203639777456596a0cc68372e7b2dbcfbae6dea2b80e2a89522140039b538140bc3e3a6b1e90d1778e725eb8899070f799e61591751 + languageName: node + linkType: hard + "bluebird@npm:^3.5.0": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -11835,6 +12295,13 @@ __metadata: languageName: node linkType: hard +"browser-readablestream-to-it@npm:^1.0.0, browser-readablestream-to-it@npm:^1.0.1, browser-readablestream-to-it@npm:^1.0.3": + version: 1.0.3 + resolution: "browser-readablestream-to-it@npm:1.0.3" + checksum: 07895bbc54cdeea62c8e9b7e32d374ec5c340ed1d0bc0c6cd6f1e0561ad931b160a3988426c763672ddf38ac1f75e45b9d8ae267b43f387183edafcad625f30a + languageName: node + linkType: hard + "browser-stdout@npm:1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" @@ -12025,7 +12492,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^6.0.3": +"buffer@npm:^6.0.1, buffer@npm:^6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" dependencies: @@ -12346,6 +12813,18 @@ __metadata: languageName: node linkType: hard +"cardinal@npm:^2.1.1": + version: 2.1.1 + resolution: "cardinal@npm:2.1.1" + dependencies: + ansicolors: ~0.3.2 + redeyed: ~2.1.0 + bin: + cdl: ./bin/cdl.js + checksum: e8d4ae46439cf8fed481c0efd267711ee91e199aa7821a9143e784ed94a6495accd01a0b36d84d377e8ee2cc9928a6c9c123b03be761c60b805f2c026b8a99ad + languageName: node + linkType: hard + "caseless@npm:^0.12.0, caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -12412,6 +12891,15 @@ __metadata: languageName: node linkType: hard +"cborg@npm:^1.5.4, cborg@npm:^1.6.0": + version: 1.10.2 + resolution: "cborg@npm:1.10.2" + bin: + cborg: cli.js + checksum: 7743a8f125046ac27fb371c4ea18af54fbe853f7210f1ffacc6504a79566480c39d52ac4fbc1a5b5155e27b13c3b58955dc29db1bf20c4d651549d55fec2fa7f + languageName: node + linkType: hard + "ccount@npm:^1.0.0": version: 1.1.0 resolution: "ccount@npm:1.1.0" @@ -12460,6 +12948,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -12666,7 +13164,7 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.4": +"chownr@npm:^1.0.1, chownr@npm:^1.1.4": version: 1.1.4 resolution: "chownr@npm:1.1.4" checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d @@ -12806,6 +13304,15 @@ __metadata: languageName: node linkType: hard +"clean-stack@npm:^3.0.1": + version: 3.0.1 + resolution: "clean-stack@npm:3.0.1" + dependencies: + escape-string-regexp: 4.0.0 + checksum: dc18c842d7792dd72d463936b1b0a5b2621f0fc11588ee48b602e1a29b6c010c606d89f3de1f95d15d72de74aea93c0fbac8246593a31d95f8462cac36148e05 + languageName: node + linkType: hard + "clean-webpack-plugin@npm:^4.0.0": version: 4.0.0 resolution: "clean-webpack-plugin@npm:4.0.0" @@ -12849,13 +13356,43 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0, cli-spinners@npm:^2.6.1": - version: 2.7.0 +"cli-progress@npm:^3.12.0": + version: 3.12.0 + resolution: "cli-progress@npm:3.12.0" + dependencies: + string-width: ^4.2.3 + checksum: e8390dc3cdf3c72ecfda0a1e8997bfed63a0d837f97366bbce0ca2ff1b452da386caed007b389f0fe972625037b6c8e7ab087c69d6184cc4dfc8595c4c1d3e6e + languageName: node + linkType: hard + +"cli-spinners@npm:^2.2.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0, cli-spinners@npm:^2.6.1": + version: 2.7.0 resolution: "cli-spinners@npm:2.7.0" checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f languageName: node linkType: hard +"cli-table3@npm:0.6.0": + version: 0.6.0 + resolution: "cli-table3@npm:0.6.0" + dependencies: + colors: ^1.1.2 + object-assign: ^4.1.0 + string-width: ^4.2.0 + dependenciesMeta: + colors: + optional: true + checksum: 98682a2d3eef5ad07d34a08f90398d0640004e28ecf8eb59006436f11ed7b4d453db09f46c2ea880618fbd61fee66321b3b3ee1b20276bc708b6baf6f9663d75 + languageName: node + linkType: hard + "cli-table3@npm:^0.5.0": version: 0.5.1 resolution: "cli-table3@npm:0.5.1" @@ -13176,7 +13713,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.8.1": +"commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.8.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -13306,7 +13843,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2": +"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2, concat-stream@npm:~1.6.2": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -13394,43 +13931,6 @@ __metadata: languageName: node linkType: hard -"contracts@workspace:packages/contracts": - version: 0.0.0-use.local - resolution: "contracts@workspace:packages/contracts" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": ^1.0.5 - "@nomiclabs/hardhat-ethers": ^2.0.6 - "@nomiclabs/hardhat-etherscan": ^3.1.7 - "@openzeppelin/contracts": 4.7.3 - "@semaphore-protocol/group": "workspace:packages/group" - "@semaphore-protocol/identity": "workspace:packages/identity" - "@semaphore-protocol/proof": "workspace:packages/proof" - "@typechain/ethers-v5": ^10.0.0 - "@typechain/hardhat": ^6.0.0 - "@types/chai": ^4.3.0 - "@types/download": ^8.0.1 - "@types/mocha": ^9.1.0 - "@types/node": ^17.0.12 - "@types/rimraf": ^3.0.2 - "@zk-kit/incremental-merkle-tree.sol": 1.3.3 - chai: ^4.3.5 - circomlib: ^2.0.2 - circomlibjs: ^0.1.7 - download: ^8.0.0 - ethers: ^5.6.8 - hardhat: ^2.9.7 - hardhat-gas-reporter: ^1.0.8 - js-logger: ^1.6.1 - prettier-plugin-solidity: ^1.0.0-beta.19 - rimraf: ^3.0.2 - solhint: ^3.3.6 - solhint-plugin-prettier: ^0.0.5 - solidity-coverage: ^0.7.21 - ts-node: ^10.4.0 - typechain: ^8.0.0 - languageName: unknown - linkType: soft - "conventional-changelog-angular@npm:^5.0.11": version: 5.0.13 resolution: "conventional-changelog-angular@npm:5.0.13" @@ -13638,6 +14138,19 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:7.0.1": + version: 7.0.1 + resolution: "cosmiconfig@npm:7.0.1" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: 4be63e7117955fd88333d7460e4c466a90f556df6ef34efd59034d2463484e339666c41f02b523d574a797ec61f4a91918c5b89a316db2ea2f834e0d2d09465b + languageName: node + linkType: hard + "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -13755,7 +14268,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -14199,7 +14712,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": +"debug@npm:^3.2.6, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -14482,6 +14995,13 @@ __metadata: languageName: node linkType: hard +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -14675,6 +15195,17 @@ __metadata: languageName: node linkType: hard +"dns-over-http-resolver@npm:^1.2.3": + version: 1.2.3 + resolution: "dns-over-http-resolver@npm:1.2.3" + dependencies: + debug: ^4.3.1 + native-fetch: ^3.0.0 + receptacle: ^1.3.2 + checksum: 3cc1a1d77fc43e7a8a12453da987b80860ac96dc1031386c5eb1a39154775a87cfa1d50c0eaa5ea5e397e898791654608f6e2acf03f750f4098ab8822bb7d928 + languageName: node + linkType: hard + "dns-packet@npm:^5.2.2": version: 5.6.1 resolution: "dns-packet@npm:5.6.1" @@ -14684,6 +15215,38 @@ __metadata: languageName: node linkType: hard +"docker-compose@npm:0.23.19": + version: 0.23.19 + resolution: "docker-compose@npm:0.23.19" + dependencies: + yaml: ^1.10.2 + checksum: 1704825954ec8645e4b099cc2641531955eef5a8a9729c885fab7067ae4d7935c663252e51b49878397e51cd5a3efcf2f13c8460e252aa39d14a0722c0bacfe5 + languageName: node + linkType: hard + +"docker-modem@npm:^1.0.8": + version: 1.0.9 + resolution: "docker-modem@npm:1.0.9" + dependencies: + JSONStream: 1.3.2 + debug: ^3.2.6 + readable-stream: ~1.0.26-4 + split-ca: ^1.0.0 + checksum: b34829f5abecf28332f1870c88bdf795750520264e9fdc8e9041058f18b1846543061ee32fb21ff14e9da6b5498af6b2cb4d96422d8c2dc02d9f622b01f34fe6 + languageName: node + linkType: hard + +"dockerode@npm:2.5.8": + version: 2.5.8 + resolution: "dockerode@npm:2.5.8" + dependencies: + concat-stream: ~1.6.2 + docker-modem: ^1.0.8 + tar-fs: ~1.16.3 + checksum: 01381da98f98a3236b735fb2bb2a66f521da39200a2a11b83777cee3b104b32966ba7dfeb93f3fa8ab85b5e639265842d66f576e7db9562b1049564c2af6ec84 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -14925,7 +15488,18 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.6": +"ejs@npm:3.1.6": + version: 3.1.6 + resolution: "ejs@npm:3.1.6" + dependencies: + jake: ^10.6.1 + bin: + ejs: ./bin/cli.js + checksum: 81a9cdea0b4ded3b5a4b212b7c17e20bb07468f08394e2d519708d367957a70aef3d282a6d5d38bf6ad313ba25802b9193d4227f29b084d2ee0f28d115141d48 + languageName: node + linkType: hard + +"ejs@npm:^3.1.6, ejs@npm:^3.1.8": version: 3.1.9 resolution: "ejs@npm:3.1.9" dependencies: @@ -14936,6 +15510,15 @@ __metadata: languageName: node linkType: hard +"electron-fetch@npm:^1.7.2": + version: 1.9.1 + resolution: "electron-fetch@npm:1.9.1" + dependencies: + encoding: ^0.1.13 + checksum: 33b5d363b9a234288e847237ef34536bd415f31cba3b1c69b2ae4679a2bae66fb7ded2b576b90a0b7cd240e3df71cf16f2b961d4ab82864df02b6b53cf49f05c + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.284": version: 1.4.348 resolution: "electron-to-chromium@npm:1.4.348" @@ -15042,7 +15625,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.0": +"enquirer@npm:2.3.6, enquirer@npm:^2.3.0": version: 2.3.6 resolution: "enquirer@npm:2.3.6" dependencies: @@ -15079,6 +15662,13 @@ __metadata: languageName: node linkType: hard +"err-code@npm:^3.0.1": + version: 3.0.1 + resolution: "err-code@npm:3.0.1" + checksum: aede1f1d5ebe6d6b30b5e3175e3cc13e67de2e2e1ad99ce4917e957d7b59e8451ed10ee37dbc6493521920a47082c479b9097e5c39438d4aff4cc84438568a5a + languageName: node + linkType: hard + "error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" @@ -15297,13 +15887,22 @@ __metadata: languageName: node linkType: hard -"es6-promise@npm:^4.2.8": +"es6-promise@npm:^4.0.3, es6-promise@npm:^4.2.8": version: 4.2.8 resolution: "es6-promise@npm:4.2.8" checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d languageName: node linkType: hard +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: ^4.0.3 + checksum: fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 + languageName: node + linkType: hard + "es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": version: 3.1.3 resolution: "es6-symbol@npm:3.1.3" @@ -15682,7 +16281,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -16080,7 +16679,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0, execa@npm:^5.1.1": +"execa@npm:5.1.1, execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -16250,6 +16849,20 @@ __metadata: languageName: node linkType: hard +"eyes@npm:^0.1.8": + version: 0.1.8 + resolution: "eyes@npm:0.1.8" + checksum: c31703a92bf36ba75ee8d379ee7985c24ee6149f3a6175f44cec7a05b178c38bce9836d3ca48c9acb0329a960ac2c4b2ead4e60cdd4fe6e8c92cad7cd6913687 + languageName: node + linkType: hard + +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 427a48fe0907e76f0e9a2c228e253b4d8a8ab21d130ee9e4bb8339c5ba4086235cf9576831f7b20955a752eae4b525a177ff9d5825dd8d416e7726939194fbee + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -16264,6 +16877,13 @@ __metadata: languageName: node linkType: hard +"fast-fifo@npm:^1.0.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + "fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9": version: 3.2.12 resolution: "fast-glob@npm:3.2.12" @@ -16304,7 +16924,16 @@ __metadata: languageName: node linkType: hard -"fast-url-parser@npm:1.1.3": +"fast-querystring@npm:^1.1.1": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: ^1.0.1 + checksum: 7149f82ee9ac39a9c08c7ffe435b9f6deade76ae5e3675fe1835720513e8c4bc541e666b4b7b1c0c07e08f369dcf4828d00f2bee39889a90a168e1439cf27b0b + languageName: node + linkType: hard + +"fast-url-parser@npm:1.1.3, fast-url-parser@npm:^1.1.3": version: 1.1.3 resolution: "fast-url-parser@npm:1.1.3" dependencies: @@ -16501,7 +17130,7 @@ __metadata: languageName: node linkType: hard -"filelist@npm:^1.0.1": +"filelist@npm:^1.0.1, filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" dependencies: @@ -16724,6 +17353,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.14.0": + version: 1.15.4 + resolution: "follow-redirects@npm:1.15.4" + peerDependenciesMeta: + debug: + optional: true + checksum: e178d1deff8b23d5d24ec3f7a94cde6e47d74d0dc649c35fc9857041267c12ec5d44650a0c5597ef83056ada9ea6ca0c30e7c4f97dbf07d035086be9e6a5b7b6 + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -16999,6 +17638,16 @@ __metadata: languageName: node linkType: hard +"fs-jetpack@npm:4.3.1": + version: 4.3.1 + resolution: "fs-jetpack@npm:4.3.1" + dependencies: + minimatch: ^3.0.2 + rimraf: ^2.6.3 + checksum: ffe90946ec250c6042569faa2ec7753594779ca0e8a72eea0b76b82574542c50d580974f54c5d6885f44f5719ece173be778cf82dc50ad90f43dab043f4061c9 + languageName: node + linkType: hard + "fs-minipass@npm:^1.2.7": version: 1.2.7 resolution: "fs-minipass@npm:1.2.7" @@ -17208,6 +17857,13 @@ __metadata: languageName: node linkType: hard +"get-iterator@npm:^1.0.2": + version: 1.0.2 + resolution: "get-iterator@npm:1.0.2" + checksum: 4a819aa91ecb61f4fd507bd62e3468d55f642f06011f944c381a739a21f685c36a37feb9324c8971e7c0fc70ca172066c45874fa2d1dcdf4b4fb8e43f16058c2 + languageName: node + linkType: hard + "get-nonce@npm:^1.0.0": version: 1.0.1 resolution: "get-nonce@npm:1.0.1" @@ -17439,6 +18095,18 @@ __metadata: languageName: node linkType: hard +"glob@npm:9.3.5": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^8.0.2 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 + languageName: node + linkType: hard + "glob@npm:^10.3.7": version: 10.3.10 resolution: "glob@npm:10.3.10" @@ -17645,6 +18313,46 @@ __metadata: languageName: node linkType: hard +"gluegun@npm:5.1.2": + version: 5.1.2 + resolution: "gluegun@npm:5.1.2" + dependencies: + apisauce: ^2.1.5 + app-module-path: ^2.2.0 + cli-table3: 0.6.0 + colors: 1.4.0 + cosmiconfig: 7.0.1 + cross-spawn: 7.0.3 + ejs: 3.1.6 + enquirer: 2.3.6 + execa: 5.1.1 + fs-jetpack: 4.3.1 + lodash.camelcase: ^4.3.0 + lodash.kebabcase: ^4.1.1 + lodash.lowercase: ^4.3.0 + lodash.lowerfirst: ^4.3.1 + lodash.pad: ^4.5.1 + lodash.padend: ^4.6.1 + lodash.padstart: ^4.6.1 + lodash.repeat: ^4.1.0 + lodash.snakecase: ^4.1.1 + lodash.startcase: ^4.4.0 + lodash.trim: ^4.5.1 + lodash.trimend: ^4.5.1 + lodash.trimstart: ^4.5.1 + lodash.uppercase: ^4.3.0 + lodash.upperfirst: ^4.3.1 + ora: 4.0.2 + pluralize: ^8.0.0 + semver: 7.3.5 + which: 2.0.2 + yargs-parser: ^21.0.0 + bin: + gluegun: bin/gluegun + checksum: 2c91934b98022018a524a3be32efb3e4567905a618ccb4aca4f19207ff4b37262bc18264b306f1c82757eaab634bac6c06aacff16059b11a38deefd07b6293b6 + languageName: node + linkType: hard + "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" @@ -17752,6 +18460,29 @@ __metadata: languageName: node linkType: hard +"graphql-import-node@npm:^0.0.5": + version: 0.0.5 + resolution: "graphql-import-node@npm:0.0.5" + peerDependencies: + graphql: "*" + checksum: a9af565f3422e9e732dcf97077deff3f94b9af0d7e8001bb65a3cac607a462664f902b3603ead1626b294928c4b6302cb6aa2d49254444d465ce87c629fb842d + languageName: node + linkType: hard + +"graphql@npm:15.5.0": + version: 15.5.0 + resolution: "graphql@npm:15.5.0" + checksum: 58a69f7274ae94c690bfa2517f96bbaf1327e1ca1fc46606e772ba2f7ca517adeb375346301373351e693022f448b7866163034209623d7c5315819ef8c5e7c0 + languageName: node + linkType: hard + +"graphql@npm:^16.6.0": + version: 16.8.1 + resolution: "graphql@npm:16.8.1" + checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 + languageName: node + linkType: hard + "gray-matter@npm:^4.0.3": version: 4.0.3 resolution: "gray-matter@npm:4.0.3" @@ -18681,6 +19412,13 @@ __metadata: languageName: node linkType: hard +"hyperlinker@npm:^1.0.0": + version: 1.0.0 + resolution: "hyperlinker@npm:1.0.0" + checksum: f6d020ac552e9d048668206c805a737262b4c395546c773cceea3bc45252c46b4fa6eeb67c5896499dad00d21cb2f20f89fdd480a4529cfa3d012da2957162f9 + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -18765,6 +19503,13 @@ __metadata: languageName: node linkType: hard +"immutable@npm:4.2.1": + version: 4.2.1 + resolution: "immutable@npm:4.2.1" + checksum: 525bd78c4b8550df1b5f12d3bc7eb8bb3daed24f97df4018ec99a16436fc2a03fcebfcb4d3d36c86c46039292a583ea9eceb8a55704932f70a0cc5f15695b42a + languageName: node + linkType: hard + "immutable@npm:^4.0.0": version: 4.3.4 resolution: "immutable@npm:4.3.4" @@ -18846,7 +19591,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -18927,6 +19672,24 @@ __metadata: languageName: node linkType: hard +"interface-datastore@npm:^6.0.2": + version: 6.1.1 + resolution: "interface-datastore@npm:6.1.1" + dependencies: + interface-store: ^2.0.2 + nanoid: ^3.0.2 + uint8arrays: ^3.0.0 + checksum: a0388adabf029be229bbfce326bbe64fd3353373512e7e6ed4283e06710bfa141db118e3536f8535a65016a0abeec631b888d42790b00637879d6ae56cf728cd + languageName: node + linkType: hard + +"interface-store@npm:^2.0.2": + version: 2.0.2 + resolution: "interface-store@npm:2.0.2" + checksum: 0e80adb1de9ff57687cfa1b08499702b72cacf33a7e0320ac7781989f3685d73f2a84996358f540250229afa19c7acebf03085087762f718035622ea6a1a5b8a + languageName: node + linkType: hard + "internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.5": version: 1.0.5 resolution: "internal-slot@npm:1.0.5" @@ -18973,6 +19736,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^4.0.0": + version: 4.3.0 + resolution: "ip-regex@npm:4.3.0" + checksum: 7ff904b891221b1847f3fdf3dbb3e6a8660dc39bc283f79eb7ed88f5338e1a3d1104b779bc83759159be266249c59c2160e779ee39446d79d4ed0890dfd06f08 + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -18994,6 +19764,106 @@ __metadata: languageName: node linkType: hard +"ipfs-core-types@npm:^0.9.0": + version: 0.9.0 + resolution: "ipfs-core-types@npm:0.9.0" + dependencies: + interface-datastore: ^6.0.2 + multiaddr: ^10.0.0 + multiformats: ^9.4.13 + checksum: 22db8e039348dc372c99b45a87ce8dce81e15fa710cee410c1731004d528e0bd0da96b5a4c5571d501313fae93316af3b902c2220c486d2fade2e53f07a7d17b + languageName: node + linkType: hard + +"ipfs-core-utils@npm:^0.13.0": + version: 0.13.0 + resolution: "ipfs-core-utils@npm:0.13.0" + dependencies: + any-signal: ^2.1.2 + blob-to-it: ^1.0.1 + browser-readablestream-to-it: ^1.0.1 + debug: ^4.1.1 + err-code: ^3.0.1 + ipfs-core-types: ^0.9.0 + ipfs-unixfs: ^6.0.3 + ipfs-utils: ^9.0.2 + it-all: ^1.0.4 + it-map: ^1.0.4 + it-peekable: ^1.0.2 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + multiaddr: ^10.0.0 + multiaddr-to-uri: ^8.0.0 + multiformats: ^9.4.13 + nanoid: ^3.1.23 + parse-duration: ^1.0.0 + timeout-abort-controller: ^2.0.0 + uint8arrays: ^3.0.0 + checksum: af46717a69cf2e4f1bfbd77c7c1951eaa8b9619bdb888ca971849dc2d2468aceb0238e2f47ae45568478b2ceb1428ae7061239afc92aac06691f7bea9e21e4eb + languageName: node + linkType: hard + +"ipfs-http-client@npm:55.0.0": + version: 55.0.0 + resolution: "ipfs-http-client@npm:55.0.0" + dependencies: + "@ipld/dag-cbor": ^7.0.0 + "@ipld/dag-json": ^8.0.1 + "@ipld/dag-pb": ^2.1.3 + abort-controller: ^3.0.0 + any-signal: ^2.1.2 + debug: ^4.1.1 + err-code: ^3.0.1 + ipfs-core-types: ^0.9.0 + ipfs-core-utils: ^0.13.0 + ipfs-utils: ^9.0.2 + it-first: ^1.0.6 + it-last: ^1.0.4 + merge-options: ^3.0.4 + multiaddr: ^10.0.0 + multiformats: ^9.4.13 + native-abort-controller: ^1.0.3 + parse-duration: ^1.0.0 + stream-to-it: ^0.2.2 + uint8arrays: ^3.0.0 + checksum: b44394475dd9f6ef2e68cf22fb5bacf93c1a8967712f12a56baf9e90f183d625569bcabfe2e7c0d1cd2f0a2eed577ab8282f5a737552faf83d3b8a82d7910494 + languageName: node + linkType: hard + +"ipfs-unixfs@npm:^6.0.3": + version: 6.0.9 + resolution: "ipfs-unixfs@npm:6.0.9" + dependencies: + err-code: ^3.0.1 + protobufjs: ^6.10.2 + checksum: 025d852c3cfb09b813b35f7a4f7a06bd0ff904f88b35cdf54c6ea1eb021f1597ab9c2739adabbae9cfe645a2323598bd7974ff4a8898701bc4ba92842bf21736 + languageName: node + linkType: hard + +"ipfs-utils@npm:^9.0.2": + version: 9.0.14 + resolution: "ipfs-utils@npm:9.0.14" + dependencies: + any-signal: ^3.0.0 + browser-readablestream-to-it: ^1.0.0 + buffer: ^6.0.1 + electron-fetch: ^1.7.2 + err-code: ^3.0.1 + is-electron: ^2.2.0 + iso-url: ^1.1.5 + it-all: ^1.0.4 + it-glob: ^1.0.1 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + nanoid: ^3.1.20 + native-fetch: ^3.0.0 + node-fetch: ^2.6.8 + react-native-fetch-api: ^3.0.0 + stream-to-it: ^0.2.2 + checksum: 08108e03ea7b90e0fa11b76a4e24bd29d7e027c603494b53c1cc37b367fb559eaeea7b0f10b2e83ee419d50cdcb4d8105febdf185cab75c7e55afd4c8ed51aba + languageName: node + linkType: hard + "is-alphabetical@npm:1.0.4, is-alphabetical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphabetical@npm:1.0.4" @@ -19169,6 +20039,13 @@ __metadata: languageName: node linkType: hard +"is-electron@npm:^2.2.0": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 + languageName: node + linkType: hard + "is-extendable@npm:^0.1.0": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -19283,6 +20160,15 @@ __metadata: languageName: node linkType: hard +"is-ip@npm:^3.1.0": + version: 3.1.0 + resolution: "is-ip@npm:3.1.0" + dependencies: + ip-regex: ^4.0.0 + checksum: da2c2b282407194adf2320bade0bad94be9c9d0bdab85ff45b1b62d8185f31c65dff3884519d57bf270277e5ea2046c7916a6e5a6db22fe4b7ddcdd3760f23eb + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -19696,6 +20582,13 @@ __metadata: languageName: node linkType: hard +"iso-url@npm:^1.1.5": + version: 1.2.1 + resolution: "iso-url@npm:1.2.1" + checksum: 1af98c4ed6a39598407fd8c3c13e997c978985f477af2be3390d2aa3e422b4b5992ffbb0dac68656b165c71850fff748ac1309d29d4f2a728707d76bf0f98557 + languageName: node + linkType: hard + "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" @@ -19703,6 +20596,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -19772,6 +20674,65 @@ __metadata: languageName: node linkType: hard +"it-all@npm:^1.0.4": + version: 1.0.6 + resolution: "it-all@npm:1.0.6" + checksum: 7ca9a528c08ebe2fc8a3c93a41409219d18325ed31fedb9834ebac2822f0b2a96d7abcb6cbfa092114ab4d5f08951e694c7a2c3929ce4b5300769e710ae665db + languageName: node + linkType: hard + +"it-first@npm:^1.0.6": + version: 1.0.7 + resolution: "it-first@npm:1.0.7" + checksum: 0c9106d29120f02e68a08118de328437fb44c966385635d672684d4f0321ee22ca470a30f390132bdb454da0d4d3abb82c796dad8e391a827f1a3446711c7685 + languageName: node + linkType: hard + +"it-glob@npm:^1.0.1": + version: 1.0.2 + resolution: "it-glob@npm:1.0.2" + dependencies: + "@types/minimatch": ^3.0.4 + minimatch: ^3.0.4 + checksum: 629e7b66510006041df98882acfd73ac785836d51fc3ffa5c83c7099f931b3287a64c5a3772e7c1e46b63f1d511a9222f5b637c50f1c738222b46d104ff2e91c + languageName: node + linkType: hard + +"it-last@npm:^1.0.4": + version: 1.0.6 + resolution: "it-last@npm:1.0.6" + checksum: bc7b68ddd6cae902f0095d0c7ccb0078abdfa41fbf55862a9df9e30ae74be08282b5b3d21f40e6103af0d202144974e216d3c44f3e8f93c2c3f890322b02fcfa + languageName: node + linkType: hard + +"it-map@npm:^1.0.4": + version: 1.0.6 + resolution: "it-map@npm:1.0.6" + checksum: 5eb9da69e5d58624c79cea13dd8eeffe8a1ab6a28a527ac4d0301304279ffbe8da94faf50aa269e2a1630c94dc30a6bfe7a135bfb0c7e887216efad7c41a9f52 + languageName: node + linkType: hard + +"it-peekable@npm:^1.0.2": + version: 1.0.3 + resolution: "it-peekable@npm:1.0.3" + checksum: 6e9d68cbf582e301f191b8ad2660957c12c8100804a298fd5732ee35f2dd466a6af64d88d91343f2614675b4d4fb546618335303e9356659a9a0868c08b1ca54 + languageName: node + linkType: hard + +"it-to-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "it-to-stream@npm:1.0.0" + dependencies: + buffer: ^6.0.3 + fast-fifo: ^1.0.0 + get-iterator: ^1.0.2 + p-defer: ^3.0.0 + p-fifo: ^1.0.0 + readable-stream: ^3.6.0 + checksum: e0c5a3f3c90d4bc52686217865b8fa202f64bd3af493dec0fdacd58b4237166fb68935ff2823ed0a16414ba5becb9a5fb8c98f3ec99584789776d7277c1d129f + languageName: node + linkType: hard + "iterator.prototype@npm:^1.1.2": version: 1.1.2 resolution: "iterator.prototype@npm:1.1.2" @@ -19798,6 +20759,20 @@ __metadata: languageName: node linkType: hard +"jake@npm:^10.6.1": + version: 10.8.7 + resolution: "jake@npm:10.8.7" + dependencies: + async: ^3.2.3 + chalk: ^4.0.2 + filelist: ^1.0.4 + minimatch: ^3.1.2 + bin: + jake: bin/cli.js + checksum: a23fd2273fb13f0d0d845502d02c791fd55ef5c6a2d207df72f72d8e1eac6d2b8ffa6caf660bc8006b3242e0daaa88a3ecc600194d72b5c6016ad56e9cd43553 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.8.5 resolution: "jake@npm:10.8.5" @@ -19812,6 +20787,28 @@ __metadata: languageName: node linkType: hard +"jayson@npm:4.0.0": + version: 4.0.0 + resolution: "jayson@npm:4.0.0" + dependencies: + "@types/connect": ^3.4.33 + "@types/node": ^12.12.54 + "@types/ws": ^7.4.4 + JSONStream: ^1.3.5 + commander: ^2.20.3 + delay: ^5.0.0 + es6-promisify: ^5.0.0 + eyes: ^0.1.8 + isomorphic-ws: ^4.0.1 + json-stringify-safe: ^5.0.1 + uuid: ^8.3.2 + ws: ^7.4.5 + bin: + jayson: bin/jayson.js + checksum: 39eed3dc8d0e35320b0234f0faf7d6195b0cdc6940ec969f603a3ea14de8da98f2bd2775e3b982fe1ee6de63e66428fbf322d426e659fa25ea86c8ac92c8710d + languageName: node + linkType: hard + "jest-changed-files@npm:^27.5.1": version: 27.5.1 resolution: "jest-changed-files@npm:27.5.1" @@ -20434,7 +21431,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:3.x, js-yaml@npm:^3.13.1": +"js-yaml@npm:3.14.1, js-yaml@npm:3.x, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -20578,7 +21575,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee @@ -21035,6 +22032,27 @@ __metadata: languageName: node linkType: hard +"lodash.kebabcase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: 5a6c59161914e1bae23438a298c7433e83d935e0f59853fa862e691164696bc07f6dfa4c313d499fbf41ba8d53314e9850416502376705a357d24ee6ca33af78 + languageName: node + linkType: hard + +"lodash.lowercase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.lowercase@npm:4.3.0" + checksum: 463d7e50db29aea736563352f05adcff1f7c60574fe201f47ad98d2834f3dc64bee84a31702e1661d0f94913e89a46ded04befd425bbd3b95d23697689118f98 + languageName: node + linkType: hard + +"lodash.lowerfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.lowerfirst@npm:4.3.1" + checksum: e1688e18873777d394db4994d150dfc14cf01bf450169cf8296af4d84ecd7c3c4ae4dab3746f77f8719a093e4fff58bee3ae73ae7e23ef508b7d970b189d9952 + languageName: node + linkType: hard + "lodash.map@npm:^4.5.1": version: 4.6.0 resolution: "lodash.map@npm:4.6.0" @@ -21063,6 +22081,41 @@ __metadata: languageName: node linkType: hard +"lodash.pad@npm:^4.5.1": + version: 4.5.1 + resolution: "lodash.pad@npm:4.5.1" + checksum: 325805c929dad67d61470348046bc92bdad017a9edbda11322cc8945da92a10f943f935d24c340aa6d47cd9a3ff8f5ed6f4a77283266a54e32afae09be0c41ff + languageName: node + linkType: hard + +"lodash.padend@npm:^4.6.1": + version: 4.6.1 + resolution: "lodash.padend@npm:4.6.1" + checksum: c2e6e789debf83b98f5c085305cdcfff1067e7a31bda2a110fd765d3c11a99edfbeef570d9ef737ab3212006bdb8114e77622e518c18c1fce52b8fdfd9dab685 + languageName: node + linkType: hard + +"lodash.padstart@npm:^4.6.1": + version: 4.6.1 + resolution: "lodash.padstart@npm:4.6.1" + checksum: 0d6ad92c626d351db85de539e41df3238d7d36c5fbfc5f57c4f060c90c73ad9f1db566463487795fdf0bf290a8f133189a0bd91d051032f6eb2d15b7e1863b5e + languageName: node + linkType: hard + +"lodash.repeat@npm:^4.1.0": + version: 4.1.0 + resolution: "lodash.repeat@npm:4.1.0" + checksum: dac15fc59ed783678e1a9f986fefa180bfdbf95280852165965ecc8e15b871c6f0eaf7b325768a176014594d5186f1d6558fb72a18527bddd82539fb3ef8a4d3 + languageName: node + linkType: hard + +"lodash.snakecase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.snakecase@npm:4.1.1" + checksum: 1685ed3e83dda6eae5a4dcaee161a51cd210aabb3e1c09c57150e7dd8feda19e4ca0d27d0631eabe8d0f4eaa51e376da64e8c018ae5415417c5890d42feb72a8 + languageName: node + linkType: hard + "lodash.sortby@npm:^4.7.0": version: 4.7.0 resolution: "lodash.sortby@npm:4.7.0" @@ -21070,6 +22123,34 @@ __metadata: languageName: node linkType: hard +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: c03a4a784aca653845fe09d0ef67c902b6e49288dc45f542a4ab345a9c406a6dc194c774423fa313ee7b06283950301c1221dd2a1d8ecb2dac8dfbb9ed5606b5 + languageName: node + linkType: hard + +"lodash.trim@npm:^4.5.1": + version: 4.5.1 + resolution: "lodash.trim@npm:4.5.1" + checksum: 64b08e97d94d4c7620159371e6fe6cbb706514a41d737db2f189d9ec738305eb08cb772a9bbd2459e90f1c22f96174ec1047ceb8272f2f6040cb5bd63d8f9f2b + languageName: node + linkType: hard + +"lodash.trimend@npm:^4.5.1": + version: 4.5.1 + resolution: "lodash.trimend@npm:4.5.1" + checksum: 8d0c013e95529f6b8af0cbe987a730a4befdd1ab3674ae72199731109929d3ed9892217fdb282361a4cdd78c3a1d3aa7d6aadd313dd3c38b61248fb60e2f6627 + languageName: node + linkType: hard + +"lodash.trimstart@npm:^4.5.1": + version: 4.5.1 + resolution: "lodash.trimstart@npm:4.5.1" + checksum: 4b2d37505ac15f501f4f2378928455a40e858fa56c924494dbc21d5d828c55e821cda8543f25fe265e3d552937e915264a2567ba9291a172262c24c33e9ad6b0 + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -21084,6 +22165,20 @@ __metadata: languageName: node linkType: hard +"lodash.uppercase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.uppercase@npm:4.3.0" + checksum: 0a435cccd3acfe732c968deb4897d6237051d69f58f18e55e7faa781b1731176012e3286505780e93a4e0acb93a6799e39908c7ea3367678bdd2aecb963f469d + languageName: node + linkType: hard + +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: cadec6955900afe1928cc60cdc4923a79c2ef991e42665419cc81630ed9b4f952a1093b222e0141ab31cbc4dba549f97ec28ff67929d71e01861c97188a5fa83 + languageName: node + linkType: hard + "lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.16, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -21091,7 +22186,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:3.0.0": +"log-symbols@npm:3.0.0, log-symbols@npm:^3.0.0": version: 3.0.0 resolution: "log-symbols@npm:3.0.0" dependencies: @@ -21132,6 +22227,20 @@ __metadata: languageName: node linkType: hard +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 16afbe8f749c7c849db1f4de4e2e6a31ac6e617cead3bdc4f9605cb703cd20e1e9fc1a7baba674ffcca57d660a6e5b53a9e236d7b25a295d3855cca79cc06744 + languageName: node + linkType: hard + +"long@npm:^5.2.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 885ede7c3de4facccbd2cacc6168bae3a02c3e836159ea4252c87b6e34d40af819824b2d4edce330bfb5c4d6e8ce3ec5864bdcf9473fa1f53a4f8225860e5897 + languageName: node + linkType: hard + "longest@npm:^2.0.1": version: 2.0.1 resolution: "longest@npm:2.0.1" @@ -21412,6 +22521,17 @@ __metadata: languageName: node linkType: hard +"matchstick-as@npm:0.5.0": + version: 0.5.0 + resolution: "matchstick-as@npm:0.5.0" + dependencies: + "@graphprotocol/graph-ts": ^0.27.0 + assemblyscript: ^0.19.20 + wabt: 1.0.24 + checksum: 299c66c3990dc0379d7172ddad6878e657b2e23ab39ff98eab315f3a55144882d3f3911ab6135ff2725293835acea17ec83fe169459d157ecacfc6f41d15b6cc + languageName: node + linkType: hard + "mcl-wasm@npm:^0.7.1": version: 0.7.9 resolution: "mcl-wasm@npm:0.7.9" @@ -21552,6 +22672,15 @@ __metadata: languageName: node linkType: hard +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -21712,7 +22841,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:2 || 3, minimatch@npm:3.1.2, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -21902,6 +23031,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0": version: 7.0.4 resolution: "minipass@npm:7.0.4" @@ -22263,6 +23399,29 @@ __metadata: languageName: node linkType: hard +"multiaddr-to-uri@npm:^8.0.0": + version: 8.0.0 + resolution: "multiaddr-to-uri@npm:8.0.0" + dependencies: + multiaddr: ^10.0.0 + checksum: c70d1f4d98d4eee6f7e47e4bd5b3aeae8394339c455bed3cccfc38a11aa7f61681b5cdfa02f338687d2181526318f66d00c370dca6bf633955be6bfd87cb833d + languageName: node + linkType: hard + +"multiaddr@npm:^10.0.0": + version: 10.0.1 + resolution: "multiaddr@npm:10.0.1" + dependencies: + dns-over-http-resolver: ^1.2.3 + err-code: ^3.0.1 + is-ip: ^3.1.0 + multiformats: ^9.4.5 + uint8arrays: ^3.0.0 + varint: ^6.0.0 + checksum: d53aaf7efd52ee5e6413ef36ececd29239ceb5c1f048c1fa9b820442226dc232067312d25e509a2571a14047465fb934dd35029c7f3166f4d02d13e3c501925d + languageName: node + linkType: hard + "multibase@npm:^0.7.0": version: 0.7.0 resolution: "multibase@npm:0.7.0" @@ -22314,6 +23473,13 @@ __metadata: languageName: node linkType: hard +"multiformats@npm:^9.4.13, multiformats@npm:^9.4.2, multiformats@npm:^9.4.5, multiformats@npm:^9.5.4": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e + languageName: node + linkType: hard + "multihashes@npm:^0.4.15, multihashes@npm:~0.4.15": version: 0.4.21 resolution: "multihashes@npm:0.4.21" @@ -22325,6 +23491,15 @@ __metadata: languageName: node linkType: hard +"mustache@npm:^4.2.0": + version: 4.2.0 + resolution: "mustache@npm:4.2.0" + bin: + mustache: bin/mustache + checksum: 928fcb63e3aa44a562bfe9b59ba202cccbe40a46da50be6f0dd831b495be1dd7e38ca4657f0ecab2c1a89dc7bccba0885eab7ee7c1b215830da765758c7e0506 + languageName: node + linkType: hard + "mute-stream@npm:0.0.8": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" @@ -22358,7 +23533,16 @@ __metadata: resolution: "nanoid@npm:3.3.3" bin: nanoid: bin/nanoid.cjs - checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + languageName: node + linkType: hard + +"nanoid@npm:^3.0.2, nanoid@npm:^3.1.20, nanoid@npm:^3.1.23, nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 languageName: node linkType: hard @@ -22371,15 +23555,6 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" - bin: - nanoid: bin/nanoid.cjs - checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 - languageName: node - linkType: hard - "napi-macros@npm:~2.0.0": version: 2.0.0 resolution: "napi-macros@npm:2.0.0" @@ -22387,6 +23562,24 @@ __metadata: languageName: node linkType: hard +"native-abort-controller@npm:^1.0.3, native-abort-controller@npm:^1.0.4": + version: 1.0.4 + resolution: "native-abort-controller@npm:1.0.4" + peerDependencies: + abort-controller: "*" + checksum: 7c98800304155300344f586721a12ac4207c9d660c7bc121549f6afb3db9175fe8200cfb3017ea3ea2664a9601b01fdd92f200783b2ce8792d64a4c50bd4030a + languageName: node + linkType: hard + +"native-fetch@npm:^3.0.0": + version: 3.0.0 + resolution: "native-fetch@npm:3.0.0" + peerDependencies: + node-fetch: "*" + checksum: eec8cc78d6da4d0f3f56055e3e557473ac86dd35fd40053ea268d644af7b20babc891d2b53ef821b77ed2428265f60b85e49d754c555de89bfa071a743b853bb + languageName: node + linkType: hard + "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -22401,6 +23594,13 @@ __metadata: languageName: node linkType: hard +"natural-orderby@npm:^2.0.3": + version: 2.0.3 + resolution: "natural-orderby@npm:2.0.3" + checksum: 039be7f0b6cf81e63d2ae5299553f8e6c8f6ae4f571c7c002eab9c6d36a2e33101704e0ec64c3cecef956fa3b1a68bb0ddfc03208e89f31c0b0bb806f3198646 + languageName: node + linkType: hard + "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -22655,6 +23855,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.8": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-forge@npm:^1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -23047,6 +24261,13 @@ __metadata: languageName: node linkType: hard +"object-treeify@npm:^1.1.33": + version: 1.1.33 + resolution: "object-treeify@npm:1.1.33" + checksum: 3af7f889349571ee73f5bdfb5ac478270c85eda8bcba950b454eb598ce41759a1ed6b0b43fbd624cb449080a4eb2df906b602e5138b6186b9563b692231f1694 + languageName: node + linkType: hard + "object.assign@npm:4.1.0": version: 4.1.0 resolution: "object.assign@npm:4.1.0" @@ -23287,6 +24508,21 @@ __metadata: languageName: node linkType: hard +"ora@npm:4.0.2": + version: 4.0.2 + resolution: "ora@npm:4.0.2" + dependencies: + chalk: ^2.4.2 + cli-cursor: ^3.1.0 + cli-spinners: ^2.2.0 + is-interactive: ^1.0.0 + log-symbols: ^3.0.0 + strip-ansi: ^5.2.0 + wcwidth: ^1.0.1 + checksum: b7c4b38517a95f25ad353deb12e025eb37b0afa69e315b80a892852db5fd47309b21f515c808e19e453364ad0d7153d07424a06f5964e775b09438a524a397b5 + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -23363,6 +24599,13 @@ __metadata: languageName: node linkType: hard +"p-defer@npm:^3.0.0": + version: 3.0.0 + resolution: "p-defer@npm:3.0.0" + checksum: ac3b0976a1c76b67cca1a34e00f7299b0cc230891f820749686aa84f8947326bbe0f8e3b7d9ca511578ee06f0c1a6e0ff68c8e9c325eac455f09d99f91697161 + languageName: node + linkType: hard + "p-event@npm:^2.1.0": version: 2.3.1 resolution: "p-event@npm:2.3.1" @@ -23372,6 +24615,16 @@ __metadata: languageName: node linkType: hard +"p-fifo@npm:^1.0.0": + version: 1.0.0 + resolution: "p-fifo@npm:1.0.0" + dependencies: + fast-fifo: ^1.0.0 + p-defer: ^3.0.0 + checksum: 4cdce44ff8266351014a460705a804c02760e5b721a018dbef6fae7d25caf83af2e343be58810297473383c1783bb7048388cb5c22938b3f904818531bc44ee7 + languageName: node + linkType: hard + "p-finally@npm:^1.0.0": version: 1.0.0 resolution: "p-finally@npm:1.0.0" @@ -23577,6 +24830,13 @@ __metadata: languageName: node linkType: hard +"parse-duration@npm:^1.0.0": + version: 1.1.0 + resolution: "parse-duration@npm:1.1.0" + checksum: 3cfc10aa61b3a06373a347289e1704de47d5d845c79330bbab20b54c02567f3710ba84544a3a44a986c3381c68670d89542fe9de607fb0814e52f78b34893cd9 + languageName: node + linkType: hard + "parse-entities@npm:^2.0.0": version: 2.0.0 resolution: "parse-entities@npm:2.0.0" @@ -23667,6 +24927,16 @@ __metadata: languageName: node linkType: hard +"password-prompt@npm:^1.1.2": + version: 1.1.3 + resolution: "password-prompt@npm:1.1.3" + dependencies: + ansi-escapes: ^4.3.2 + cross-spawn: ^7.0.3 + checksum: 9a5fdbd7360db896809704c141acfe9258450a9982c4c177b82a1e6c69d204800cdab6064abac6736bd7d31142c80108deedf4484146594747cb3ce776816e97 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -24479,6 +25749,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:1.19.1": + version: 1.19.1 + resolution: "prettier@npm:1.19.1" + bin: + prettier: ./bin-prettier.js + checksum: bc78219e0f8173a808f4c6c8e0a137dd8ebd4fbe013e63fe1a37a82b48612f17b8ae8e18a992adf802ee2cf7428f14f084e7c2846ca5759cf4013c6e54810e1f + languageName: node + linkType: hard + "prettier@npm:^2.3.1, prettier@npm:^2.5.1, prettier@npm:^2.8.3": version: 2.8.7 resolution: "prettier@npm:2.8.7" @@ -24632,6 +25911,30 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^6.10.2": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 + "@types/node": ">=13.7.0" + long: ^4.0.0 + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: b2fc6a01897b016c2a7e43a854ab4a3c57080f61be41e552235436e7a730711b8e89e47cb4ae52f0f065b5ab5d5989fc932f390337ce3a8ccf07203415700850 + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -24670,6 +25973,16 @@ __metadata: languageName: node linkType: hard +"pump@npm:^1.0.0": + version: 1.0.3 + resolution: "pump@npm:1.0.3" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: 61fe58694f9900020a5cf5bc765d74396891c201afecf06659df2f5874fd832be4e19e2f95cc72d8b9eb98ace0a4db3cebf7343f9fc893a930577be29e3ad8b5 + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -25113,6 +26426,15 @@ __metadata: languageName: node linkType: hard +"react-native-fetch-api@npm:^3.0.0": + version: 3.0.0 + resolution: "react-native-fetch-api@npm:3.0.0" + dependencies: + p-defer: ^3.0.0 + checksum: f10f435060551c470711ba0b3663e3d49c7701aae84ea645d66992d756b13e923fb5762b324d3583d85c1c0def4138b9cc3f686bab1c1bc10d3ad82dc7175c99 + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.4": version: 2.3.4 resolution: "react-remove-scroll-bar@npm:2.3.4" @@ -25331,6 +26653,18 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:~1.0.26-4": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: 0.0.1 + string_decoder: ~0.10.x + checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 + languageName: node + linkType: hard + "readdirp@npm:~3.2.0": version: 3.2.0 resolution: "readdirp@npm:3.2.0" @@ -25356,6 +26690,15 @@ __metadata: languageName: node linkType: hard +"receptacle@npm:^1.3.2": + version: 1.3.2 + resolution: "receptacle@npm:1.3.2" + dependencies: + ms: ^2.1.1 + checksum: 7c5011f19e6ddcb759c1e6756877cee3c9eb78fbd1278eca4572d75f74993f0ccdc1e5f7761de6e682dff5344ee94f7a69bc492e2e8eb81d8777774a2399ce9c + languageName: node + linkType: hard + "rechoir@npm:^0.6.2": version: 0.6.2 resolution: "rechoir@npm:0.6.2" @@ -25384,6 +26727,15 @@ __metadata: languageName: node linkType: hard +"redeyed@npm:~2.1.0": + version: 2.1.1 + resolution: "redeyed@npm:2.1.1" + dependencies: + esprima: ~4.0.0 + checksum: 39a1426e377727cfb47a0e24e95c1cf78d969fbc388dc1e0fa1e2ef8a8756450cefb8b0c2598f63b85f1a331986fca7604c0db798427a5775a1dbdb9c1291979 + languageName: node + linkType: hard + "reduce-flatten@npm:^2.0.0": version: 2.0.0 resolution: "reduce-flatten@npm:2.0.0" @@ -25702,7 +27054,7 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.79.0, request@npm:^2.88.0": +"request@npm:2.88.2, request@npm:^2.79.0, request@npm:^2.88.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -25983,6 +27335,13 @@ __metadata: languageName: node linkType: hard +"retimer@npm:^3.0.0": + version: 3.0.0 + resolution: "retimer@npm:3.0.0" + checksum: f88309196e9d4f2d4be0c76eafc27a9f102c74b40b391ce730785b052c345d7bd59c3e4411a4c422f89f19a42b97b28034639e2f06c63133a06ec8958e9e7516 + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -26551,6 +27910,43 @@ __metadata: languageName: node linkType: hard +"semaphore-contracts@workspace:packages/contracts": + version: 0.0.0-use.local + resolution: "semaphore-contracts@workspace:packages/contracts" + dependencies: + "@nomicfoundation/hardhat-chai-matchers": ^1.0.5 + "@nomiclabs/hardhat-ethers": ^2.0.6 + "@nomiclabs/hardhat-etherscan": ^3.1.7 + "@openzeppelin/contracts": 4.7.3 + "@semaphore-protocol/group": "workspace:packages/group" + "@semaphore-protocol/identity": "workspace:packages/identity" + "@semaphore-protocol/proof": "workspace:packages/proof" + "@typechain/ethers-v5": ^10.0.0 + "@typechain/hardhat": ^6.0.0 + "@types/chai": ^4.3.0 + "@types/download": ^8.0.1 + "@types/mocha": ^9.1.0 + "@types/node": ^17.0.12 + "@types/rimraf": ^3.0.2 + "@zk-kit/incremental-merkle-tree.sol": 1.3.3 + chai: ^4.3.5 + circomlib: ^2.0.2 + circomlibjs: ^0.1.7 + download: ^8.0.0 + ethers: ^5.6.8 + hardhat: ^2.9.7 + hardhat-gas-reporter: ^1.0.8 + js-logger: ^1.6.1 + prettier-plugin-solidity: ^1.0.0-beta.19 + rimraf: ^3.0.2 + solhint: ^3.3.6 + solhint-plugin-prettier: ^0.0.5 + solidity-coverage: ^0.7.21 + ts-node: ^10.4.0 + typechain: ^8.0.0 + languageName: unknown + linkType: soft + "semaphore-docs@workspace:apps/docs": version: 0.0.0-use.local resolution: "semaphore-docs@workspace:apps/docs" @@ -26623,6 +28019,18 @@ __metadata: languageName: unknown linkType: soft +"semaphore-subgraph@workspace:apps/subgraph": + version: 0.0.0-use.local + resolution: "semaphore-subgraph@workspace:apps/subgraph" + dependencies: + "@graphprotocol/graph-cli": 0.56.0 + "@graphprotocol/graph-ts": ^0.31.0 + "@types/mustache": ^4.2.2 + matchstick-as: 0.5.0 + mustache: ^4.2.0 + languageName: unknown + linkType: soft + "semaphore-website@workspace:apps/website": version: 0.0.0-use.local resolution: "semaphore-website@workspace:apps/website" @@ -26663,6 +28071,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.3.5": + version: 7.3.5 + resolution: "semver@npm:7.3.5" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 + languageName: node + linkType: hard + "semver@npm:7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" @@ -26674,6 +28093,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.4.0": + version: 7.4.0 + resolution: "semver@npm:7.4.0" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: debf7f4d6fa36fdc5ef82bd7fc3603b6412165c8a3963a30be0c45a587be1a49e7681e80aa109da1875765741af24edc6e021cee1ba16ae96f649d06c5df296d + languageName: node + linkType: hard + "semver@npm:^5.4.1": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -27317,7 +28747,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.20, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -27441,6 +28871,13 @@ __metadata: languageName: node linkType: hard +"split-ca@npm:^1.0.0": + version: 1.0.1 + resolution: "split-ca@npm:1.0.1" + checksum: 1e7409938a95ee843fe2593156a5735e6ee63772748ee448ea8477a5a3e3abde193c3325b3696e56a5aff07c7dcf6b1f6a2f2a036895b4f3afe96abb366d893f + languageName: node + linkType: hard + "split2@npm:^3.0.0": version: 3.2.2 resolution: "split2@npm:3.2.2" @@ -27565,6 +29002,15 @@ __metadata: languageName: node linkType: hard +"stream-to-it@npm:^0.2.2": + version: 0.2.4 + resolution: "stream-to-it@npm:0.2.4" + dependencies: + get-iterator: ^1.0.2 + checksum: 0725dd8ddb889829cab70b81a883d5a09cd34272ccd44fad195de9fb900a8588fbf801490b6418ae5e234c128743ad829c50cfcd6686fab3b50bb6e76d59238c + languageName: node + linkType: hard + "streamsearch@npm:^1.1.0": version: 1.1.0 resolution: "streamsearch@npm:1.1.0" @@ -27776,6 +29222,13 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 + languageName: node + linkType: hard + "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -28020,7 +29473,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -28063,7 +29516,7 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": +"supports-hyperlinks@npm:^2.0.0, supports-hyperlinks@npm:^2.2.0": version: 2.3.0 resolution: "supports-hyperlinks@npm:2.3.0" dependencies: @@ -28153,7 +29606,7 @@ __metadata: languageName: node linkType: hard -"sync-request@npm:^6.0.0": +"sync-request@npm:6.1.0, sync-request@npm:^6.0.0": version: 6.1.0 resolution: "sync-request@npm:6.1.0" dependencies: @@ -28212,7 +29665,19 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^1.5.2": +"tar-fs@npm:~1.16.3": + version: 1.16.3 + resolution: "tar-fs@npm:1.16.3" + dependencies: + chownr: ^1.0.1 + mkdirp: ^0.5.1 + pump: ^1.0.0 + tar-stream: ^1.1.2 + checksum: 0c78aa173cde0df44e5fbbd85077240b8340444bff5ec026539e9e20806ca31b5d4b8cee58befe5c1dae7fa47cd1bb3f9a0efebf2212c2bfbad31f23de329c79 + languageName: node + linkType: hard + +"tar-stream@npm:^1.1.2, tar-stream@npm:^1.5.2": version: 1.6.2 resolution: "tar-stream@npm:1.6.2" dependencies: @@ -28242,6 +29707,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.1.0": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" @@ -28452,6 +29931,17 @@ __metadata: languageName: node linkType: hard +"timeout-abort-controller@npm:^2.0.0": + version: 2.0.0 + resolution: "timeout-abort-controller@npm:2.0.0" + dependencies: + abort-controller: ^3.0.0 + native-abort-controller: ^1.0.4 + retimer: ^3.0.0 + checksum: 7f57cb6d5f4dcdcefe9c89deacc70c07ecafdba32d51333eca6aaf91e70bbff7e6ad13d9c098480d27a6f360383685f84819a3f475a5cfe8d3f3c7da465d1da7 + languageName: node + linkType: hard + "tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6": version: 1.3.1 resolution: "tiny-invariant@npm:1.3.1" @@ -28466,6 +29956,15 @@ __metadata: languageName: node linkType: hard +"tmp-promise@npm:3.0.3": + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" + dependencies: + tmp: ^0.2.0 + checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c + languageName: node + linkType: hard + "tmp@npm:0.0.33, tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -28475,6 +29974,15 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.0": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -29114,6 +30622,15 @@ __metadata: languageName: node linkType: hard +"uint8arrays@npm:^3.0.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: ^9.4.2 + checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 + languageName: node + linkType: hard + "ultron@npm:~1.1.0": version: 1.1.1 resolution: "ultron@npm:1.1.1" @@ -29150,6 +30667,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + "undici@npm:^5.12.0": version: 5.21.0 resolution: "undici@npm:5.21.0" @@ -29535,6 +31059,13 @@ __metadata: languageName: node linkType: hard +"urlpattern-polyfill@npm:^8.0.0": + version: 8.0.2 + resolution: "urlpattern-polyfill@npm:8.0.2" + checksum: d2cc0905a613c77e330c426e8697ee522dd9640eda79ac51160a0f6350e103f09b8c327623880989f8ba7325e8d95267b745aa280fdcc2aead80b023e16bd09d + languageName: node + linkType: hard + "use-callback-ref@npm:^1.3.0": version: 1.3.0 resolution: "use-callback-ref@npm:1.3.0" @@ -29783,6 +31314,13 @@ __metadata: languageName: node linkType: hard +"varint@npm:^6.0.0": + version: 6.0.0 + resolution: "varint@npm:6.0.0" + checksum: 7684113c9d497c01e40396e50169c502eb2176203219b96e1c5ac965a3e15b4892bd22b7e48d87148e10fffe638130516b6dbeedd0efde2b2d0395aa1772eea7 + languageName: node + linkType: hard + "vary@npm:^1, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -29862,6 +31400,23 @@ __metadata: languageName: node linkType: hard +"wabt@npm:1.0.24": + version: 1.0.24 + resolution: "wabt@npm:1.0.24" + bin: + wasm-decompile: bin/wasm-decompile + wasm-interp: bin/wasm-interp + wasm-objdump: bin/wasm-objdump + wasm-opcodecnt: bin/wasm-opcodecnt + wasm-strip: bin/wasm-strip + wasm-validate: bin/wasm-validate + wasm2c: bin/wasm2c + wasm2wat: bin/wasm2wat + wat2wasm: bin/wat2wasm + checksum: 7d404acaa0605b5cde99585839b97db37998754512d89e1c63147bc62f4bfd46484595cc8f2e8d6f9741f67206ed936336a0828a3e1e6f3d348567cda6176333 + languageName: node + linkType: hard + "wait-on@npm:^6.0.1": version: 6.0.1 resolution: "wait-on@npm:6.0.1" @@ -29944,6 +31499,13 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:^3.2.1": + version: 3.3.2 + resolution: "web-streams-polyfill@npm:3.3.2" + checksum: 0292f4113c1bda40d8e8ecebee39eb14cc2e2e560a65a6867980e394537a2645130e2c73f5ef6e641fd3697d2f71720ccf659aebaf69a9d5a773f653a0fdf39d + languageName: node + linkType: hard + "web-worker@npm:^1.2.0": version: 1.2.0 resolution: "web-worker@npm:1.2.0" @@ -30113,6 +31675,16 @@ __metadata: languageName: node linkType: hard +"web3-eth-abi@npm:1.7.0": + version: 1.7.0 + resolution: "web3-eth-abi@npm:1.7.0" + dependencies: + "@ethersproject/abi": 5.0.7 + web3-utils: 1.7.0 + checksum: 1ff34dbf23844d90e7f669c28915fc709631948afe09dbcd00d061616db526899938d5c2704afd6c7c037d3822aeb9cdafb5a2ad3ad827e38fd22c45a21eace0 + languageName: node + linkType: hard + "web3-eth-abi@npm:1.7.4": version: 1.7.4 resolution: "web3-eth-abi@npm:1.7.4" @@ -30432,6 +32004,21 @@ __metadata: languageName: node linkType: hard +"web3-utils@npm:1.7.0": + version: 1.7.0 + resolution: "web3-utils@npm:1.7.0" + dependencies: + bn.js: ^4.11.9 + ethereum-bloom-filters: ^1.0.6 + ethereumjs-util: ^7.1.0 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: ^2.1.0 + utf8: 3.0.0 + checksum: cd96c8cca5507714bf089eb91d513a3515b6e4a959b9d380ff543b2aa076379a4fb613a64c03a4d4332a8d7e78e5e22bb41ed0092ee634bbd336d12d80a73dc0 + languageName: node + linkType: hard + "web3-utils@npm:1.7.4": version: 1.7.4 resolution: "web3-utils@npm:1.7.4" @@ -30522,6 +32109,19 @@ __metadata: languageName: node linkType: hard +"webcrypto-core@npm:^1.7.7": + version: 1.7.7 + resolution: "webcrypto-core@npm:1.7.7" + dependencies: + "@peculiar/asn1-schema": ^2.3.6 + "@peculiar/json-schema": ^1.1.12 + asn1js: ^3.0.1 + pvtsutils: ^1.3.2 + tslib: ^2.4.0 + checksum: 1dc5aedb250372dd95e175a671b990ae50e36974f99c4efc85d88e6528c1bc52dd964d44a41b68043c21fb26aabfe8aad4f05a1c39ca28d61de5ca7388413d52 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -30884,7 +32484,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -31274,7 +32874,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.3.1, ws@npm:^7.4.6": +"ws@npm:^7.3.1, ws@npm:^7.4.5, ws@npm:^7.4.6": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -31430,7 +33030,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": +"yaml@npm:1.10.2, yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f @@ -31461,7 +33061,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c From d0238552641b291a6d1c481c9bf77dc9fc2485f5 Mon Sep 17 00:00:00 2001 From: cedoor Date: Thu, 11 Jan 2024 11:00:31 +0000 Subject: [PATCH 2/2] chore(subgraph): add test files automatically generated to gitignore --- apps/subgraph/.gitignore | 3 +++ apps/subgraph/tests/.bin/semaphore.wasm | Bin 50093 -> 0 bytes 2 files changed, 3 insertions(+) delete mode 100644 apps/subgraph/tests/.bin/semaphore.wasm diff --git a/apps/subgraph/.gitignore b/apps/subgraph/.gitignore index cc96ad5c6..378c2abe7 100644 --- a/apps/subgraph/.gitignore +++ b/apps/subgraph/.gitignore @@ -3,3 +3,6 @@ generated # The Graph subgraph.yaml + +# Tests +tests/.bin/semaphore.wasm diff --git a/apps/subgraph/tests/.bin/semaphore.wasm b/apps/subgraph/tests/.bin/semaphore.wasm deleted file mode 100644 index 30bf3dc8c1b59f7173d9c35117cb8343c1cca3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50093 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