diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a6736f0..92da946 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,18 +37,18 @@ jobs: changed-files: runs-on: ubuntu-latest outputs: - any_changed: ${{ steps.changed-files.outputs.any_changed }} - modified_files: ${{ steps.changed-files.outputs.modified_files }} + any_sol_changed: ${{ steps.changed-files.outputs.any_changed }} + changed_files: ${{ steps.changed-files.outputs.all_changed_and_modified_files }} steps: - uses: actions/checkout@v4 - name: Get changed files id: changed-files uses: tj-actions/changed-files@v44 with: - files: packages/**/*.{sol,json,ts} + files: packages/**/*.sol compile: - if: needs.changed-files.outputs.any_changed == 'true' + if: needs.changed-files.outputs.any_sol_changed == 'true' needs: [changed-files, deps] runs-on: ubuntu-latest steps: @@ -56,18 +56,20 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + # forge needs some deps coming from node_modules, so we need to restore it - uses: actions/cache/restore@v4 with: path: node_modules key: ${{ needs.deps.outputs.cache-key }} - - - run: yarn compile - + - uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + - run: forge compile - name: Upload compilation results uses: actions/upload-artifact@v4 with: - name: all-artifacts - path: packages/**/artifacts/** + name: out + path: out/** style: needs: deps @@ -77,6 +79,9 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + - uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly - uses: actions/cache/restore@v4 with: path: node_modules @@ -84,43 +89,35 @@ jobs: - run: yarn format tests: - if: needs.changed-files.outputs.any_changed == 'true' - needs: [changed-files, set-matrix, deps, compile] + if: needs.changed-files.outputs.any_sol_changed == 'true' + needs: [changed-files, deps, compile] runs-on: ubuntu-latest - strategy: - matrix: - dir: ${{ fromJson(needs.set-matrix.outputs.matrix) }} - steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/download-artifact@v4 with: - node-version: 20 + name: out + path: out/ + # forge needs some deps coming from node_modules, so we need to restore it - uses: actions/cache/restore@v4 with: path: node_modules key: ${{ needs.deps.outputs.cache-key }} - - uses: actions/download-artifact@v4 + - uses: foundry-rs/foundry-toolchain@v1 with: - name: all-artifacts - path: packages/ + version: nightly - - if: contains(needs.changed-files.outputs.modified_files, matrix.dir) - name: Test - run: | - workspace=$(jq -r '.name' packages/${{ matrix.dir }}/package.json) - yarn workspace "$workspace" run test:coverage + - run: forge coverage --report lcov - - if: contains(needs.changed-files.outputs.modified_files, matrix.dir) && github.event_name == 'push' && github.ref == 'refs/heads/main' + - if: github.event_name == 'pull_request' && github.ref == 'refs/pull/32/merge' # TODO: switch back to push & refs/heads/main checks name: Coveralls uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.GITHUB_TOKEN }} - parallel: true - flag-name: run ${{ join(matrix.*, '-') }} + file: lcov.info set-matrix: - if: needs.changed-files.outputs.any_changed == 'true' + if: needs.changed-files.outputs.any_sol_changed == 'true' needs: changed-files runs-on: ubuntu-latest outputs: @@ -134,8 +131,8 @@ jobs: echo "matrix=$matrix" >> $GITHUB_OUTPUT slither: - if: needs.changed-files.outputs.any_changed == 'true' - needs: [changed-files, set-matrix, deps] + if: needs.changed-files.outputs.any_sol_changed == 'true' + needs: [changed-files, compile, set-matrix] runs-on: ubuntu-latest permissions: contents: read @@ -145,27 +142,12 @@ jobs: dir: ${{ fromJson(needs.set-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - - # FIXME this does not work as a way to restore compilation results for slither job but it does for the compile job ?? - #- uses: actions/download-artifact@v4 - # with: - # name: all-artifacts - # path: packages/ - - - uses: actions/setup-node@v4 - with: - node-version: 20 - - uses: actions/cache/restore@v4 + - uses: actions/download-artifact@v4 with: - path: node_modules - key: ${{ needs.deps.outputs.cache-key }} - - if: contains(needs.changed-files.outputs.modified_files, matrix.dir) - name: Compile contracts - run: | - workspace=$(jq -r '.name' packages/${{ matrix.dir }}/package.json) - yarn workspace "$workspace" run compile + name: out + path: out/ - - if: contains(needs.changed-files.outputs.modified_files, matrix.dir) + - if: contains(needs.changed-files.outputs.changed_files, matrix.dir) name: Run slither uses: crytic/slither-action@v0.4.0 id: slither @@ -177,7 +159,7 @@ jobs: slither-args: --filter-paths "test" --exclude-dependencies --markdown-root ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/ target: packages/${{ matrix.dir }} - - if: contains(needs.changed-files.outputs.modified_files, matrix.dir) + - if: contains(needs.changed-files.outputs.changed_files, matrix.dir) name: Upload SARIF files uses: github/codeql-action/upload-sarif@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8348888..2c34202 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,13 +5,10 @@ permissions: on: push: - tags: - - "*" - + tags: ["*"] jobs: - release: + npm: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 with: @@ -34,10 +31,18 @@ jobs: run: yarn - name: Publish packages - run: yarn version:publish + run: yarn workspaces foreach -A --no-private npm publish --tolerate-republish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - run: yarn version:release + - run: yarn changelogithub env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + forge: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: fregante/setup-git-user@v2.0.1 + - name: Push contracts to forge branch + run: scripts/publish-for-forge.sh diff --git a/.gitignore b/.gitignore index eac0556..c106522 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,14 @@ # Logs logs *.log -npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock # IDE .vscode .idea -# Cargo -target - # Testing coverage coverage.json @@ -31,27 +17,9 @@ coverage.json # Dependency directories node_modules/ -# Parcel cache -.parcel-cache - -# TypeScript cache -*.tsbuildinfo - -# Output of 'npm pack' -*.tgz - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Yarn Integrity file -.yarn-integrity - -# Generate output -dist -build +# Forge +out +lcov.info # Hardhat artifacts @@ -65,8 +33,6 @@ typechain-types .env.production.local .env.local -# Optional npm cache directory -.npm .DS_Store # yarn v3 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..888d42d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry-rs/forge-std diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 909fefa..6ffbd5e 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,3 +1,4 @@ { - "**/*.{js,ts,md,json,sol,yml,yaml}": "prettier --write" + "**/*.{js,ts,md,json,yml,yaml}": "yarn prettier --write", + "**/*.sol": "forge fmt" } diff --git a/.prettierignore b/.prettierignore index 1d5a624..02b5139 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,5 @@ # dependencies node_modules -package-lock.json yarn.lock .yarn @@ -8,13 +7,9 @@ yarn.lock coverage coverage.json -# hardhat -cache -typechain-types - -# production -dist -build +# forge +out +lib # github .github/ISSUE_TEMPLATE @@ -24,9 +19,5 @@ build *.pem # debug -npm-debug.log* yarn-debug.log* yarn-error.log* - -# others -target diff --git a/packages/excubiae/.solhint.json b/.solhint.json similarity index 100% rename from packages/excubiae/.solhint.json rename to .solhint.json diff --git a/README.md b/README.md index bcce619..75ac5d0 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,15 @@ - Circom: https://github.com/privacy-scaling-explorations/zk-kit.circom - Noir: https://github.com/privacy-scaling-explorations/zk-kit.noir -## 📦 Packages +## Install + +### ⚒️ [Forge](https://book.getfoundry.sh/) + +```commandline +forge install privacy-scaling-explorations/zk-kit.solidity@forge +``` + +### 📦 Node Packages @@ -136,6 +144,28 @@ ❌ + + + + + +
Package
+ + @zk-kit/lazytower.sol + + + + + NPM version + + + + + Downloads + + + +
@@ -146,7 +176,7 @@ - 🚀 Share ideas for new [features](https://github.com/privacy-scaling-explorations/zk-kit.solidity/issues/new?assignees=&labels=feature+%3Arocket%3A&template=---feature.md&title=) - 🐛 Create a report if you find any [bugs](https://github.com/privacy-scaling-explorations/zk-kit.solidity/issues/new?assignees=&labels=bug+%F0%9F%90%9B&template=---bug.md&title=) in the code -## 🛠 Install +## 🛠 Develop Clone this repository: @@ -160,9 +190,9 @@ and install the dependencies: cd zk-kit.solidity && yarn ``` -## 📜 Usage +### 📜 Usage -### Code formatting +#### Code formatting Run [Prettier](https://prettier.io/) to check formatting rules: @@ -176,7 +206,7 @@ or to automatically format the code: yarn format:write ``` -### Conventional commits +#### Conventional commits Semaphore uses [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/). A [command line utility](https://github.com/commitizen/cz-cli) to commit using the correct syntax can be used by running: @@ -186,7 +216,7 @@ yarn commit It will also automatically check that the modified files comply with ESLint and Prettier rules. -### Testing +#### Testing Test the code: @@ -194,7 +224,7 @@ Test the code: yarn test ``` -### Build +#### Build Compile all contracts: @@ -202,7 +232,7 @@ Compile all contracts: yarn compile ``` -### Releases +#### Releases 1. Bump a new version of the package with: diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..9d0e2a3 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,6 @@ +[profile.default] +src = 'packages' +test = 'packages' + +# TODO: update, temporarily ignoring all except lean-imt +no_match_coverage = "^packages/(excubiae|imt|lazy-imt|lazytower)" diff --git a/lib/forge-std b/lib/forge-std new file mode 160000 index 0000000..07263d1 --- /dev/null +++ b/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 07263d193d621c4b2b0ce8b4d54af58f6957d97d diff --git a/package.json b/package.json index 952df05..eaa846d 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,10 @@ "bugs": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/issues", "private": true, "scripts": { - "compile": "yarn workspaces foreach -Ap run compile", - "test": "yarn workspaces foreach -Ap run test:coverage", - "version:bump": "yarn workspace @zk-kit/${0}.sol version ${1} && yarn remove:stable-version-field ${0} && NO_HOOK=1 git commit -am \"chore(${0}): v${1}\" && git tag ${0}.sol-v${1}", - "version:publish": "yarn workspaces foreach -A --no-private npm publish --tolerate-republish --access public", - "version:release": "changelogithub", - "format": "prettier -c .", - "format:write": "prettier -w .", - "remove:stable-version-field": "ts-node scripts/remove-stable-version-field.ts ${0} && yarn format:write", + "test": "forge test", + "version:bump": "scripts/version-bump.sh", + "format": "prettier -c . && forge fmt --check", + "format:write": "prettier -w . && forge fmt", "postinstall": "husky && git config --local core.editor cat" }, "keywords": [ @@ -31,14 +27,10 @@ "devDependencies": { "@commitlint/cli": "^18.6.1", "@commitlint/config-conventional": "^18.6.2", - "@types/glob": "^7.2.0", - "@types/node": "^20", "changelogithub": "patch:changelogithub@npm%3A0.13.3#~/.yarn/patches/changelogithub-npm-0.13.3-1783949906.patch", "czg": "^1.9.1", "husky": "^9.0.11", "lint-staged": "^15.2.2", - "prettier": "^3.2.5", - "ts-node": "^10.9.2", - "typescript": "^5.3.3" + "prettier": "^3.2.5" } } diff --git a/packages/excubiae/.prettierrc.json b/packages/excubiae/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/excubiae/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/excubiae/LICENSE b/packages/excubiae/LICENSE index 89a15f7..30cff74 120000 --- a/packages/excubiae/LICENSE +++ b/packages/excubiae/LICENSE @@ -1 +1 @@ -contracts/LICENSE \ No newline at end of file +../../LICENSE \ No newline at end of file diff --git a/packages/excubiae/README.md b/packages/excubiae/README.md deleted file mode 120000 index 1ee0442..0000000 --- a/packages/excubiae/README.md +++ /dev/null @@ -1 +0,0 @@ -contracts/README.md \ No newline at end of file diff --git a/packages/excubiae/README.md b/packages/excubiae/README.md new file mode 100644 index 0000000..71a4bac --- /dev/null +++ b/packages/excubiae/README.md @@ -0,0 +1,85 @@ +

+

+ Excubiae +

+

A flexible and modular framework for general-purpose on-chain gatekeepers.

+

+ +

+ + + + + NPM license + + + NPM version + + + Downloads + + + Code style prettier + +

+ +
+

+ + 🗣️ Chat & Support + +

+
+ +> [!NOTE] +> This library is experimental and untested yet - use at your own discretion... + +Excubiae is a generalized framework for on-chain gatekeepers that allows developers to define custom access control mechanisms using different on-chain credentials. By abstracting the gatekeeper logic, excubiae provides a reusable and composable solution for securing decentralised applications. This package provides a pre-defined set of specific excubia (_extensions_) for credentials based on different protocols. + +## 🛠 Install + +### npm or yarn + +Install the ` @zk-kit/excubiae` package with npm: + +```bash +npm i @zk-kit/excubiae --save +``` + +or yarn: + +```bash +yarn add @zk-kit/excubiae +``` + +## 📜 Usage + +To build your own Excubia: + +1. Inherit from the [Excubia](./Excubia.sol) abstract contract that conforms to the [IExcubia](./IExcubia.sol) interface. +2. Implement the `_check()` and `_pass()` methods logic defining your own checks to prevent unwanted access as sybils or avoid to pass the gate twice with the same data / identity. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +import { Excubia } from "excubiae/contracts/Excubia.sol"; + +contract MyExcubia is Excubia { + // ... + + function _pass(address passerby, bytes calldata data) internal override { + // Implement your logic to prevent unwanted access here. + } + + function _check(address passerby, bytes calldata data) internal view override returns (bool) { + // Implement custom access control logic here. + + return true; + } + + // ... +} +``` + +Please see the [extensions](./extensions/) folder for more complex reference implementations and the [test contracts](./test) folder for guidance on using the libraries. diff --git a/packages/excubiae/contracts/README.md b/packages/excubiae/contracts/README.md deleted file mode 100644 index 71a4bac..0000000 --- a/packages/excubiae/contracts/README.md +++ /dev/null @@ -1,85 +0,0 @@ -

-

- Excubiae -

-

A flexible and modular framework for general-purpose on-chain gatekeepers.

-

- -

- - - - - NPM license - - - NPM version - - - Downloads - - - Code style prettier - -

- -
-

- - 🗣️ Chat & Support - -

-
- -> [!NOTE] -> This library is experimental and untested yet - use at your own discretion... - -Excubiae is a generalized framework for on-chain gatekeepers that allows developers to define custom access control mechanisms using different on-chain credentials. By abstracting the gatekeeper logic, excubiae provides a reusable and composable solution for securing decentralised applications. This package provides a pre-defined set of specific excubia (_extensions_) for credentials based on different protocols. - -## 🛠 Install - -### npm or yarn - -Install the ` @zk-kit/excubiae` package with npm: - -```bash -npm i @zk-kit/excubiae --save -``` - -or yarn: - -```bash -yarn add @zk-kit/excubiae -``` - -## 📜 Usage - -To build your own Excubia: - -1. Inherit from the [Excubia](./Excubia.sol) abstract contract that conforms to the [IExcubia](./IExcubia.sol) interface. -2. Implement the `_check()` and `_pass()` methods logic defining your own checks to prevent unwanted access as sybils or avoid to pass the gate twice with the same data / identity. - -```solidity -// SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; - -import { Excubia } from "excubiae/contracts/Excubia.sol"; - -contract MyExcubia is Excubia { - // ... - - function _pass(address passerby, bytes calldata data) internal override { - // Implement your logic to prevent unwanted access here. - } - - function _check(address passerby, bytes calldata data) internal view override returns (bool) { - // Implement custom access control logic here. - - return true; - } - - // ... -} -``` - -Please see the [extensions](./extensions/) folder for more complex reference implementations and the [test contracts](./test) folder for guidance on using the libraries. diff --git a/packages/excubiae/contracts/package.json b/packages/excubiae/contracts/package.json deleted file mode 100644 index cf72aea..0000000 --- a/packages/excubiae/contracts/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@zk-kit/excubiae", - "version": "0.0.1", - "description": "A general purpose on-chain gatekeeping smart contract framework.", - "license": "MIT", - "files": [ - "*.sol", - "!test/*", - "README.md", - "LICENSE" - ], - "keywords": [ - "blockchain", - "ethereum", - "hardhat", - "smart-contracts", - "solidity", - "libraries", - "gatekeepers", - "credentials" - ], - "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", - "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/gatekeepers", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@ethereum-attestation-service/eas-contracts": "1.7.1", - "@openzeppelin/contracts": "5.0.2", - "@semaphore-protocol/contracts": "4.0.0-beta.16" - } -} diff --git a/packages/excubiae/hardhat.config.ts b/packages/excubiae/hardhat.config.ts deleted file mode 100644 index 955f613..0000000 --- a/packages/excubiae/hardhat.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox" -import { HardhatUserConfig } from "hardhat/config" - -const hardhatConfig: HardhatUserConfig = { - solidity: { - version: "0.8.23", - settings: { - optimizer: { - enabled: true - } - } - }, - gasReporter: { - currency: "USD", - enabled: process.env.REPORT_GAS === "true" - }, - typechain: { - target: "ethers-v6" - } -} - -export default hardhatConfig diff --git a/packages/excubiae/package.json b/packages/excubiae/package.json index e4b83ce..1388c18 100644 --- a/packages/excubiae/package.json +++ b/packages/excubiae/package.json @@ -1,37 +1,29 @@ { - "name": "excubiae", - "description": "a flexible & modular framework for general purpose on-chain gatekeepers.", - "private": true, - "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", - "typechain": "hardhat typechain", - "lint": "solhint 'contracts/**/*.sol'" + "name": "@zk-kit/excubiae", + "version": "0.0.1", + "description": "A general purpose on-chain gatekeeping smart contract framework.", + "license": "MIT", + "files": [ + "src" + ], + "keywords": [ + "blockchain", + "ethereum", + "forge", + "smart-contracts", + "solidity", + "libraries", + "excubiae", + "credentials" + ], + "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", + "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/excubiae", + "publishConfig": { + "access": "public" }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.3", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.19.4", - "hardhat-gas-reporter": "^1.0.8", - "prettier-plugin-solidity": "^1.3.1", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.0", - "ts-node": "^10.9.2", - "typechain": "^8.3.0", - "typescript": "^5.3.3" + "dependencies": { + "@ethereum-attestation-service/eas-contracts": "1.7.1", + "@openzeppelin/contracts": "5.0.2", + "@semaphore-protocol/contracts": "4.0.0-beta.16" } } diff --git a/packages/excubiae/contracts/Excubia.sol b/packages/excubiae/src/Excubia.sol similarity index 100% rename from packages/excubiae/contracts/Excubia.sol rename to packages/excubiae/src/Excubia.sol diff --git a/packages/excubiae/contracts/IExcubia.sol b/packages/excubiae/src/IExcubia.sol similarity index 100% rename from packages/excubiae/contracts/IExcubia.sol rename to packages/excubiae/src/IExcubia.sol diff --git a/packages/excubiae/contracts/extensions/EASExcubia.sol b/packages/excubiae/src/extensions/EASExcubia.sol similarity index 100% rename from packages/excubiae/contracts/extensions/EASExcubia.sol rename to packages/excubiae/src/extensions/EASExcubia.sol diff --git a/packages/excubiae/contracts/extensions/ERC721Excubia.sol b/packages/excubiae/src/extensions/ERC721Excubia.sol similarity index 100% rename from packages/excubiae/contracts/extensions/ERC721Excubia.sol rename to packages/excubiae/src/extensions/ERC721Excubia.sol diff --git a/packages/excubiae/contracts/extensions/FreeForAllExcubia.sol b/packages/excubiae/src/extensions/FreeForAllExcubia.sol similarity index 100% rename from packages/excubiae/contracts/extensions/FreeForAllExcubia.sol rename to packages/excubiae/src/extensions/FreeForAllExcubia.sol diff --git a/packages/excubiae/contracts/extensions/SemaphoreExcubia.sol b/packages/excubiae/src/extensions/SemaphoreExcubia.sol similarity index 100% rename from packages/excubiae/contracts/extensions/SemaphoreExcubia.sol rename to packages/excubiae/src/extensions/SemaphoreExcubia.sol diff --git a/packages/excubiae/tasks/.gitkeep b/packages/excubiae/tasks/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/excubiae/test/EASExcubia.test.ts b/packages/excubiae/test/EASExcubia.test.ts deleted file mode 100644 index a74a8f1..0000000 --- a/packages/excubiae/test/EASExcubia.test.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { expect } from "chai" -import { ethers } from "hardhat" -import { AbiCoder, Signer, ZeroAddress, toBeHex, zeroPadBytes } from "ethers" -import { EASExcubia, EASExcubia__factory, MockEAS, MockEAS__factory } from "../typechain-types" - -describe("EASExcubia", function () { - let MockEASContract: MockEAS__factory - let EASExcubiaContract: EASExcubia__factory - let easExcubia: EASExcubia - - let signer: Signer - let signerAddress: string - - let gate: Signer - let gateAddress: string - - let mockEAS: MockEAS - let mockEASAddress: string - - const schemaId = "0xfdcfdad2dbe7489e0ce56b260348b7f14e8365a8a325aef9834818c00d46b31b" - const validAttestationId = AbiCoder.defaultAbiCoder().encode(["bytes32"], [zeroPadBytes(toBeHex(1), 32)]) - const revokedAttestationId = AbiCoder.defaultAbiCoder().encode(["bytes32"], [zeroPadBytes(toBeHex(2), 32)]) - const invalidSchemaAttestationId = AbiCoder.defaultAbiCoder().encode(["bytes32"], [zeroPadBytes(toBeHex(3), 32)]) - const invalidRecipientAttestationId = AbiCoder.defaultAbiCoder().encode(["bytes32"], [zeroPadBytes(toBeHex(4), 32)]) - const invalidAttesterAttestationId = AbiCoder.defaultAbiCoder().encode(["bytes32"], [zeroPadBytes(toBeHex(5), 32)]) - - before(async function () { - ;[signer, gate] = await ethers.getSigners() - signerAddress = await signer.getAddress() - gateAddress = await gate.getAddress() - - MockEASContract = await ethers.getContractFactory("MockEAS") - mockEAS = await MockEASContract.deploy(signerAddress, signerAddress, schemaId) - mockEASAddress = await mockEAS.getAddress() - - EASExcubiaContract = await ethers.getContractFactory("EASExcubia") - easExcubia = await EASExcubiaContract.deploy(mockEASAddress, signerAddress, schemaId) - }) - - describe("constructor()", function () { - it("Should deploy the EASExcubia contract correctly", async function () { - expect(easExcubia).to.not.eq(undefined) - }) - - it("Should deploy the MockEAS contract correctly", async function () { - expect(mockEAS).to.not.eq(undefined) - }) - - it("Should fail to deploy EASExcubia when eas parameter is not valid", async () => { - await expect(EASExcubiaContract.deploy(ZeroAddress, ZeroAddress, schemaId)).to.be.revertedWithCustomError( - easExcubia, - "ZeroAddress" - ) - }) - - it("Should fail to deploy EASExcubia when attester parameter is not valid", async () => { - await expect( - EASExcubiaContract.deploy(await easExcubia.getAddress(), ZeroAddress, schemaId) - ).to.be.revertedWithCustomError(easExcubia, "ZeroAddress") - }) - }) - - describe("setGate()", function () { - it("should fail to set the gate when the caller is not the owner", async () => { - const [, notOwnerSigner] = await ethers.getSigners() - - await expect(easExcubia.connect(notOwnerSigner).setGate(gateAddress)).to.be.revertedWithCustomError( - easExcubia, - "OwnableUnauthorizedAccount" - ) - }) - - it("should fail to set the gate when the gate address is zero", async () => { - await expect(easExcubia.setGate(ZeroAddress)).to.be.revertedWithCustomError(easExcubia, "ZeroAddress") - }) - - it("Should set the gate contract address correctly", async function () { - const tx = await easExcubia.setGate(gateAddress) - const receipt = await tx.wait() - const event = EASExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.gate).to.eq(gateAddress) - expect(await easExcubia.gate()).to.eq(gateAddress) - }) - - it("Should fail to set the gate if already set", async function () { - await expect(easExcubia.setGate(gateAddress)).to.be.revertedWithCustomError(easExcubia, "GateAlreadySet") - }) - }) - - describe("check()", function () { - it("should throw when the attestation is not owned by the correct recipient", async () => { - await expect(easExcubia.check(signerAddress, invalidRecipientAttestationId)).to.be.revertedWithCustomError( - easExcubia, - "UnexpectedRecipient" - ) - }) - - it("should throw when the attestation has been revoked", async () => { - await expect(easExcubia.check(signerAddress, revokedAttestationId)).to.be.revertedWithCustomError( - easExcubia, - "RevokedAttestation" - ) - }) - - it("should throw when the attestation schema is not the one expected", async () => { - await expect(easExcubia.check(signerAddress, invalidSchemaAttestationId)).to.be.revertedWithCustomError( - easExcubia, - "UnexpectedSchema" - ) - }) - - it("should throw when the attestation is not signed by the attestation owner", async () => { - await expect(easExcubia.check(signerAddress, invalidAttesterAttestationId)).to.be.revertedWithCustomError( - easExcubia, - "UnexpectedAttester" - ) - }) - - it("should pass the check", async () => { - await expect(easExcubia.check(signerAddress, validAttestationId)).to.not.be.reverted - - // check does NOT change the state of the contract (see pass()). - expect(await easExcubia.registeredAttestations(validAttestationId)).to.be.false - }) - }) - - describe("pass()", function () { - it("should throw when the callee is not the gate", async () => { - await expect( - easExcubia.connect(signer).pass(signerAddress, invalidRecipientAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "GateOnly") - }) - - it("should throw when the attestation is not owned by the correct recipient", async () => { - await expect( - easExcubia.connect(gate).pass(signerAddress, invalidRecipientAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "UnexpectedRecipient") - }) - - it("should throw when the attestation has been revoked", async () => { - await expect( - easExcubia.connect(gate).pass(signerAddress, revokedAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "RevokedAttestation") - }) - - it("should throw when the attestation schema is not the one expected", async () => { - await expect( - easExcubia.connect(gate).pass(signerAddress, invalidSchemaAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "UnexpectedSchema") - }) - - it("should throw when the attestation is not signed by the attestation owner", async () => { - await expect( - easExcubia.connect(gate).pass(signerAddress, invalidAttesterAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "UnexpectedAttester") - }) - - it("should pass the check", async () => { - const tx = await easExcubia.connect(gate).pass(signerAddress, validAttestationId) - const receipt = await tx.wait() - const event = EASExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - passerby: string - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.passerby).to.eq(signerAddress) - expect(event.args.gate).to.eq(gateAddress) - expect(await easExcubia.registeredAttestations(validAttestationId)).to.be.true - }) - - it("should prevent to pass twice", async () => { - await expect( - easExcubia.connect(gate).pass(signerAddress, validAttestationId) - ).to.be.revertedWithCustomError(easExcubia, "AlreadyPassed") - }) - }) -}) diff --git a/packages/excubiae/test/ERC721Excubia.test.ts b/packages/excubiae/test/ERC721Excubia.test.ts deleted file mode 100644 index f527e0b..0000000 --- a/packages/excubiae/test/ERC721Excubia.test.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { expect } from "chai" -import { ethers } from "hardhat" -import { AbiCoder, Signer, ZeroAddress } from "ethers" -import { ERC721Excubia, ERC721Excubia__factory, MockERC721, MockERC721__factory } from "../typechain-types" - -describe("ERC721Excubia", function () { - let MockERC721Contract: MockERC721__factory - let ERC721ExcubiaContract: ERC721Excubia__factory - let erc721Excubia: ERC721Excubia - - let signer: Signer - let signerAddress: string - - let gate: Signer - let gateAddress: string - - let anotherTokenOwner: Signer - let anotherTokenOwnerAddress: string - - let mockERC721: MockERC721 - let mockERC721Address: string - - const rawValidTokenId = 0 - const rawInvalidOwnerTokenId = 1 - - const encodedValidTokenId = AbiCoder.defaultAbiCoder().encode(["uint256"], [rawValidTokenId]) - const encodedInvalidOwnerTokenId = AbiCoder.defaultAbiCoder().encode(["uint256"], [rawInvalidOwnerTokenId]) - - before(async function () { - ;[signer, gate, anotherTokenOwner] = await ethers.getSigners() - signerAddress = await signer.getAddress() - gateAddress = await gate.getAddress() - anotherTokenOwnerAddress = await anotherTokenOwner.getAddress() - - MockERC721Contract = await ethers.getContractFactory("MockERC721") - mockERC721 = await MockERC721Contract.deploy() - mockERC721Address = await mockERC721.getAddress() - - // assign to `signerAddress` token with id equal to `1`. - await mockERC721.mintAndGiveToken(signerAddress) - await mockERC721.mintAndGiveToken(anotherTokenOwnerAddress) - - ERC721ExcubiaContract = await ethers.getContractFactory("ERC721Excubia") - erc721Excubia = await ERC721ExcubiaContract.deploy(mockERC721Address) - }) - - describe("constructor()", function () { - it("Should deploy the ERC721Excubia contract correctly", async function () { - expect(erc721Excubia).to.not.eq(undefined) - }) - - it("Should deploy the MockERC721 contract correctly", async function () { - expect(mockERC721).to.not.eq(undefined) - }) - - it("Should fail to deploy ERC721Excubia when erc721 parameter is not valid", async () => { - await expect(ERC721ExcubiaContract.deploy(ZeroAddress)).to.be.revertedWithCustomError( - erc721Excubia, - "ZeroAddress" - ) - }) - }) - - describe("setGate()", function () { - it("should fail to set the gate when the caller is not the owner", async () => { - const [, notOwnerSigner] = await ethers.getSigners() - - await expect(erc721Excubia.connect(notOwnerSigner).setGate(gateAddress)).to.be.revertedWithCustomError( - erc721Excubia, - "OwnableUnauthorizedAccount" - ) - }) - - it("should fail to set the gate when the gate address is zero", async () => { - await expect(erc721Excubia.setGate(ZeroAddress)).to.be.revertedWithCustomError(erc721Excubia, "ZeroAddress") - }) - - it("Should set the gate contract address correctly", async function () { - const tx = await erc721Excubia.setGate(gateAddress) - const receipt = await tx.wait() - const event = ERC721ExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.gate).to.eq(gateAddress) - expect(await erc721Excubia.gate()).to.eq(gateAddress) - }) - - it("Should fail to set the gate if already set", async function () { - await expect(erc721Excubia.setGate(gateAddress)).to.be.revertedWithCustomError( - erc721Excubia, - "GateAlreadySet" - ) - }) - }) - - describe("check()", function () { - it("should throw when the token id is not owned by the correct recipient", async () => { - expect(await mockERC721.ownerOf(encodedInvalidOwnerTokenId)).to.be.equal(anotherTokenOwnerAddress) - - await expect(erc721Excubia.check(signerAddress, encodedInvalidOwnerTokenId)).to.be.revertedWithCustomError( - erc721Excubia, - "UnexpectedTokenOwner" - ) - }) - - it("should check", async () => { - await expect(erc721Excubia.check(signerAddress, encodedValidTokenId)).to.not.be.reverted - - // check does NOT change the state of the contract (see pass()). - expect(await erc721Excubia.registeredTokenIds(rawValidTokenId)).to.be.false - }) - }) - - describe("pass()", function () { - it("should throw when the callee is not the gate", async () => { - await expect( - erc721Excubia.connect(signer).pass(signerAddress, encodedInvalidOwnerTokenId) - ).to.be.revertedWithCustomError(erc721Excubia, "GateOnly") - }) - - it("should throw when the token id is not owned by the correct recipient", async () => { - await expect( - erc721Excubia.connect(gate).pass(signerAddress, encodedInvalidOwnerTokenId) - ).to.be.revertedWithCustomError(erc721Excubia, "UnexpectedTokenOwner") - }) - - it("should pass", async () => { - const tx = await erc721Excubia.connect(gate).pass(signerAddress, encodedValidTokenId) - const receipt = await tx.wait() - const event = ERC721ExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - passerby: string - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.passerby).to.eq(signerAddress) - expect(event.args.gate).to.eq(gateAddress) - expect(await erc721Excubia.registeredTokenIds(rawValidTokenId)).to.be.true - }) - - it("should prevent to pass twice", async () => { - await expect( - erc721Excubia.connect(gate).pass(signerAddress, encodedValidTokenId) - ).to.be.revertedWithCustomError(erc721Excubia, "AlreadyPassed") - }) - }) -}) diff --git a/packages/excubiae/test/FreeForAllExcubia.test.ts b/packages/excubiae/test/FreeForAllExcubia.test.ts deleted file mode 100644 index e6ccfac..0000000 --- a/packages/excubiae/test/FreeForAllExcubia.test.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { expect } from "chai" -import { ethers } from "hardhat" -import { Signer, ZeroAddress, ZeroHash } from "ethers" -import { FreeForAllExcubia, FreeForAllExcubia__factory } from "../typechain-types" - -describe("FreeForAllExcubia", function () { - let FreeForAllExcubiaContract: FreeForAllExcubia__factory - let freeForAllExcubia: FreeForAllExcubia - - let signer: Signer - let signerAddress: string - - let gate: Signer - let gateAddress: string - - before(async function () { - ;[signer, gate] = await ethers.getSigners() - signerAddress = await signer.getAddress() - gateAddress = await gate.getAddress() - - FreeForAllExcubiaContract = await ethers.getContractFactory("FreeForAllExcubia") - freeForAllExcubia = await FreeForAllExcubiaContract.deploy() - }) - - describe("constructor()", function () { - it("Should deploy the FreeForAllExcubia contract correctly", async function () { - expect(freeForAllExcubia).to.not.eq(undefined) - }) - }) - - describe("setGate()", function () { - it("should fail to set the gate when the caller is not the owner", async () => { - const [, notOwnerSigner] = await ethers.getSigners() - - await expect(freeForAllExcubia.connect(notOwnerSigner).setGate(gateAddress)).to.be.revertedWithCustomError( - freeForAllExcubia, - "OwnableUnauthorizedAccount" - ) - }) - - it("should fail to set the gate when the gate address is zero", async () => { - await expect(freeForAllExcubia.setGate(ZeroAddress)).to.be.revertedWithCustomError( - freeForAllExcubia, - "ZeroAddress" - ) - }) - - it("Should set the gate contract address correctly", async function () { - const tx = await freeForAllExcubia.setGate(gateAddress) - const receipt = await tx.wait() - const event = FreeForAllExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.gate).to.eq(gateAddress) - expect(await freeForAllExcubia.gate()).to.eq(gateAddress) - }) - - it("Should fail to set the gate if already set", async function () { - await expect(freeForAllExcubia.setGate(gateAddress)).to.be.revertedWithCustomError( - freeForAllExcubia, - "GateAlreadySet" - ) - }) - }) - - describe("check()", function () { - it("should check", async () => { - // `data` parameter value can be whatever (e.g., ZeroHash default). - await expect(freeForAllExcubia.check(signerAddress, ZeroHash)).to.not.be.reverted - - // check does NOT change the state of the contract (see pass()). - expect(await freeForAllExcubia.registeredPassersby(signerAddress)).to.be.false - }) - }) - - describe("pass()", function () { - it("should throw when the callee is not the gate", async () => { - await expect( - // `data` parameter value can be whatever (e.g., ZeroHash default). - freeForAllExcubia.connect(signer).pass(signerAddress, ZeroHash) - ).to.be.revertedWithCustomError(freeForAllExcubia, "GateOnly") - }) - - it("should pass", async () => { - // `data` parameter value can be whatever (e.g., ZeroHash default). - const tx = await freeForAllExcubia.connect(gate).pass(signerAddress, ZeroHash) - const receipt = await tx.wait() - const event = FreeForAllExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - passerby: string - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.passerby).to.eq(signerAddress) - expect(event.args.gate).to.eq(gateAddress) - expect(await freeForAllExcubia.registeredPassersby(signerAddress)).to.be.true - }) - - it("should prevent to pass twice", async () => { - await expect( - // `data` parameter value can be whatever (e.g., ZeroHash default). - freeForAllExcubia.connect(gate).pass(signerAddress, ZeroHash) - ).to.be.revertedWithCustomError(freeForAllExcubia, "AlreadyPassed") - }) - }) -}) diff --git a/packages/excubiae/contracts/test/MockEAS.sol b/packages/excubiae/test/MockEAS.sol similarity index 72% rename from packages/excubiae/contracts/test/MockEAS.sol rename to packages/excubiae/test/MockEAS.sol index bbd536a..b2fc754 100644 --- a/packages/excubiae/contracts/test/MockEAS.sol +++ b/packages/excubiae/test/MockEAS.sol @@ -2,7 +2,18 @@ pragma solidity >=0.8.0; /* solhint-disable max-line-length */ -import {IEAS, ISchemaRegistry, AttestationRequest, MultiAttestationRequest, DelegatedAttestationRequest, MultiDelegatedAttestationRequest, DelegatedRevocationRequest, RevocationRequest, MultiRevocationRequest, MultiDelegatedRevocationRequest} from "@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol"; +import { + IEAS, + ISchemaRegistry, + AttestationRequest, + MultiAttestationRequest, + DelegatedAttestationRequest, + MultiDelegatedAttestationRequest, + DelegatedRevocationRequest, + RevocationRequest, + MultiRevocationRequest, + MultiDelegatedRevocationRequest +} from "@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol"; import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol"; /// @title Mock Ethereum Attestation Service (EAS) Contract. @@ -91,15 +102,12 @@ contract MockEAS is IEAS { mockedAttestations[bytes32(hex"0100000000000000000000000000000000000000000000000000000000000000")] = valid; mockedAttestations[bytes32(hex"0200000000000000000000000000000000000000000000000000000000000000")] = revoked; - mockedAttestations[ - bytes32(hex"0300000000000000000000000000000000000000000000000000000000000000") - ] = invalidSchema; - mockedAttestations[ - bytes32(hex"0400000000000000000000000000000000000000000000000000000000000000") - ] = invalidRecipient; - mockedAttestations[ - bytes32(hex"0500000000000000000000000000000000000000000000000000000000000000") - ] = invalidAttester; + mockedAttestations[bytes32(hex"0300000000000000000000000000000000000000000000000000000000000000")] = + invalidSchema; + mockedAttestations[bytes32(hex"0400000000000000000000000000000000000000000000000000000000000000")] = + invalidRecipient; + mockedAttestations[bytes32(hex"0500000000000000000000000000000000000000000000000000000000000000")] = + invalidAttester; } /// @notice Retrieves a mocked attestation by its unique identifier. @@ -112,25 +120,34 @@ contract MockEAS is IEAS { /// STUBS /// // The following functions are stubs and do not perform any meaningful operations. // They are placeholders to comply with the IEAS interface. - function attest(AttestationRequest calldata /*request*/) external payable override returns (bytes32) { + function attest(AttestationRequest calldata /*request*/ ) external payable override returns (bytes32) { return bytes32(0); } - function attestByDelegation( - DelegatedAttestationRequest calldata /*delegatedRequest*/ - ) external payable override returns (bytes32) { + function attestByDelegation(DelegatedAttestationRequest calldata /*delegatedRequest*/ ) + external + payable + override + returns (bytes32) + { return bytes32(0); } - function multiAttest( - MultiAttestationRequest[] calldata multiRequests - ) external payable override returns (bytes32[] memory) { + function multiAttest(MultiAttestationRequest[] calldata multiRequests) + external + payable + override + returns (bytes32[] memory) + { return new bytes32[](multiRequests.length); } - function multiAttestByDelegation( - MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests - ) external payable override returns (bytes32[] memory) { + function multiAttestByDelegation(MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests) + external + payable + override + returns (bytes32[] memory) + { return new bytes32[](multiDelegatedRequests.length); } @@ -140,23 +157,25 @@ contract MockEAS is IEAS { function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable override {} - function multiRevokeByDelegation( - MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests - ) external payable override {} + function multiRevokeByDelegation(MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests) + external + payable + override + {} - function timestamp(bytes32 /*data*/) external view override returns (uint64) { + function timestamp(bytes32 /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } - function multiTimestamp(bytes32[] calldata /*data*/) external view override returns (uint64) { + function multiTimestamp(bytes32[] calldata /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } - function revokeOffchain(bytes32 /*data*/) external view override returns (uint64) { + function revokeOffchain(bytes32 /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } - function multiRevokeOffchain(bytes32[] calldata /*data*/) external view override returns (uint64) { + function multiRevokeOffchain(bytes32[] calldata /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } @@ -164,11 +183,11 @@ contract MockEAS is IEAS { return mockedAttestations[uid].uid != bytes32(0); } - function getTimestamp(bytes32 /*data*/) external view override returns (uint64) { + function getTimestamp(bytes32 /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } - function getRevokeOffchain(address /*revoker*/, bytes32 /*data*/) external view override returns (uint64) { + function getRevokeOffchain(address, /*revoker*/ bytes32 /*data*/ ) external view override returns (uint64) { return uint64(block.timestamp); } diff --git a/packages/excubiae/contracts/test/MockERC721.sol b/packages/excubiae/test/MockERC721.sol similarity index 100% rename from packages/excubiae/contracts/test/MockERC721.sol rename to packages/excubiae/test/MockERC721.sol diff --git a/packages/excubiae/contracts/test/MockSemaphore.sol b/packages/excubiae/test/MockSemaphore.sol similarity index 76% rename from packages/excubiae/contracts/test/MockSemaphore.sol rename to packages/excubiae/test/MockSemaphore.sol index 1e845c1..e2288df 100644 --- a/packages/excubiae/contracts/test/MockSemaphore.sol +++ b/packages/excubiae/test/MockSemaphore.sol @@ -45,36 +45,36 @@ contract MockSemaphore is ISemaphore { return 0; } - function createGroup(address /*admin*/) external pure override returns (uint256) { + function createGroup(address /*admin*/ ) external pure override returns (uint256) { return 0; } - function createGroup(address /*admin*/, uint256 /*merkleTreeDuration*/) external pure override returns (uint256) { + function createGroup(address, /*admin*/ uint256 /*merkleTreeDuration*/ ) external pure override returns (uint256) { return 0; } - function updateGroupAdmin(uint256 /*groupId*/, address /*newAdmin*/) external override {} + function updateGroupAdmin(uint256, /*groupId*/ address /*newAdmin*/ ) external override {} - function acceptGroupAdmin(uint256 /*groupId*/) external override {} + function acceptGroupAdmin(uint256 /*groupId*/ ) external override {} - function updateGroupMerkleTreeDuration(uint256 /*groupId*/, uint256 /*newMerkleTreeDuration*/) external override {} + function updateGroupMerkleTreeDuration(uint256, /*groupId*/ uint256 /*newMerkleTreeDuration*/ ) external override {} function addMember(uint256 groupId, uint256 identityCommitment) external override {} function addMembers(uint256 groupId, uint256[] calldata identityCommitments) external override {} function updateMember( - uint256 /*groupId*/, - uint256 /*oldIdentityCommitment*/, - uint256 /*newIdentityCommitment*/, + uint256, /*groupId*/ + uint256, /*oldIdentityCommitment*/ + uint256, /*newIdentityCommitment*/ uint256[] calldata /*merkleProofSiblings*/ ) external override {} function removeMember( - uint256 /*groupId*/, - uint256 /*identityCommitment*/, + uint256, /*groupId*/ + uint256, /*identityCommitment*/ uint256[] calldata /*merkleProofSiblings*/ ) external override {} - function validateProof(uint256 /*groupId*/, SemaphoreProof calldata /*proof*/) external override {} + function validateProof(uint256, /*groupId*/ SemaphoreProof calldata /*proof*/ ) external override {} } diff --git a/packages/excubiae/test/SemaphoreExcubia.test.ts b/packages/excubiae/test/SemaphoreExcubia.test.ts deleted file mode 100644 index e457895..0000000 --- a/packages/excubiae/test/SemaphoreExcubia.test.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { expect } from "chai" -import { ethers } from "hardhat" -import { AbiCoder, Signer, ZeroAddress, toBeHex, zeroPadBytes } from "ethers" -import { SemaphoreExcubia, SemaphoreExcubia__factory, MockSemaphore, MockSemaphore__factory } from "../typechain-types" - -describe("SemaphoreExcubia", function () { - let MockSemaphoreContract: MockSemaphore__factory - let SemaphoreExcubiaContract: SemaphoreExcubia__factory - let semaphoreExcubia: SemaphoreExcubia - - let signer: Signer - let signerAddress: string - - let gate: Signer - let gateAddress: string - - let mockSemaphore: MockSemaphore - let mockSemaphoreAddress: string - - const validGroupId = 0n - const invalidGroupId = 1n - - const validProof = { - merkleTreeDepth: 1n, - merkleTreeRoot: 0n, - nullifier: 0n, - message: 0n, - scope: validGroupId, - points: [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n] - } - const invalidProof = { - merkleTreeDepth: 1n, - merkleTreeRoot: 0n, - nullifier: 1n, - message: 0n, - scope: invalidGroupId, - points: [1n, 0n, 0n, 0n, 0n, 0n, 0n, 0n] - } - - const encodedValidProof = AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256", "uint256", "uint256", "uint256[8]"], - [ - validProof.merkleTreeDepth, - validProof.merkleTreeRoot, - validProof.nullifier, - validProof.message, - validProof.scope, - validProof.points - ] - ) - - const encodedInvalidScopeProof = AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256", "uint256", "uint256", "uint256[8]"], - [ - validProof.merkleTreeDepth, - validProof.merkleTreeRoot, - validProof.nullifier, - validProof.message, - invalidProof.scope, - validProof.points - ] - ) - - const encodedInvalidProof = AbiCoder.defaultAbiCoder().encode( - ["uint256", "uint256", "uint256", "uint256", "uint256", "uint256[8]"], - [ - invalidProof.merkleTreeDepth, - invalidProof.merkleTreeRoot, - invalidProof.nullifier, - invalidProof.message, - validProof.scope, - invalidProof.points - ] - ) - - before(async function () { - ;[signer, gate] = await ethers.getSigners() - signerAddress = await signer.getAddress() - gateAddress = await gate.getAddress() - - MockSemaphoreContract = await ethers.getContractFactory("MockSemaphore") - mockSemaphore = await MockSemaphoreContract.deploy( - [validGroupId], - [validProof.nullifier, invalidProof.nullifier], - [true, false] - ) - mockSemaphoreAddress = await mockSemaphore.getAddress() - - SemaphoreExcubiaContract = await ethers.getContractFactory("SemaphoreExcubia") - semaphoreExcubia = await SemaphoreExcubiaContract.deploy(mockSemaphore, validGroupId) - }) - - describe("constructor()", function () { - it("Should deploy the SemaphoreExcubia contract correctly", async function () { - expect(semaphoreExcubia).to.not.eq(undefined) - }) - - it("Should deploy the MockSemaphore contract correctly", async function () { - expect(mockSemaphore).to.not.eq(undefined) - }) - - it("Should fail to deploy SemaphoreExcubia when semaphore parameter is not valid", async () => { - await expect(SemaphoreExcubiaContract.deploy(ZeroAddress, validGroupId)).to.be.revertedWithCustomError( - semaphoreExcubia, - "ZeroAddress" - ) - }) - - it("Should fail to deploy SemaphoreExcubia when groupId parameter is not valid", async () => { - await expect( - SemaphoreExcubiaContract.deploy(mockSemaphoreAddress, invalidGroupId) - ).to.be.revertedWithCustomError(semaphoreExcubia, "InvalidGroup") - }) - }) - - describe("setGate()", function () { - it("should fail to set the gate when the caller is not the owner", async () => { - const [, notOwnerSigner] = await ethers.getSigners() - - await expect(semaphoreExcubia.connect(notOwnerSigner).setGate(gateAddress)).to.be.revertedWithCustomError( - semaphoreExcubia, - "OwnableUnauthorizedAccount" - ) - }) - - it("should fail to set the gate when the gate address is zero", async () => { - await expect(semaphoreExcubia.setGate(ZeroAddress)).to.be.revertedWithCustomError( - semaphoreExcubia, - "ZeroAddress" - ) - }) - - it("Should set the gate contract address correctly", async function () { - const tx = await semaphoreExcubia.setGate(gateAddress) - const receipt = await tx.wait() - const event = SemaphoreExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.gate).to.eq(gateAddress) - expect(await semaphoreExcubia.gate()).to.eq(gateAddress) - }) - - it("Should fail to set the gate if already set", async function () { - await expect(semaphoreExcubia.setGate(gateAddress)).to.be.revertedWithCustomError( - semaphoreExcubia, - "GateAlreadySet" - ) - }) - }) - - describe("check()", function () { - it("should throw when the scope is not the one expected", async () => { - await expect(semaphoreExcubia.check(signerAddress, encodedInvalidScopeProof)).to.be.revertedWithCustomError( - semaphoreExcubia, - "UnexpectedScope" - ) - }) - - it("should throw when the proof is invalid", async () => { - await expect(semaphoreExcubia.check(signerAddress, encodedInvalidProof)).to.be.revertedWithCustomError( - semaphoreExcubia, - "InvalidProof" - ) - }) - - it("should check", async () => { - await expect(semaphoreExcubia.check(signerAddress, encodedValidProof)).to.not.be.reverted - - // check does NOT change the state of the contract (see pass()). - expect(await semaphoreExcubia.passedNullifiers(validProof.nullifier)).to.be.false - }) - }) - - describe("pass()", function () { - it("should throw when the callee is not the gate", async () => { - await expect( - semaphoreExcubia.connect(signer).pass(signerAddress, encodedValidProof) - ).to.be.revertedWithCustomError(semaphoreExcubia, "GateOnly") - }) - - it("should throw when the scope is not the one expected", async () => { - await expect( - semaphoreExcubia.connect(gate).pass(signerAddress, encodedInvalidScopeProof) - ).to.be.revertedWithCustomError(semaphoreExcubia, "UnexpectedScope") - }) - - it("should throw when the proof is invalid", async () => { - await expect( - semaphoreExcubia.connect(gate).pass(signerAddress, encodedInvalidProof) - ).to.be.revertedWithCustomError(semaphoreExcubia, "InvalidProof") - }) - it("should pass the check", async () => { - const tx = await semaphoreExcubia.connect(gate).pass(signerAddress, encodedValidProof) - const receipt = await tx.wait() - const event = SemaphoreExcubiaContract.interface.parseLog( - receipt?.logs[0] as unknown as { topics: string[]; data: string } - ) as unknown as { - args: { - passerby: string - gate: string - } - } - - expect(receipt?.status).to.eq(1) - expect(event.args.passerby).to.eq(signerAddress) - expect(event.args.gate).to.eq(gateAddress) - expect(await semaphoreExcubia.passedNullifiers(validProof.nullifier)).to.be.true - }) - - it("should prevent to pass twice", async () => { - await expect( - semaphoreExcubia.connect(gate).pass(signerAddress, encodedValidProof) - ).to.be.revertedWithCustomError(semaphoreExcubia, "AlreadyPassed") - }) - }) -}) diff --git a/packages/excubiae/tsconfig.json b/packages/excubiae/tsconfig.json deleted file mode 100644 index 0a513ff..0000000 --- a/packages/excubiae/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["scripts/**/*", "tasks/**/*", "test/**/*", "typechain-types/**/*"], - "files": ["hardhat.config.ts"] -} diff --git a/packages/imt/.prettierrc.json b/packages/imt/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/imt/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/imt/.solhint.json b/packages/imt/.solhint.json deleted file mode 100644 index bfc727d..0000000 --- a/packages/imt/.solhint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": ["prettier"], - "rules": { - "compiler-version": ["error", ">=0.8.0"], - "const-name-snakecase": "off", - "no-empty-blocks": "off", - "constructor-syntax": "error", - "func-visibility": ["error", { "ignoreConstructors": true }], - "max-line-length": ["error", 120], - "not-rely-on-time": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], - "reason-string": ["warn", { "maxLength": 80 }] - } -} diff --git a/packages/imt/LICENSE b/packages/imt/LICENSE index 89a15f7..30cff74 120000 --- a/packages/imt/LICENSE +++ b/packages/imt/LICENSE @@ -1 +1 @@ -contracts/LICENSE \ No newline at end of file +../../LICENSE \ No newline at end of file diff --git a/packages/imt/README.md b/packages/imt/README.md deleted file mode 120000 index 1ee0442..0000000 --- a/packages/imt/README.md +++ /dev/null @@ -1 +0,0 @@ -contracts/README.md \ No newline at end of file diff --git a/packages/imt/README.md b/packages/imt/README.md new file mode 100644 index 0000000..737ec58 --- /dev/null +++ b/packages/imt/README.md @@ -0,0 +1,60 @@ +

+

+ Incremental Merkle Tree (Solidity) +

+

Incremental Merkle tree implementation in Solidity.

+

+ +

+ + + + + NPM license + + + NPM version + + + Downloads + + + Code style prettier + +

+ +
+

+ + 🗣️ Chat & Support + +

+
+ +> [!WARNING] +> These library has **not** been audited. + +> [!WARNING] +> If you are looking for the first version of this package, please visit this [link](https://github.com/privacy-scaling-explorations/zk-kit/tree/imt-v1/packages/incremental-merkle-tree.sol). + +--- + +## 🛠 Install + +### npm or yarn + +Install the `@zk-kit/imt.sol` package with npm: + +```bash +npm i @zk-kit/imt.sol --save +``` + +or yarn: + +```bash +yarn add @zk-kit/imt.sol +``` + +## 📜 Usage + +Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/imt/contracts/LICENSE b/packages/imt/contracts/LICENSE deleted file mode 100644 index 8ef16f7..0000000 --- a/packages/imt/contracts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Ethereum Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/imt/contracts/README.md b/packages/imt/contracts/README.md deleted file mode 100644 index 737ec58..0000000 --- a/packages/imt/contracts/README.md +++ /dev/null @@ -1,60 +0,0 @@ -

-

- Incremental Merkle Tree (Solidity) -

-

Incremental Merkle tree implementation in Solidity.

-

- -

- - - - - NPM license - - - NPM version - - - Downloads - - - Code style prettier - -

- -
-

- - 🗣️ Chat & Support - -

-
- -> [!WARNING] -> These library has **not** been audited. - -> [!WARNING] -> If you are looking for the first version of this package, please visit this [link](https://github.com/privacy-scaling-explorations/zk-kit/tree/imt-v1/packages/incremental-merkle-tree.sol). - ---- - -## 🛠 Install - -### npm or yarn - -Install the `@zk-kit/imt.sol` package with npm: - -```bash -npm i @zk-kit/imt.sol --save -``` - -or yarn: - -```bash -yarn add @zk-kit/imt.sol -``` - -## 📜 Usage - -Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/imt/contracts/package.json b/packages/imt/contracts/package.json deleted file mode 100644 index f20c231..0000000 --- a/packages/imt/contracts/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@zk-kit/imt.sol", - "version": "2.0.0-beta.12", - "description": "Incremental Merkle tree implementation in Solidity.", - "license": "MIT", - "files": [ - "*.sol", - "internal/*", - "!test/*", - "README.md", - "LICENSE" - ], - "keywords": [ - "blockchain", - "ethereum", - "hardhat", - "smart-contracts", - "solidity", - "libraries", - "merkle-tree", - "incremental-merkle-tree" - ], - "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", - "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt.sol", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "poseidon-solidity": "0.0.5" - } -} diff --git a/packages/imt/hardhat.config.ts b/packages/imt/hardhat.config.ts deleted file mode 100644 index d652e05..0000000 --- a/packages/imt/hardhat.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox" -import { HardhatUserConfig } from "hardhat/config" -import "./tasks/deploy-imt-test" - -const hardhatConfig: HardhatUserConfig = { - solidity: { - version: "0.8.23", - settings: { - optimizer: { - enabled: true - } - } - }, - gasReporter: { - currency: "USD", - enabled: process.env.REPORT_GAS === "true" - }, - typechain: { - target: "ethers-v6" - } -} - -export default hardhatConfig diff --git a/packages/imt/package.json b/packages/imt/package.json index a827be4..cd8d499 100644 --- a/packages/imt/package.json +++ b/packages/imt/package.json @@ -1,39 +1,25 @@ { - "name": "imt.sol", - "private": true, - "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", - "typechain": "hardhat typechain", - "lint": "solhint 'contracts/**/*.sol'" - }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.3", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", - "@zk-kit/imt": "^2.0.0-beta.5", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.19.4", - "hardhat-gas-reporter": "^1.0.8", - "poseidon-lite": "^0.2.0", - "prettier-plugin-solidity": "^1.3.1", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.0", - "ts-node": "^10.9.2", - "typechain": "^8.3.0", - "typescript": "^5.3.3" + "name": "@zk-kit/imt.sol", + "version": "2.0.0-beta.12", + "description": "Incremental Merkle tree implementation in Solidity.", + "license": "MIT", + "files": [ + "src" + ], + "keywords": [ + "blockchain", + "ethereum", + "forge", + "smart-contracts", + "solidity", + "libraries", + "merkle-tree", + "incremental-merkle-tree" + ], + "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", + "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt.sol", + "publishConfig": { + "access": "public" }, "dependencies": { "poseidon-solidity": "0.0.5" diff --git a/packages/imt/contracts/BinaryIMT.sol b/packages/imt/src/BinaryIMT.sol similarity index 100% rename from packages/imt/contracts/BinaryIMT.sol rename to packages/imt/src/BinaryIMT.sol diff --git a/packages/imt/contracts/Constants.sol b/packages/imt/src/Constants.sol similarity index 100% rename from packages/imt/contracts/Constants.sol rename to packages/imt/src/Constants.sol diff --git a/packages/imt/contracts/InternalBinaryIMT.sol b/packages/imt/src/InternalBinaryIMT.sol similarity index 98% rename from packages/imt/contracts/InternalBinaryIMT.sol rename to packages/imt/src/InternalBinaryIMT.sol index 1b2ff8f..98f4512 100644 --- a/packages/imt/contracts/InternalBinaryIMT.sol +++ b/packages/imt/src/InternalBinaryIMT.sol @@ -113,7 +113,7 @@ library InternalBinaryIMT { self.depth = depth; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { self.zeroes[i] = zero; zero = PoseidonT3.hash([zero, zero]); @@ -152,7 +152,7 @@ library InternalBinaryIMT { uint256 hash = leaf; bool useDefaultZeroes = self.useDefaultZeroes; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { if (index & 1 == 0) { self.lastSubtrees[i] = [hash, useDefaultZeroes ? _defaultZero(i) : self.zeroes[i]]; } else { @@ -197,7 +197,7 @@ library InternalBinaryIMT { uint256 hash = newLeaf; uint256 updateIndex; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { updateIndex |= uint256(proofPathIndices[i]) << uint256(i); if (proofPathIndices[i] == 0) { @@ -262,7 +262,7 @@ library InternalBinaryIMT { uint256 hash = leaf; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { if (proofSiblings[i] >= SNARK_SCALAR_FIELD) { revert ValueGreaterThanSnarkScalarField(); } else if (proofPathIndices[i] != 1 && proofPathIndices[i] != 0) { diff --git a/packages/imt/contracts/InternalQuinaryIMT.sol b/packages/imt/src/InternalQuinaryIMT.sol similarity index 95% rename from packages/imt/contracts/InternalQuinaryIMT.sol rename to packages/imt/src/InternalQuinaryIMT.sol index 44522cc..5376702 100644 --- a/packages/imt/contracts/InternalQuinaryIMT.sol +++ b/packages/imt/src/InternalQuinaryIMT.sol @@ -40,11 +40,11 @@ library InternalQuinaryIMT { self.depth = depth; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { self.zeroes[i] = zero; uint256[5] memory zeroChildren; - for (uint8 j = 0; j < 5; ) { + for (uint8 j = 0; j < 5;) { zeroChildren[j] = zero; unchecked { ++j; @@ -76,13 +76,13 @@ library InternalQuinaryIMT { uint256 index = self.numberOfLeaves; uint256 hash = leaf; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { uint8 position = uint8(index % 5); self.lastSubtrees[i][position] = hash; if (position == 0) { - for (uint8 j = 1; j < 5; ) { + for (uint8 j = 1; j < 5;) { self.lastSubtrees[i][j] = self.zeroes[i]; unchecked { ++j; @@ -127,11 +127,11 @@ library InternalQuinaryIMT { uint256 hash = newLeaf; uint256 updateIndex; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { uint256[5] memory nodes; updateIndex += proofPathIndices[i] * 5 ** i; - for (uint8 j = 0; j < 5; ) { + for (uint8 j = 0; j < 5;) { if (j < proofPathIndices[i]) { nodes[j] = proofSiblings[i][j]; } else if (j == proofPathIndices[i]) { @@ -198,14 +198,14 @@ library InternalQuinaryIMT { uint256 hash = leaf; - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { uint256[5] memory nodes; if (proofPathIndices[i] < 0 || proofPathIndices[i] >= 5) { revert WrongMerkleProofPath(); } - for (uint8 j = 0; j < 5; ) { + for (uint8 j = 0; j < 5;) { if (j < proofPathIndices[i]) { require( proofSiblings[i][j] < SNARK_SCALAR_FIELD, diff --git a/packages/excubiae/contracts/LICENSE b/packages/imt/src/LICENSE similarity index 100% rename from packages/excubiae/contracts/LICENSE rename to packages/imt/src/LICENSE diff --git a/packages/imt/contracts/QuinaryIMT.sol b/packages/imt/src/QuinaryIMT.sol similarity index 100% rename from packages/imt/contracts/QuinaryIMT.sol rename to packages/imt/src/QuinaryIMT.sol diff --git a/packages/imt/tasks/deploy-imt-test.ts b/packages/imt/tasks/deploy-imt-test.ts deleted file mode 100644 index d9dc6f7..0000000 --- a/packages/imt/tasks/deploy-imt-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { task, types } from "hardhat/config" - -task("deploy:imt-test", "Deploy an IMT contract for testing a library") - .addParam("library", "The name of the library", undefined, types.string) - .addOptionalParam("logs", "Print the logs", true, types.boolean) - .addOptionalParam("arity", "The arity of the tree", 2, types.int) - .setAction(async ({ logs, library: libraryName, arity }, { ethers }): Promise => { - const PoseidonFactory = await ethers.getContractFactory(`PoseidonT${arity + 1}`) - - const poseidon = await PoseidonFactory.deploy() - const poseidonAddress = await poseidon.getAddress() - - if (logs) { - console.info(`PoseidonT${arity + 1} library has been deployed to: ${poseidonAddress}`) - } - - const LibraryFactory = await ethers.getContractFactory(libraryName, { - libraries: { - [`PoseidonT${arity + 1}`]: poseidonAddress - } - }) - - const library = await LibraryFactory.deploy() - const libraryAddress = await library.getAddress() - - if (logs) { - console.info(`${libraryName} library has been deployed to: ${libraryAddress}`) - } - - const ContractFactory = await ethers.getContractFactory(`${libraryName}Test`, { - libraries: { - [libraryName]: libraryAddress - } - }) - - const contract = await ContractFactory.deploy() - const contractAddress = await contract.getAddress() - - if (logs) { - console.info(`${libraryName}Test contract has been deployed to: ${contractAddress}`) - } - - return { library, contract } - }) diff --git a/packages/imt/test/BinaryIMT.ts b/packages/imt/test/BinaryIMT.ts deleted file mode 100644 index ecef3be..0000000 --- a/packages/imt/test/BinaryIMT.ts +++ /dev/null @@ -1,367 +0,0 @@ -import { IMT as JSBinaryIMT } from "@zk-kit/imt" -import { expect } from "chai" -import { run } from "hardhat" -import { poseidon2 } from "poseidon-lite" -import { BinaryIMT, BinaryIMTTest } from "../typechain-types" - -describe("BinaryIMT", () => { - const SNARK_SCALAR_FIELD = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") - let binaryIMT: BinaryIMT - let binaryIMTTest: BinaryIMTTest - let jsBinaryIMT: JSBinaryIMT - - beforeEach(async () => { - const { library, contract } = await run("deploy:imt-test", { library: "BinaryIMT", logs: false }) - - binaryIMT = library - binaryIMTTest = contract - jsBinaryIMT = new JSBinaryIMT(poseidon2, 6, 0, 2) - }) - - describe("# init", () => { - it("Should not create a tree with a depth > 32", async () => { - const transaction = binaryIMTTest.init(33) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "DepthNotSupported") - }) - - it("Should create a tree", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - - const { depth } = await binaryIMTTest.data() - - expect(depth).to.equal(jsBinaryIMT.depth) - }) - - it("Should create a tree with default zeroes", async () => { - await binaryIMTTest.initWithDefaultZeroes(jsBinaryIMT.depth) - - const { depth, useDefaultZeroes } = await binaryIMTTest.data() - - expect(depth).to.equal(jsBinaryIMT.depth) - expect(useDefaultZeroes).to.equal(true) - }) - }) - - describe("# insert", () => { - it("Should not insert a leaf if its value is > SNARK_SCALAR_FIELD", async () => { - const transaction = binaryIMTTest.insert(SNARK_SCALAR_FIELD) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should insert a leaf in a tree", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - - jsBinaryIMT.insert(1) - - await binaryIMTTest.insert(1) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should insert a leaf in a tree with default zeroes", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - - jsBinaryIMT.insert(1) - - await binaryIMTTest.insert(1) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should insert 4 leaves in a tree", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - - for (let i = 0; i < 4; i += 1) { - const leaf = i + 1 - - jsBinaryIMT.insert(leaf) - await binaryIMTTest.insert(leaf) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - } - }) - - it("Should insert 4 leaves in a default zeroes tree", async () => { - const jsBinaryIMT = new JSBinaryIMT(poseidon2, 32, 0) - - await binaryIMTTest.initWithDefaultZeroes(jsBinaryIMT.depth) - - for (let x = 0; x < 4; x += 1) { - const leaf = (x + 10) ** 2 - - jsBinaryIMT.insert(leaf) - await binaryIMTTest.insert(leaf) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - } - }) - - it("Should not insert a leaf if the tree is full", async () => { - await binaryIMTTest.init(1) - await binaryIMTTest.insert(1) - await binaryIMTTest.insert(2) - - const transaction = binaryIMTTest.insert(3) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "TreeIsFull") - }) - }) - - describe("# update", () => { - it("Should not update a leaf if the new value is the same as the old one", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - const transaction = binaryIMTTest.update(1, 1, [0, 1], [0, 1]) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "NewLeafCannotEqualOldLeaf") - }) - - it("Should not update a leaf if its new value is > SNARK_SCALAR_FIELD", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - const transaction = binaryIMTTest.update(1, SNARK_SCALAR_FIELD, [0, 1], [0, 1]) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if its original value is > SNARK_SCALAR_FIELD", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - const transaction = binaryIMTTest.update(SNARK_SCALAR_FIELD, 2, [0, 1], [0, 1]) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if the path indices are wrong", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsBinaryIMT.createProof(0) - - pathIndices[0] = 2 - - const transaction = binaryIMTTest.update( - 1, - 2, - siblings.map((s) => s[0]), - pathIndices - ) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "WrongMerkleProofPath") - }) - - it("Should not update a leaf if the old leaf is wrong", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsBinaryIMT.createProof(0) - - const transaction = binaryIMTTest.update( - 2, - 3, - siblings.map((s) => s[0]), - pathIndices - ) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "LeafDoesNotExist") - }) - - it("Should update a leaf", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsBinaryIMT.createProof(0) - - await binaryIMTTest.update( - 1, - 2, - siblings.map((s) => s[0]), - pathIndices - ) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should not update a leaf that hasn't been inserted yet", async () => { - binaryIMTTest.init(jsBinaryIMT.depth) - - for (let i = 0; i < 4; i += 1) { - const leaf = i + 1 - - jsBinaryIMT.insert(leaf) - await binaryIMTTest.insert(leaf) - } - - // We're going to try to update leaf 7, despite there only being 4 leaves in the tree. - const leaf = 42069 - - // Note that we can insert zeros into the js library tree and the root won't change! - // that's because we use the zeros optimization to calculate the roots efficiently. - // technically speaking, there isn't an "empty" tree, there is only a tree that is - // entirely full of the zero value at every index. Therefore inserting the zero value - // at any point into an incremental merkle tree doesn't change it's root, because - // that is already the data the root was calculated from previously. In principle, - // we can update any leaf that hasn't been inserted yet using this method. - const rootBeforeZeros = jsBinaryIMT.root - - jsBinaryIMT.insert(0) - jsBinaryIMT.insert(0) - jsBinaryIMT.insert(0) - - // The root doesn't change because the tree started full with 0s! - expect(jsBinaryIMT.root).to.be.equal(rootBeforeZeros) - - // Now we can make a merkle proof of zero being included at the uninitialized index. - const { pathIndices, siblings } = jsBinaryIMT.createProof(6) - - const transaction = binaryIMTTest.update( - 0, - leaf, - siblings.map((s) => s[0]), - pathIndices - ) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "LeafIndexOutOfRange") - }) - }) - - describe("# remove", () => { - it("Should not remove a leaf if its value is > SNARK_SCALAR_FIELD", async () => { - const transaction = binaryIMTTest.remove(SNARK_SCALAR_FIELD, [0, 1], [0, 1]) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not remove a leaf that does not exist", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.delete(0) - - const { siblings, pathIndices } = jsBinaryIMT.createProof(0) - - const transaction = binaryIMTTest.remove( - 2, - siblings.map((s) => s[0]), - pathIndices - ) - - await expect(transaction).to.be.revertedWithCustomError(binaryIMT, "LeafDoesNotExist") - }) - - it("Should remove a leaf", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.delete(0) - - const { pathIndices, siblings } = jsBinaryIMT.createProof(0) - - await binaryIMTTest.remove( - 1, - siblings.map((s) => s[0]), - pathIndices - ) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should remove a leaf in a tree with default zeroes", async () => { - await binaryIMTTest.initWithDefaultZeroes(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.delete(0) - - const { siblings, pathIndices } = jsBinaryIMT.createProof(0) - - await binaryIMTTest.remove( - 1, - siblings.map((s) => s[0]), - pathIndices - ) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should insert a leaf in a tree after a removal", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - await binaryIMTTest.insert(1) - - jsBinaryIMT.insert(1) - jsBinaryIMT.delete(0) - - const { pathIndices, siblings } = jsBinaryIMT.createProof(0) - - await binaryIMTTest.remove( - 1, - siblings.map((s) => s[0]), - pathIndices - ) - - jsBinaryIMT.insert(2) - await binaryIMTTest.insert(2) - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - - it("Should insert 4 leaves and remove them all", async () => { - await binaryIMTTest.init(jsBinaryIMT.depth) - - for (let i = 0; i < 4; i += 1) { - const leaf = i + 1 - - jsBinaryIMT.insert(leaf) - await binaryIMTTest.insert(leaf) - } - - for (let i = 0; i < 4; i += 1) { - jsBinaryIMT.delete(i) - - const { siblings, pathIndices } = jsBinaryIMT.createProof(i) - - await binaryIMTTest.remove( - i + 1, - siblings.map((s) => s[0]), - pathIndices - ) - } - - const { root } = await binaryIMTTest.data() - - expect(root).to.equal(jsBinaryIMT.root) - }) - }) -}) diff --git a/packages/imt/contracts/test/BinaryIMTTest.sol b/packages/imt/test/BinaryIMTTest.sol similarity index 75% rename from packages/imt/contracts/test/BinaryIMTTest.sol rename to packages/imt/test/BinaryIMTTest.sol index b7a8057..38a05ab 100644 --- a/packages/imt/contracts/test/BinaryIMTTest.sol +++ b/packages/imt/test/BinaryIMTTest.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; -import {BinaryIMT, BinaryIMTData} from "../BinaryIMT.sol"; +import {BinaryIMT, BinaryIMTData} from "../src/BinaryIMT.sol"; contract BinaryIMTTest { BinaryIMTData public data; @@ -19,12 +19,9 @@ contract BinaryIMTTest { BinaryIMT.insert(data, leaf); } - function update( - uint256 leaf, - uint256 newLeaf, - uint256[] calldata proofSiblings, - uint8[] calldata proofPathIndices - ) external { + function update(uint256 leaf, uint256 newLeaf, uint256[] calldata proofSiblings, uint8[] calldata proofPathIndices) + external + { BinaryIMT.update(data, leaf, newLeaf, proofSiblings, proofPathIndices); } diff --git a/packages/imt/test/QuinaryIMT.ts b/packages/imt/test/QuinaryIMT.ts deleted file mode 100644 index 842b6a1..0000000 --- a/packages/imt/test/QuinaryIMT.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { IMT as JSQuinaryIMT } from "@zk-kit/imt" -import { expect } from "chai" -import { run } from "hardhat" -import { poseidon5 } from "poseidon-lite" -import { QuinaryIMT, QuinaryIMTTest } from "../typechain-types" - -describe("QuinaryIMT", () => { - const SNARK_SCALAR_FIELD = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") - let quinaryIMT: QuinaryIMT - let quinaryIMTTest: QuinaryIMTTest - let jsQuinaryIMT: JSQuinaryIMT - - beforeEach(async () => { - const { library, contract } = await run("deploy:imt-test", { library: "QuinaryIMT", arity: 5, logs: false }) - - quinaryIMT = library - quinaryIMTTest = contract - jsQuinaryIMT = new JSQuinaryIMT(poseidon5, 6, 0, 5) - }) - - describe("# init", () => { - it("Should not create a tree with a depth > 32", async () => { - const transaction = quinaryIMTTest.init(33) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "DepthNotSupported") - }) - - it("Should create a tree", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - - const { depth } = await quinaryIMTTest.data() - - expect(depth).to.equal(jsQuinaryIMT.depth) - }) - }) - - describe("# insert", () => { - it("Should not insert a leaf if its value is > SNARK_SCALAR_FIELD", async () => { - const transaction = quinaryIMTTest.insert(SNARK_SCALAR_FIELD) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should insert a leaf in a tree", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - - jsQuinaryIMT.insert(1) - - await quinaryIMTTest.insert(1) - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - }) - - it("Should insert 6 leaves in a tree", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - - for (let i = 0; i < 6; i += 1) { - const leaf = i + 1 - - jsQuinaryIMT.insert(leaf) - await quinaryIMTTest.insert(leaf) - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - } - }) - - it("Should not insert a leaf if the tree is full", async () => { - await quinaryIMTTest.init(1) - - for (let i = 0; i < 5; i += 1) { - await quinaryIMTTest.insert(i + 1) - } - - const transaction = quinaryIMTTest.insert(3) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "TreeIsFull") - }) - }) - - describe("# update", () => { - it("Should not update a leaf if the new value is the same as the old one", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - const transaction = quinaryIMTTest.update(1, 1, [[0, 1, 2, 3]], [0]) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "NewLeafCannotEqualOldLeaf") - }) - - it("Should not update a leaf if its new value is > SNARK_SCALAR_FIELD", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - const transaction = quinaryIMTTest.update(1, SNARK_SCALAR_FIELD, [[0, 1, 2, 3]], [0]) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if its original value is > SNARK_SCALAR_FIELD", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - const transaction = quinaryIMTTest.update(SNARK_SCALAR_FIELD, 2, [[0, 1, 2, 3]], [0]) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if the path indices are wrong", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsQuinaryIMT.createProof(0) - - pathIndices[0] = 5 - - const transaction = quinaryIMTTest.update(1, 2, siblings, pathIndices) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "WrongMerkleProofPath") - }) - - it("Should not update a leaf if the old leaf is wrong", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsQuinaryIMT.createProof(0) - - const transaction = quinaryIMTTest.update(2, 3, siblings, pathIndices) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "LeafDoesNotExist") - }) - - it("Should update a leaf", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.update(0, 2) - - const { pathIndices, siblings } = jsQuinaryIMT.createProof(0) - - await quinaryIMTTest.update(1, 2, siblings, pathIndices) - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - }) - - it("Should not update a leaf that hasn't been inserted yet", async () => { - quinaryIMTTest.init(jsQuinaryIMT.depth) - - for (let i = 0; i < 4; i += 1) { - const leaf = i + 1 - - jsQuinaryIMT.insert(leaf) - await quinaryIMTTest.insert(leaf) - } - - // We're going to try to update leaf 7, despite there only being 4 leaves in the tree. - const leaf = 42069 - - // Note that we can insert zeros into the js library tree and the root won't change! - // that's because we use the zeros optimization to calculate the roots efficiently. - // technically speaking, there isn't an "empty" tree, there is only a tree that is - // entirely full of the zero value at every index. Therefore inserting the zero value - // at any point into an incremental merkle tree doesn't change it's root, because - // that is already the data the root was calculated from previously. In principle, - // we can update any leaf that hasn't been inserted yet using this method. - const rootBeforeZeros = jsQuinaryIMT.root - - jsQuinaryIMT.insert(0) - jsQuinaryIMT.insert(0) - jsQuinaryIMT.insert(0) - - // The root doesn't change because the tree started full with 0s! - expect(jsQuinaryIMT.root).to.be.equal(rootBeforeZeros) - - // Now we can make a merkle proof of zero being included at the uninitialized index. - const { pathIndices, siblings } = jsQuinaryIMT.createProof(6) - - const transaction = quinaryIMTTest.update(0, leaf, siblings, pathIndices) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "LeafIndexOutOfRange") - }) - }) - - describe("# remove", () => { - it("Should not remove a leaf if its value is > SNARK_SCALAR_FIELD", async () => { - const transaction = quinaryIMTTest.remove(SNARK_SCALAR_FIELD, [[0, 1, 2, 3]], [0]) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "ValueGreaterThanSnarkScalarField") - }) - - it("Should not remove a leaf that does not exist", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.delete(0) - - const { siblings, pathIndices } = jsQuinaryIMT.createProof(0) - - const transaction = quinaryIMTTest.remove(2, siblings, pathIndices) - - await expect(transaction).to.be.revertedWithCustomError(quinaryIMT, "LeafDoesNotExist") - }) - - it("Should remove a leaf", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.delete(0) - - const { pathIndices, siblings } = jsQuinaryIMT.createProof(0) - - await quinaryIMTTest.remove(1, siblings, pathIndices) - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - }) - - it("Should insert a leaf in a tree after a removal", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - await quinaryIMTTest.insert(1) - - jsQuinaryIMT.insert(1) - jsQuinaryIMT.delete(0) - - const { pathIndices, siblings } = jsQuinaryIMT.createProof(0) - - await quinaryIMTTest.remove(1, siblings, pathIndices) - - jsQuinaryIMT.insert(2) - await quinaryIMTTest.insert(2) - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - }) - - it("Should insert 4 leaves and remove them all", async () => { - await quinaryIMTTest.init(jsQuinaryIMT.depth) - - for (let i = 0; i < 4; i += 1) { - const leaf = i + 1 - - jsQuinaryIMT.insert(leaf) - await quinaryIMTTest.insert(leaf) - } - - for (let i = 0; i < 4; i += 1) { - jsQuinaryIMT.delete(i) - - const { siblings, pathIndices } = jsQuinaryIMT.createProof(i) - - await quinaryIMTTest.remove(i + 1, siblings, pathIndices) - } - - const { root } = await quinaryIMTTest.data() - - expect(root).to.equal(jsQuinaryIMT.root) - }) - }) -}) diff --git a/packages/imt/contracts/test/QuinaryIMTTest.sol b/packages/imt/test/QuinaryIMTTest.sol similarity index 91% rename from packages/imt/contracts/test/QuinaryIMTTest.sol rename to packages/imt/test/QuinaryIMTTest.sol index 6094c5e..97dbb35 100644 --- a/packages/imt/contracts/test/QuinaryIMTTest.sol +++ b/packages/imt/test/QuinaryIMTTest.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; -import {QuinaryIMT, QuinaryIMTData} from "../QuinaryIMT.sol"; +import {QuinaryIMT, QuinaryIMTData} from "../src/QuinaryIMT.sol"; contract QuinaryIMTTest { QuinaryIMTData public data; diff --git a/packages/imt/tsconfig.json b/packages/imt/tsconfig.json deleted file mode 100644 index 0a513ff..0000000 --- a/packages/imt/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["scripts/**/*", "tasks/**/*", "test/**/*", "typechain-types/**/*"], - "files": ["hardhat.config.ts"] -} diff --git a/packages/lazy-imt/.prettierrc.json b/packages/lazy-imt/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/lazy-imt/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/lazy-imt/.solhint.json b/packages/lazy-imt/.solhint.json deleted file mode 100644 index bfc727d..0000000 --- a/packages/lazy-imt/.solhint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": ["prettier"], - "rules": { - "compiler-version": ["error", ">=0.8.0"], - "const-name-snakecase": "off", - "no-empty-blocks": "off", - "constructor-syntax": "error", - "func-visibility": ["error", { "ignoreConstructors": true }], - "max-line-length": ["error", 120], - "not-rely-on-time": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], - "reason-string": ["warn", { "maxLength": 80 }] - } -} diff --git a/packages/lazy-imt/LICENSE b/packages/lazy-imt/LICENSE index 89a15f7..30cff74 120000 --- a/packages/lazy-imt/LICENSE +++ b/packages/lazy-imt/LICENSE @@ -1 +1 @@ -contracts/LICENSE \ No newline at end of file +../../LICENSE \ No newline at end of file diff --git a/packages/lazy-imt/README.md b/packages/lazy-imt/README.md deleted file mode 120000 index 1ee0442..0000000 --- a/packages/lazy-imt/README.md +++ /dev/null @@ -1 +0,0 @@ -contracts/README.md \ No newline at end of file diff --git a/packages/lazy-imt/README.md b/packages/lazy-imt/README.md new file mode 100644 index 0000000..8073eaa --- /dev/null +++ b/packages/lazy-imt/README.md @@ -0,0 +1,60 @@ +

+

+ Lazy Incremental Merkle Tree (Solidity) +

+

Lazy Incremental Merkle tree implementation in Solidity.

+

+ +

+ + + + + NPM license + + + NPM version + + + Downloads + + + Code style prettier + +

+ +
+

+ + 🗣️ Chat & Support + +

+
+ +> [!WARNING] +> These library has **not** been audited. + +> [!WARNING] +> If you are looking for the first version of this package, please visit this [link](https://github.com/privacy-scaling-explorations/zk-kit/tree/imt-v1/packages/incremental-merkle-tree.sol). + +--- + +## 🛠 Install + +### npm or yarn + +Install the `@zk-kit/lazy-imt.sol` package with npm: + +```bash +npm i @zk-kit/lazy-imt.sol --save +``` + +or yarn: + +```bash +yarn add @zk-kit/lazy-imt.sol +``` + +## 📜 Usage + +Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/lazy-imt/contracts/LICENSE b/packages/lazy-imt/contracts/LICENSE deleted file mode 100644 index 8ef16f7..0000000 --- a/packages/lazy-imt/contracts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Ethereum Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/lazy-imt/contracts/README.md b/packages/lazy-imt/contracts/README.md deleted file mode 100644 index 8073eaa..0000000 --- a/packages/lazy-imt/contracts/README.md +++ /dev/null @@ -1,60 +0,0 @@ -

-

- Lazy Incremental Merkle Tree (Solidity) -

-

Lazy Incremental Merkle tree implementation in Solidity.

-

- -

- - - - - NPM license - - - NPM version - - - Downloads - - - Code style prettier - -

- -
-

- - 🗣️ Chat & Support - -

-
- -> [!WARNING] -> These library has **not** been audited. - -> [!WARNING] -> If you are looking for the first version of this package, please visit this [link](https://github.com/privacy-scaling-explorations/zk-kit/tree/imt-v1/packages/incremental-merkle-tree.sol). - ---- - -## 🛠 Install - -### npm or yarn - -Install the `@zk-kit/lazy-imt.sol` package with npm: - -```bash -npm i @zk-kit/lazy-imt.sol --save -``` - -or yarn: - -```bash -yarn add @zk-kit/lazy-imt.sol -``` - -## 📜 Usage - -Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/lazy-imt/contracts/package.json b/packages/lazy-imt/contracts/package.json deleted file mode 100644 index 85063d3..0000000 --- a/packages/lazy-imt/contracts/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@zk-kit/lazy-imt.sol", - "version": "2.0.0-beta.12", - "description": "Lazy Incremental Merkle tree implementation in Solidity.", - "license": "MIT", - "files": [ - "*.sol", - "!test/*", - "README.md", - "LICENSE" - ], - "keywords": [ - "blockchain", - "ethereum", - "hardhat", - "smart-contracts", - "solidity", - "libraries", - "merkle-tree", - "incremental-merkle-tree" - ], - "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", - "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazy-imt", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "poseidon-solidity": "0.0.5" - } -} diff --git a/packages/lazy-imt/hardhat.config.ts b/packages/lazy-imt/hardhat.config.ts deleted file mode 100644 index d652e05..0000000 --- a/packages/lazy-imt/hardhat.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox" -import { HardhatUserConfig } from "hardhat/config" -import "./tasks/deploy-imt-test" - -const hardhatConfig: HardhatUserConfig = { - solidity: { - version: "0.8.23", - settings: { - optimizer: { - enabled: true - } - } - }, - gasReporter: { - currency: "USD", - enabled: process.env.REPORT_GAS === "true" - }, - typechain: { - target: "ethers-v6" - } -} - -export default hardhatConfig diff --git a/packages/lazy-imt/package.json b/packages/lazy-imt/package.json index d4ed5f5..33b1934 100644 --- a/packages/lazy-imt/package.json +++ b/packages/lazy-imt/package.json @@ -1,39 +1,28 @@ { - "name": "lazy-imt.sol", - "private": true, - "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", - "typechain": "hardhat typechain", - "lint": "solhint 'contracts/**/*.sol'" - }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.3", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", - "@zk-kit/imt": "^2.0.0-beta.5", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.19.4", - "hardhat-gas-reporter": "^1.0.8", - "poseidon-lite": "^0.2.0", - "prettier-plugin-solidity": "^1.3.1", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.0", - "ts-node": "^10.9.2", - "typechain": "^8.3.0", - "typescript": "^5.3.3" + "name": "@zk-kit/lazy-imt.sol", + "version": "2.0.0-beta.12", + "description": "Lazy Incremental Merkle tree implementation in Solidity.", + "license": "MIT", + "files": [ + "*.sol", + "!test/*", + "README.md", + "LICENSE" + ], + "keywords": [ + "blockchain", + "ethereum", + "forge", + "smart-contracts", + "solidity", + "libraries", + "merkle-tree", + "incremental-merkle-tree" + ], + "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", + "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazy-imt", + "publishConfig": { + "access": "public" }, "dependencies": { "poseidon-solidity": "0.0.5" diff --git a/packages/lazy-imt/scripts/defaultZeroes.mjs b/packages/lazy-imt/scripts/defaultZeroes.mjs deleted file mode 100644 index 5bb49dd..0000000 --- a/packages/lazy-imt/scripts/defaultZeroes.mjs +++ /dev/null @@ -1,31 +0,0 @@ -import { poseidon } from "circomlibjs" - -const zeroes = [0] - -for (let x = 1; x < 33; x += 1) { - zeroes[x] = poseidon([zeroes[x - 1], zeroes[x - 1]]) -} - -console.log(` - ${Array(33) - .fill(0) - .map((_, i) => `uint256 constant public Z_${i} = ${zeroes[i]};`) - .join("\n ")} - -/* - function defaultZeroes() public pure returns (uint256[32] memory) { - return [${Array(32) - .fill() - .map((_, i) => `Z_${i}`) - .join(",")}]; - } -*/ - - function defaultZero(uint256 index) public pure returns (uint256) { - ${Array(33) - .fill() - .map((_, i) => ` if (index == ${i}) return Z_${i};`) - .join("\n")} - revert('badindex'); - } -`) diff --git a/packages/lazy-imt/contracts/Constants.sol b/packages/lazy-imt/src/Constants.sol similarity index 100% rename from packages/lazy-imt/contracts/Constants.sol rename to packages/lazy-imt/src/Constants.sol diff --git a/packages/lazy-imt/contracts/InternalLazyIMT.sol b/packages/lazy-imt/src/InternalLazyIMT.sol similarity index 96% rename from packages/lazy-imt/contracts/InternalLazyIMT.sol rename to packages/lazy-imt/src/InternalLazyIMT.sol index 84e5b34..15ba265 100644 --- a/packages/lazy-imt/contracts/InternalLazyIMT.sol +++ b/packages/lazy-imt/src/InternalLazyIMT.sol @@ -108,7 +108,7 @@ library InternalLazyIMT { uint256 hash = leaf; - for (uint8 i = 0; ; ) { + for (uint8 i = 0;;) { self.elements[_indexForElement(i, index)] = hash; // it's a left element so we don't hash until there's a right element if (index & 1 == 0) break; @@ -128,7 +128,7 @@ library InternalLazyIMT { uint256 hash = leaf; - for (uint8 i = 0; true; ) { + for (uint8 i = 0; true;) { self.elements[_indexForElement(i, index)] = hash; uint256 levelCount = numberOfLeaves >> (i + 1); if (levelCount <= index >> 1) break; @@ -176,12 +176,10 @@ library InternalLazyIMT { return levels[depth]; } - function _levels( - LazyIMTData storage self, - uint40 numberOfLeaves, - uint8 depth, - uint256[] memory levels - ) internal view { + function _levels(LazyIMTData storage self, uint40 numberOfLeaves, uint8 depth, uint256[] memory levels) + internal + view + { require(depth <= MAX_DEPTH, "LazyIMT: depth must be <= MAX_DEPTH"); require(numberOfLeaves > 0, "LazyIMT: number of leaves must be > 0"); // this should always short circuit if self.numberOfLeaves == 0 @@ -193,7 +191,7 @@ library InternalLazyIMT { levels[0] = _defaultZero(0); } - for (uint8 i = 0; i < depth; ) { + for (uint8 i = 0; i < depth;) { if (index & 1 == 0) { levels[i + 1] = PoseidonT3.hash([levels[i], _defaultZero(i)]); } else { @@ -213,11 +211,11 @@ library InternalLazyIMT { } } - function _merkleProofElements( - LazyIMTData storage self, - uint40 index, - uint8 depth - ) internal view returns (uint256[] memory) { + function _merkleProofElements(LazyIMTData storage self, uint40 index, uint8 depth) + internal + view + returns (uint256[] memory) + { uint40 numberOfLeaves = self.numberOfLeaves; require(index < numberOfLeaves, "LazyIMT: leaf must exist"); @@ -243,7 +241,7 @@ library InternalLazyIMT { } index >>= 1; - for (uint8 i = 1; i < depth; ) { + for (uint8 i = 1; i < depth;) { uint256 currentLevelCount = numberOfLeaves >> i; if (index & 1 == 0) { // if the element is an uncomputed edge node we'll use the value set diff --git a/packages/lazy-imt/contracts/LazyIMT.sol b/packages/lazy-imt/src/LazyIMT.sol similarity index 90% rename from packages/lazy-imt/contracts/LazyIMT.sol rename to packages/lazy-imt/src/LazyIMT.sol index 284d5e5..48a2da8 100644 --- a/packages/lazy-imt/contracts/LazyIMT.sol +++ b/packages/lazy-imt/src/LazyIMT.sol @@ -38,11 +38,11 @@ library LazyIMT { return InternalLazyIMT._root(self, depth); } - function merkleProofElements( - LazyIMTData storage self, - uint40 index, - uint8 depth - ) public view returns (uint256[] memory) { + function merkleProofElements(LazyIMTData storage self, uint40 index, uint8 depth) + public + view + returns (uint256[] memory) + { return InternalLazyIMT._merkleProofElements(self, index, depth); } diff --git a/packages/lazy-imt/tasks/deploy-imt-test.ts b/packages/lazy-imt/tasks/deploy-imt-test.ts deleted file mode 100644 index d9dc6f7..0000000 --- a/packages/lazy-imt/tasks/deploy-imt-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { task, types } from "hardhat/config" - -task("deploy:imt-test", "Deploy an IMT contract for testing a library") - .addParam("library", "The name of the library", undefined, types.string) - .addOptionalParam("logs", "Print the logs", true, types.boolean) - .addOptionalParam("arity", "The arity of the tree", 2, types.int) - .setAction(async ({ logs, library: libraryName, arity }, { ethers }): Promise => { - const PoseidonFactory = await ethers.getContractFactory(`PoseidonT${arity + 1}`) - - const poseidon = await PoseidonFactory.deploy() - const poseidonAddress = await poseidon.getAddress() - - if (logs) { - console.info(`PoseidonT${arity + 1} library has been deployed to: ${poseidonAddress}`) - } - - const LibraryFactory = await ethers.getContractFactory(libraryName, { - libraries: { - [`PoseidonT${arity + 1}`]: poseidonAddress - } - }) - - const library = await LibraryFactory.deploy() - const libraryAddress = await library.getAddress() - - if (logs) { - console.info(`${libraryName} library has been deployed to: ${libraryAddress}`) - } - - const ContractFactory = await ethers.getContractFactory(`${libraryName}Test`, { - libraries: { - [libraryName]: libraryAddress - } - }) - - const contract = await ContractFactory.deploy() - const contractAddress = await contract.getAddress() - - if (logs) { - console.info(`${libraryName}Test contract has been deployed to: ${contractAddress}`) - } - - return { library, contract } - }) diff --git a/packages/lazy-imt/test/LazyIMT.ts b/packages/lazy-imt/test/LazyIMT.ts deleted file mode 100644 index d34653a..0000000 --- a/packages/lazy-imt/test/LazyIMT.ts +++ /dev/null @@ -1,373 +0,0 @@ -import { expect } from "chai" -import { run, network } from "hardhat" -import { poseidon2 } from "poseidon-lite" -import { IMT } from "@zk-kit/imt" -import type { BigNumber } from "ethers" -import { LazyIMT, LazyIMTTest } from "../typechain-types" - -const random = () => poseidon2([Math.floor(Math.random() * 2 ** 40), 0]) - -describe("LazyIMT", () => { - const SNARK_SCALAR_FIELD = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") - let lazyIMTTest: LazyIMTTest - let lazyIMT: LazyIMT - - beforeEach(async () => { - const { library, contract } = await run("deploy:imt-test", { library: "LazyIMT", logs: false }) - - lazyIMTTest = contract - lazyIMT = library - }) - - describe("# init", () => { - it("Should check zero values", async () => { - expect("0").to.equal((await lazyIMT.defaultZero(0)).toString()) - - let hash = poseidon2([BigInt(0), BigInt(0)]) - - for (let x = 1; x < 33; x += 1) { - const v = await lazyIMT.defaultZero(x) - expect(v.toString()).to.equal(hash.toString()) - hash = poseidon2([hash, hash]) - } - - await expect(lazyIMT.defaultZero(34)).to.be.revertedWith("LazyIMT: defaultZero bad index") - }) - - for (let x = 0; x < 32; x += 1) { - it(`Should initialize tree with depth ${x}`, async () => { - { - const treeData = await lazyIMTTest.data() - - expect(treeData.maxIndex).to.equal(0) - expect(treeData.numberOfLeaves).to.equal(0) - } - - await lazyIMTTest.init(x) - - { - const treeData = await lazyIMTTest.data() - - expect(treeData.maxIndex).to.equal(2 ** x - 1) - expect(treeData.numberOfLeaves).to.equal(0) - } - }) - } - - it("Should fail to init large tree", async () => { - const treeData = await lazyIMTTest.data() - - expect(treeData.maxIndex).to.equal(0) - expect(treeData.numberOfLeaves).to.equal(0) - - await expect(lazyIMTTest.init(33)).to.be.revertedWith("LazyIMT: Tree too large") - }) - }) - - describe("# insert", () => { - for (let depth = 1; depth < 3; depth += 1) { - it(`Should insert leaves in tree with depth ${depth}`, async () => { - await lazyIMTTest.init(10) - - // empty root should be H(0, 0) - expect(await lazyIMTTest.root()).to.equal(poseidon2([BigInt(0), BigInt(0)])) - - const elements = [] - - for (let x = 0; x < 2 ** depth - 1; x += 1) { - const e = random() - - elements.push(e) - - // construct the tree - { - const targetDepth = Math.max(1, Math.ceil(Math.log2(elements.length))) - const merkleTree = new IMT(poseidon2, targetDepth, BigInt(0)) - for (const _e of elements) { - merkleTree.insert(_e) - } - await lazyIMTTest.insert(e) - await lazyIMTTest.benchmarkRoot().then((t) => t.wait()) - { - const root = await lazyIMTTest.root() - expect(root.toString()).to.equal(merkleTree.root.toString()) - } - { - const root = await lazyIMTTest.dynamicRoot(targetDepth) - expect(root.toString()).to.equal(merkleTree.root.toString()) - } - } - - const treeData = await lazyIMTTest.data() - - expect(treeData.numberOfLeaves).to.equal(elements.length) - - for (let y = depth; y < 12; y += 1) { - const merkleTree = new IMT(poseidon2, y, BigInt(0)) - for (const _e of elements) { - merkleTree.insert(_e) - } - const root = await lazyIMTTest.staticRoot(y) - expect(root.toString()).to.equal(merkleTree.root.toString()) - } - } - }) - } - - it("Should insert multiple leaves", async () => { - const depth = 8 - - const merkleTree = new IMT(poseidon2, depth, BigInt(0)) - await lazyIMTTest.init(depth) - - for (let x = 0; x < 130; x += 1) { - const e = random() - await lazyIMTTest.insert(e) - merkleTree.insert(e) - } - - const root = await lazyIMTTest.root() - expect(root.toString()).to.equal(merkleTree.root.toString()) - }) - - it("Should fail to insert too many leaves", async () => { - const depth = 3 - - await lazyIMTTest.init(depth) - - for (let x = 0; x < 2 ** depth - 1; x += 1) { - await lazyIMTTest.insert(random()) - } - - await expect(lazyIMTTest.insert(random())).to.be.revertedWith("LazyIMT: tree is full") - }) - - it("Should fail to insert leaf outside of field", async () => { - const depth = 3 - - await lazyIMTTest.init(depth) - - await expect(lazyIMTTest.insert(SNARK_SCALAR_FIELD)).to.be.revertedWith( - "LazyIMT: leaf must be < SNARK_SCALAR_FIELD" - ) - }) - }) - - describe("# update", () => { - for (let depth = 1; depth < 3; depth += 1) { - it(`Should update leaves in tree with depth ${depth}`, async () => { - await lazyIMTTest.init(depth) - - const elements = [] - - // runs in ~N^N - for (let x = 0; x < 2 ** depth - 1; x += 1) { - const e = random() - - elements.push(e) - - // construct the tree - const targetDepth = Math.max(1, Math.ceil(Math.log2(elements.length))) - - { - const merkleTree = new IMT(poseidon2, targetDepth, BigInt(0)) - - for (const _e of elements) { - merkleTree.insert(_e) - } - - await lazyIMTTest.insert(e) - - await lazyIMTTest.benchmarkRoot().then((t) => t.wait()) - - const root = await lazyIMTTest.root() - - expect(root.toString()).to.equal(merkleTree.root.toString()) - - const treeData = await lazyIMTTest.data() - - expect(treeData.numberOfLeaves).to.equal(elements.length) - } - - for (let y = 0; y < x; y += 1) { - const newE = random() - - elements.splice(y, 1, newE) - - await lazyIMTTest.update(newE, y) - - const merkleTree = new IMT(poseidon2, targetDepth, BigInt(0)) - - for (const _e of elements) { - merkleTree.insert(_e) - } - - const root = await lazyIMTTest.root() - - expect(root.toString()).to.equal(merkleTree.root.toString()) - - const treeData = await lazyIMTTest.data() - - expect(treeData.numberOfLeaves).to.equal(elements.length) - } - } - }) - } - - it("Should fail to update invalid leaf index", async () => { - const depth = 4 - - await lazyIMTTest.init(depth) - - for (let x = 0; x < 10; x += 1) { - await lazyIMTTest.insert(random()) - } - - await expect(lazyIMTTest.update(random(), 10)).to.be.revertedWith("LazyIMT: leaf must exist") - }) - - it("Should fail to update with invalid leaf value", async () => { - const depth = 3 - - await lazyIMTTest.init(depth) - - for (let x = 0; x < 3; x += 1) { - await lazyIMTTest.insert(random()) - } - - await expect(lazyIMTTest.update(SNARK_SCALAR_FIELD, 0)).to.be.revertedWith( - "LazyIMT: leaf must be < SNARK_SCALAR_FIELD" - ) - }) - }) - - describe("# reset", () => { - it("Should reset and reuse tree", async () => { - const depth = 3 - - await lazyIMTTest.init(10) - - { - const data = await lazyIMTTest.data() - - expect(data.numberOfLeaves).to.equal(0) - } - - for (let i = 0; i < 3; i += 1) { - const elements = [] - - for (let x = 0; x < 2 ** depth - 1; x += 1) { - const e = random() - - elements.push(e) - - // construct the tree - const targetDepth = Math.max(1, Math.ceil(Math.log2(elements.length))) - const merkleTree = new IMT(poseidon2, targetDepth, BigInt(0)) - - for (const _e of elements) { - merkleTree.insert(_e) - } - - await lazyIMTTest.insert(e) - - const root = await lazyIMTTest.root() - - expect(root.toString()).to.equal(merkleTree.root.toString()) - - const treeData = await lazyIMTTest.data() - - expect(treeData.numberOfLeaves).to.equal(elements.length) - } - - await lazyIMTTest.reset() - - { - const data = await lazyIMTTest.data() - expect(data.numberOfLeaves).to.equal(0) - } - } - }) - }) - - describe("# merkleProof", () => { - // Given a merkle proof (elements and indices) and a leaf, calculates the root - function calculateRoot(leafIndex: number, leaf: BigNumber, proofElements: BigNumber[]) { - let hash = leaf - const proofIndices = [] - for (let x = 0; x < proofElements.length; x += 1) { - proofIndices.push((leafIndex >> x) & 1) - } - for (let i = 0; i < proofElements.length; i += 1) { - const proofElement = proofElements[i] - const proofIndex = proofIndices[i] - if (proofIndex) { - hash = poseidon2([proofElement.toString(), hash.toString()]) - } else { - hash = poseidon2([hash.toString(), proofElement.toString()]) - } - } - return hash - } - - it("Should produce valid Merke proofs for different trees", async () => { - // Test different depths (key) and leafs (values) - const tests: { [key: number]: number[] } = { - 1: [1], - 2: [1, 2], - 5: [6, 7, 8, 15, 16], - 7: [7, 127], - 20: [9, 14, 15, 16, 18, 26, 27, 28, 40, 128, 129] - } - - // For each depth - // eslint-disable-next-line guard-for-in - for (const depth in tests) { - // For each amount of leafs - for (const numLeaf of tests[depth]) { - // Freeze the state - const snapshoot = await network.provider.request({ method: "evm_snapshot", params: [] }) - - // Create the tree - await lazyIMTTest.init(depth) - const elements = [] - for (let x = 0; x < numLeaf; x += 1) { - const e = random() - elements.push(e) - await lazyIMTTest.insert(e) - } - - // Get proofs for every leafs and verify against the root - for (let leafIndex = 0; leafIndex < numLeaf; leafIndex += 1) { - const proofElements = await lazyIMTTest.merkleProofElements(leafIndex, depth) - - // Calculate the root we arrive at with the proof we got - const calculatedRoot = calculateRoot(leafIndex, elements[leafIndex], proofElements) - - // Get the root from the contract - const staticRoot = await lazyIMTTest.staticRoot(depth) - - // If they match, proof is valid - await expect(calculatedRoot).to.be.equal(staticRoot) - } - - // Done with test, revert the tree state - await network.provider.request({ method: "evm_revert", params: [snapshoot] }) - } - } - }).timeout(8 * 60 * 1000) - }) - - it("Should fail to generate out of range static root", async () => { - await lazyIMTTest.init(10) - - const elements = [] - for (let x = 0; x < 20; x += 1) { - const e = random() - elements.push(e) - await lazyIMTTest.insert(e) - } - await expect(lazyIMTTest.staticRoot(4)).to.be.revertedWith("LazyIMT: ambiguous depth") - await expect(lazyIMTTest.staticRoot(33)).to.be.revertedWith("LazyIMT: depth must be <= MAX_DEPTH") - }) -}) diff --git a/packages/lazy-imt/contracts/test/LazyIMTTest.sol b/packages/lazy-imt/test/LazyIMTTest.sol similarity index 95% rename from packages/lazy-imt/contracts/test/LazyIMTTest.sol rename to packages/lazy-imt/test/LazyIMTTest.sol index 417c341..2d4b03d 100644 --- a/packages/lazy-imt/contracts/test/LazyIMTTest.sol +++ b/packages/lazy-imt/test/LazyIMTTest.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; -import {LazyIMT, LazyIMTData} from "../LazyIMT.sol"; +import {LazyIMT, LazyIMTData} from "../src/LazyIMT.sol"; contract LazyIMTTest { LazyIMTData public data; diff --git a/packages/lazy-imt/tsconfig.json b/packages/lazy-imt/tsconfig.json deleted file mode 100644 index 0a513ff..0000000 --- a/packages/lazy-imt/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["scripts/**/*", "tasks/**/*", "test/**/*", "typechain-types/**/*"], - "files": ["hardhat.config.ts"] -} diff --git a/packages/lazytower/.prettierrc.json b/packages/lazytower/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/lazytower/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/lazytower/.solhint.json b/packages/lazytower/.solhint.json deleted file mode 100644 index bfc727d..0000000 --- a/packages/lazytower/.solhint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": ["prettier"], - "rules": { - "compiler-version": ["error", ">=0.8.0"], - "const-name-snakecase": "off", - "no-empty-blocks": "off", - "constructor-syntax": "error", - "func-visibility": ["error", { "ignoreConstructors": true }], - "max-line-length": ["error", 120], - "not-rely-on-time": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], - "reason-string": ["warn", { "maxLength": 80 }] - } -} diff --git a/packages/lazytower/LICENSE b/packages/lazytower/LICENSE index 89a15f7..30cff74 120000 --- a/packages/lazytower/LICENSE +++ b/packages/lazytower/LICENSE @@ -1 +1 @@ -contracts/LICENSE \ No newline at end of file +../../LICENSE \ No newline at end of file diff --git a/packages/lazytower/README.md b/packages/lazytower/README.md deleted file mode 120000 index 1ee0442..0000000 --- a/packages/lazytower/README.md +++ /dev/null @@ -1 +0,0 @@ -contracts/README.md \ No newline at end of file diff --git a/packages/lazytower/README.md b/packages/lazytower/README.md new file mode 100644 index 0000000..dcaa8a5 --- /dev/null +++ b/packages/lazytower/README.md @@ -0,0 +1,138 @@ +

+

+ LazyTower (Solidity) +

+

LazyTower Solidity library.

+

+ +

+ + + + + NPM license + + + NPM version + + + Downloads + + + Code style prettier + +

+ + + +> [!WARNING] +> These library has **not** been audited. + +--- + +## 🛠 Install + +### npm or yarn + +Install the `@zk-kit/lazytower.sol` package with npm: + +```bash +npm i @zk-kit/lazytower.sol --save +``` + +or yarn: + +```bash +yarn add @zk-kit/lazytower.sol +``` + +## 📜 Usage + +### Importing and using the library + +```solidity +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.4; + +import "../LazyTowerHashChain.sol"; + +contract LazyTowerHashChainTest { + using LazyTowerHashChain for LazyTowerHashChainData; + + event Add(uint256 item); + + // map for multiple test cases + mapping(bytes32 => LazyTowerHashChainData) public towers; + + function add(bytes32 _towerId, uint256 _item) external { + towers[_towerId].add(_item); + emit Add(_item); + } + + function getDataForProving(bytes32 _towerId) external view returns (uint256, uint256[] memory, uint256) { + return towers[_towerId].getDataForProving(); + } +} +``` + +### Creating an Hardhat task to deploy the contract + +```typescript +import { Contract } from "ethers" +import { task, types } from "hardhat/config" + +task("deploy:lazytower-test", "Deploy a LazyTowerHashChainTest contract") + .addOptionalParam("logs", "Print the logs", true, types.boolean) + .setAction(async ({ logs }, { ethers }): Promise => { + const PoseidonT3Factory = await ethers.getContractFactory("PoseidonT3") + const PoseidonT3 = await PoseidonT3Factory.deploy() + + if (logs) { + console.info(`PoseidonT3 library has been deployed to: ${PoseidonT3.address}`) + } + + const LazyTowerLibFactory = await ethers.getContractFactory("LazyTowerHashChain", { + libraries: { + PoseidonT3: PoseidonT3.address + } + }) + const lazyTowerLib = await LazyTowerLibFactory.deploy() + + await lazyTowerLib.deployed() + + if (logs) { + console.info(`LazyTowerHashChain library has been deployed to: ${lazyTowerLib.address}`) + } + + const ContractFactory = await ethers.getContractFactory("LazyTowerHashChainTest", { + libraries: { + LazyTowerHashChain: lazyTowerLib.address + } + }) + + const contract = await ContractFactory.deploy() + + await contract.deployed() + + if (logs) { + console.info(`Test contract has been deployed to: ${contract.address}`) + } + + return contract + }) +``` + +## Contacts + +### Developers + +- e-mail : lcamel@gmail.com +- github : [@LCamel](https://github.com/LCamel) +- website : https://www.facebook.com/LCamel diff --git a/packages/lazytower/contracts/LICENSE b/packages/lazytower/contracts/LICENSE deleted file mode 100644 index 8ef16f7..0000000 --- a/packages/lazytower/contracts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Ethereum Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/lazytower/contracts/README.md b/packages/lazytower/contracts/README.md deleted file mode 100644 index dcaa8a5..0000000 --- a/packages/lazytower/contracts/README.md +++ /dev/null @@ -1,138 +0,0 @@ -

-

- LazyTower (Solidity) -

-

LazyTower Solidity library.

-

- -

- - - - - NPM license - - - NPM version - - - Downloads - - - Code style prettier - -

- - - -> [!WARNING] -> These library has **not** been audited. - ---- - -## 🛠 Install - -### npm or yarn - -Install the `@zk-kit/lazytower.sol` package with npm: - -```bash -npm i @zk-kit/lazytower.sol --save -``` - -or yarn: - -```bash -yarn add @zk-kit/lazytower.sol -``` - -## 📜 Usage - -### Importing and using the library - -```solidity -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.4; - -import "../LazyTowerHashChain.sol"; - -contract LazyTowerHashChainTest { - using LazyTowerHashChain for LazyTowerHashChainData; - - event Add(uint256 item); - - // map for multiple test cases - mapping(bytes32 => LazyTowerHashChainData) public towers; - - function add(bytes32 _towerId, uint256 _item) external { - towers[_towerId].add(_item); - emit Add(_item); - } - - function getDataForProving(bytes32 _towerId) external view returns (uint256, uint256[] memory, uint256) { - return towers[_towerId].getDataForProving(); - } -} -``` - -### Creating an Hardhat task to deploy the contract - -```typescript -import { Contract } from "ethers" -import { task, types } from "hardhat/config" - -task("deploy:lazytower-test", "Deploy a LazyTowerHashChainTest contract") - .addOptionalParam("logs", "Print the logs", true, types.boolean) - .setAction(async ({ logs }, { ethers }): Promise => { - const PoseidonT3Factory = await ethers.getContractFactory("PoseidonT3") - const PoseidonT3 = await PoseidonT3Factory.deploy() - - if (logs) { - console.info(`PoseidonT3 library has been deployed to: ${PoseidonT3.address}`) - } - - const LazyTowerLibFactory = await ethers.getContractFactory("LazyTowerHashChain", { - libraries: { - PoseidonT3: PoseidonT3.address - } - }) - const lazyTowerLib = await LazyTowerLibFactory.deploy() - - await lazyTowerLib.deployed() - - if (logs) { - console.info(`LazyTowerHashChain library has been deployed to: ${lazyTowerLib.address}`) - } - - const ContractFactory = await ethers.getContractFactory("LazyTowerHashChainTest", { - libraries: { - LazyTowerHashChain: lazyTowerLib.address - } - }) - - const contract = await ContractFactory.deploy() - - await contract.deployed() - - if (logs) { - console.info(`Test contract has been deployed to: ${contract.address}`) - } - - return contract - }) -``` - -## Contacts - -### Developers - -- e-mail : lcamel@gmail.com -- github : [@LCamel](https://github.com/LCamel) -- website : https://www.facebook.com/LCamel diff --git a/packages/lazytower/contracts/package.json b/packages/lazytower/contracts/package.json deleted file mode 100644 index 1d46dec..0000000 --- a/packages/lazytower/contracts/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@zk-kit/lazytower.sol", - "version": "0.0.1", - "description": "LazyTower Solidity libraries.", - "license": "MIT", - "files": [ - "**/*.sol", - "!test/", - "README.md" - ], - "keywords": [ - "blockchain", - "ethereum", - "hardhat", - "smart-contracts", - "solidity", - "libraries", - "merkle-tree", - "incremental-merkle-tree", - "lazytower" - ], - "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", - "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazytower", - "author": { - "name": "LCamel", - "email": "lcamel@gmail.com", - "url": "https://twitter.com/LCamel" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "poseidon-solidity": "0.0.5" - } -} diff --git a/packages/lazytower/hardhat.config.ts b/packages/lazytower/hardhat.config.ts deleted file mode 100644 index 10c3e1f..0000000 --- a/packages/lazytower/hardhat.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox" -import { HardhatUserConfig } from "hardhat/config" -import "./tasks/deploy-lazytower-test" - -const hardhatConfig: HardhatUserConfig = { - solidity: "0.8.23", - gasReporter: { - currency: "USD", - enabled: process.env.REPORT_GAS === "true", - coinmarketcap: process.env.COINMARKETCAP_API_KEY - }, - typechain: { - target: "ethers-v6" - } -} - -export default hardhatConfig diff --git a/packages/lazytower/package.json b/packages/lazytower/package.json index 74ade71..c2a92c2 100644 --- a/packages/lazytower/package.json +++ b/packages/lazytower/package.json @@ -1,39 +1,33 @@ { - "name": "lazytower.sol", - "private": true, - "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", - "deploy:test-contracts": "hardhat deploy:tree-contracts", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", - "typechain": "hardhat typechain", - "lint": "solhint 'contracts/**/*.sol'" + "name": "@zk-kit/lazytower.sol", + "version": "0.0.1", + "description": "LazyTower Solidity libraries.", + "license": "MIT", + "files": [ + "**/*.sol", + "!test/", + "README.md" + ], + "keywords": [ + "blockchain", + "ethereum", + "forge", + "smart-contracts", + "solidity", + "libraries", + "merkle-tree", + "incremental-merkle-tree", + "lazytower" + ], + "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", + "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/lazytower", + "author": { + "name": "LCamel", + "email": "lcamel@gmail.com", + "url": "https://twitter.com/LCamel" }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.3", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.19.4", - "hardhat-gas-reporter": "^1.0.8", - "poseidon-lite": "^0.2.0", - "prettier-plugin-solidity": "^1.3.1", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.0", - "ts-node": "^10.9.2", - "typechain": "^8.3.0", - "typescript": "^5.3.3" + "publishConfig": { + "access": "public" }, "dependencies": { "poseidon-solidity": "0.0.5" diff --git a/packages/lazytower/contracts/LazyTowerHashChain.sol b/packages/lazytower/src/LazyTowerHashChain.sol similarity index 90% rename from packages/lazytower/contracts/LazyTowerHashChain.sol rename to packages/lazytower/src/LazyTowerHashChain.sol index d7fce28..a0fd6d1 100644 --- a/packages/lazytower/contracts/LazyTowerHashChain.sol +++ b/packages/lazytower/src/LazyTowerHashChain.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.4; import {PoseidonT3} from "poseidon-solidity/PoseidonT3.sol"; // CAPACITY = W * (W**0 + W**1 + ... + W**(H - 1)) = W * (W**H - 1) / (W - 1) // 4 * (4**24 - 1) / (4 - 1) = 375_299_968_947_540; + uint256 constant H = 24; uint256 constant W = 4; @@ -26,9 +27,11 @@ library LazyTowerHashChain { uint256 internal constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - function findLowestNonFullLevelThenInc( - uint256 levelLengths - ) internal pure returns (uint256 level, bool isHead, bool isTop, uint256 newLevelLengths) { + function findLowestNonFullLevelThenInc(uint256 levelLengths) + internal + pure + returns (uint256 level, bool isHead, bool isTop, uint256 newLevelLengths) + { // find the lowest non-full level uint256 levelLength; while (true) { @@ -82,9 +85,11 @@ library LazyTowerHashChain { } } - function getDataForProving( - LazyTowerHashChainData storage self - ) external view returns (uint256, uint256[] memory, uint256) { + function getDataForProving(LazyTowerHashChainData storage self) + external + view + returns (uint256, uint256[] memory, uint256) + { uint256 len = self.digests.length; uint256[] memory digests = new uint256[](len); // for returning a dynamic array for (uint256 i = 0; i < len; i++) { diff --git a/packages/lazytower/tasks/deploy-lazytower-test.ts b/packages/lazytower/tasks/deploy-lazytower-test.ts deleted file mode 100644 index 1ac1751..0000000 --- a/packages/lazytower/tasks/deploy-lazytower-test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { task, types } from "hardhat/config" - -task("deploy:lazytower-test", "Deploy a LazyTowerHashChainTest contract") - .addOptionalParam("logs", "Print the logs", true, types.boolean) - .setAction(async ({ logs }, { ethers }): Promise => { - const PoseidonT3Factory = await ethers.getContractFactory("PoseidonT3") - - const poseidonT3 = await PoseidonT3Factory.deploy() - const poseidonT3Address = await poseidonT3.getAddress() - - if (logs) { - console.info(`PoseidonT3 library has been deployed to: ${poseidonT3Address}`) - } - - const LazyTowerLibFactory = await ethers.getContractFactory("LazyTowerHashChain", { - libraries: { - PoseidonT3: poseidonT3Address - } - }) - - const lazyTowerLib = await LazyTowerLibFactory.deploy() - const lazyTowerLibAddress = await lazyTowerLib.getAddress() - - if (logs) { - console.info(`LazyTowerHashChain library has been deployed to: ${lazyTowerLibAddress}`) - } - - const ContractFactory = await ethers.getContractFactory("LazyTowerHashChainTest", { - libraries: { - LazyTowerHashChain: lazyTowerLibAddress - } - }) - - const contract = await ContractFactory.deploy() - const contractAddress = await lazyTowerLib.getAddress() - - if (logs) { - console.info(`Test contract has been deployed to: ${contractAddress}`) - } - - return contract - }) diff --git a/packages/lazytower/contracts/test/LazyTowerHashChainTest.sol b/packages/lazytower/test/LazyTowerHashChainTest.sol similarity index 93% rename from packages/lazytower/contracts/test/LazyTowerHashChainTest.sol rename to packages/lazytower/test/LazyTowerHashChainTest.sol index c1501d0..1666e40 100644 --- a/packages/lazytower/contracts/test/LazyTowerHashChainTest.sol +++ b/packages/lazytower/test/LazyTowerHashChainTest.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; -import "../LazyTowerHashChain.sol"; +import "../src/LazyTowerHashChain.sol"; contract LazyTowerHashChainTest { using LazyTowerHashChain for LazyTowerHashChainData; diff --git a/packages/lazytower/test/LazyTowerHashChainTest.ts b/packages/lazytower/test/LazyTowerHashChainTest.ts deleted file mode 100644 index 2ce66e8..0000000 --- a/packages/lazytower/test/LazyTowerHashChainTest.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { expect } from "chai" -import { Contract, encodeBytes32String } from "ethers" -import { run } from "hardhat" -import { poseidon2 } from "poseidon-lite" -import ShiftTower from "./utils" - -describe("LazyTowerHashChainTest", () => { - let contract: Contract - - before(async () => { - contract = await run("deploy:lazytower-test", { logs: false }) - }) - - it("Should produce correct levelLengths, digests and digest of digests", async () => { - const lazyTowerId = encodeBytes32String("test1") - - const N = 150 - for (let i = 0; i < N; i += 1) { - await contract.add(lazyTowerId, i) - } - - const [levelLengths, digests, digestOfDigests] = await contract.getDataForProving(lazyTowerId) - - expect(levelLengths).to.equal(0x2112) - - expect(digests[0]).to.equal( - BigInt("7484852499570635450337779587061833141700590058395918107227385307780465498841") - ) - expect(digests[1]).to.equal( - BigInt("18801712394745483811033456933953954791894699812924877968490149877093764724813") - ) - expect(digests[2]).to.equal( - BigInt("18495397265763935736123111771752209927150052777598404957994272011704245682779") - ) - expect(digests[3]).to.equal( - BigInt("11606235313340788975553986881206148975708550071371494991713397040288897077102") - ) - for (let i = 4; i < digests.length; i += 1) { - expect(digests[i]).to.equal(BigInt("0")) - } - - expect(digestOfDigests).to.equal( - BigInt("19260615748091768530426964318883829655407684674262674118201416393073357631548") - ) - }) - - // TODO: this times out in CI - it.skip("Should have the same output as the Javascript fixture", async () => { - const lazyTowerId = encodeBytes32String("test2") - - const H2 = (a: bigint, b: bigint) => poseidon2([a, b]) - const W = 4 - const shiftTower = ShiftTower(W, (vs: any[]) => vs.reduce(H2)) - for (let i = 0; i < 150; i += 1) { - shiftTower.add(i) - - const tx = contract.add(lazyTowerId, i) - - // event - await expect(tx).to.emit(contract, "Add").withArgs(i) - - // levelLengths and digest - const [levelLengths, digests, digestOfDigests] = await contract.getDataForProving(lazyTowerId) - - expect(levelLengths).to.equal(shiftTower.L.map((l) => l.length).reduce((s, v, lv) => s + (v << (lv * 4)))) - - const D = shiftTower.L.map((l: any[]) => l.reduce(H2)) - for (let lv = 0; lv < digests.length; lv += 1) { - expect(digests[lv]).to.equal(D[lv] ?? 0) - } - - expect(digestOfDigests).to.equal(D.reverse().reduce(H2)) - } - }) - - it("Should reject values not in the field", async () => { - const lazyTowerId = encodeBytes32String("test3") - - let item = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495616") - - const tx = contract.add(lazyTowerId, item) - await expect(tx).to.emit(contract, "Add").withArgs(item) - - item += BigInt(1) - const tx2 = contract.add(lazyTowerId, item) - await expect(tx2).to.be.revertedWith("LazyTower: item must be < SNARK_SCALAR_FIELD") - }) -}) diff --git a/packages/lazytower/test/utils.ts b/packages/lazytower/test/utils.ts deleted file mode 100644 index e720fe5..0000000 --- a/packages/lazytower/test/utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default function ShiftTower(W: number, digest: (values: number[]) => number) { - const S: number[][] = [] - const L: number[][] = [] - - function _add(lv: number, v: number): number { - if (lv === L.length) { - S[lv] = [] - L[lv] = [v] - } else if (L[lv].length < W) { - L[lv].push(v) - } else { - const d = digest(L[lv]) - S[lv].push(...L[lv]) - L[lv] = [v] - return _add(lv + 1, d) - } - return lv - } - const add = (item: number) => _add(0, item) - return { W, digest, L, S, add } -} diff --git a/packages/lazytower/tsconfig.json b/packages/lazytower/tsconfig.json deleted file mode 100644 index 0a513ff..0000000 --- a/packages/lazytower/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["scripts/**/*", "tasks/**/*", "test/**/*", "typechain-types/**/*"], - "files": ["hardhat.config.ts"] -} diff --git a/packages/lean-imt/.prettierrc.json b/packages/lean-imt/.prettierrc.json deleted file mode 100644 index 717fb52..0000000 --- a/packages/lean-imt/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "arrowParens": "always", - "trailingComma": "none", - "plugins": ["prettier-plugin-solidity"] -} diff --git a/packages/lean-imt/.solhint.json b/packages/lean-imt/.solhint.json deleted file mode 100644 index bfc727d..0000000 --- a/packages/lean-imt/.solhint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": ["prettier"], - "rules": { - "compiler-version": ["error", ">=0.8.0"], - "const-name-snakecase": "off", - "no-empty-blocks": "off", - "constructor-syntax": "error", - "func-visibility": ["error", { "ignoreConstructors": true }], - "max-line-length": ["error", 120], - "not-rely-on-time": "off", - "prettier/prettier": [ - "error", - { - "endOfLine": "auto" - } - ], - "reason-string": ["warn", { "maxLength": 80 }] - } -} diff --git a/packages/lean-imt/LICENSE b/packages/lean-imt/LICENSE deleted file mode 120000 index 89a15f7..0000000 --- a/packages/lean-imt/LICENSE +++ /dev/null @@ -1 +0,0 @@ -contracts/LICENSE \ No newline at end of file diff --git a/packages/lean-imt/LICENSE b/packages/lean-imt/LICENSE new file mode 100644 index 0000000..8ef16f7 --- /dev/null +++ b/packages/lean-imt/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Ethereum Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/lean-imt/README.md b/packages/lean-imt/README.md deleted file mode 120000 index 1ee0442..0000000 --- a/packages/lean-imt/README.md +++ /dev/null @@ -1 +0,0 @@ -contracts/README.md \ No newline at end of file diff --git a/packages/lean-imt/README.md b/packages/lean-imt/README.md new file mode 100644 index 0000000..8c5e1cb --- /dev/null +++ b/packages/lean-imt/README.md @@ -0,0 +1,59 @@ +

+

+ Lean Incremental Merkle Tree (Solidity) +

+

Lean Incremental Merkle tree implementation in Solidity.

+

+ +

+ + + + + NPM license + + + NPM version + + + Downloads + + + Code style prettier + +

+ + + +> [!NOTE] +> This library has been audited as part of the Semaphore V4 PSE audit: https://semaphore.pse.dev/Semaphore_4.0.0_Audit.pdf. + +The LeanIMT is an optimized binary version of the [IMT](https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt) into binary-focused model, eliminating the need for zero values and allowing dynamic depth adjustment. Unlike the IMT, which uses a zero hash for incomplete nodes, the LeanIMT directly adopts the left child's value when a node lacks a right counterpart. The tree's depth dynamically adjusts to the count of leaves, enhancing efficiency by reducing the number of required hash calculations. To understand more about the LeanIMT, take a look at this [visual explanation](https://hackmd.io/@vplasencia/S1whLBN16). + +--- + +## 🛠 Install + +### npm or yarn + +Install the `@zk-kit/lean-imt.sol` package with npm: + +```bash +npm i @zk-kit/lean-imt.sol --save +``` + +or yarn: + +```bash +yarn add @zk-kit/lean-imt.sol +``` + +## 📜 Usage + +Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/lean-imt/contracts/LICENSE b/packages/lean-imt/contracts/LICENSE deleted file mode 100644 index 8ef16f7..0000000 --- a/packages/lean-imt/contracts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Ethereum Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/lean-imt/contracts/README.md b/packages/lean-imt/contracts/README.md deleted file mode 100644 index 8c5e1cb..0000000 --- a/packages/lean-imt/contracts/README.md +++ /dev/null @@ -1,59 +0,0 @@ -

-

- Lean Incremental Merkle Tree (Solidity) -

-

Lean Incremental Merkle tree implementation in Solidity.

-

- -

- - - - - NPM license - - - NPM version - - - Downloads - - - Code style prettier - -

- - - -> [!NOTE] -> This library has been audited as part of the Semaphore V4 PSE audit: https://semaphore.pse.dev/Semaphore_4.0.0_Audit.pdf. - -The LeanIMT is an optimized binary version of the [IMT](https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt) into binary-focused model, eliminating the need for zero values and allowing dynamic depth adjustment. Unlike the IMT, which uses a zero hash for incomplete nodes, the LeanIMT directly adopts the left child's value when a node lacks a right counterpart. The tree's depth dynamically adjusts to the count of leaves, enhancing efficiency by reducing the number of required hash calculations. To understand more about the LeanIMT, take a look at this [visual explanation](https://hackmd.io/@vplasencia/S1whLBN16). - ---- - -## 🛠 Install - -### npm or yarn - -Install the `@zk-kit/lean-imt.sol` package with npm: - -```bash -npm i @zk-kit/lean-imt.sol --save -``` - -or yarn: - -```bash -yarn add @zk-kit/lean-imt.sol -``` - -## 📜 Usage - -Please, see the [test contracts](./test) for guidance on utilizing the libraries. diff --git a/packages/lean-imt/contracts/package.json b/packages/lean-imt/contracts/package.json deleted file mode 100644 index 20b39a6..0000000 --- a/packages/lean-imt/contracts/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@zk-kit/lean-imt.sol", - "version": "2.0.0", - "description": "Incremental Merkle tree implementations in Solidity.", - "license": "MIT", - "files": [ - "*.sol", - "!test/*", - "README.md", - "LICENSE" - ], - "keywords": [ - "blockchain", - "ethereum", - "hardhat", - "smart-contracts", - "solidity", - "libraries", - "merkle-tree", - "incremental-merkle-tree" - ], - "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", - "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "poseidon-solidity": "0.0.5" - } -} diff --git a/packages/lean-imt/contracts/test/LeanIMTTest.sol b/packages/lean-imt/contracts/test/LeanIMTTest.sol deleted file mode 100644 index b39f8d1..0000000 --- a/packages/lean-imt/contracts/test/LeanIMTTest.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.4; - -import {LeanIMT, LeanIMTData} from "../LeanIMT.sol"; - -contract LeanIMTTest { - LeanIMTData public data; - - function insert(uint256 leaf) external { - LeanIMT.insert(data, leaf); - } - - function insertMany(uint256[] calldata leaves) external { - LeanIMT.insertMany(data, leaves); - } - - function update(uint256 oldLeaf, uint256 newLeaf, uint256[] calldata siblingNodes) external { - LeanIMT.update(data, oldLeaf, newLeaf, siblingNodes); - } - - function remove(uint256 leaf, uint256[] calldata siblingNodes) external { - LeanIMT.remove(data, leaf, siblingNodes); - } - - function has(uint256 leaf) external view returns (bool) { - return LeanIMT.has(data, leaf); - } - - function indexOf(uint256 leaf) external view returns (uint256) { - return LeanIMT.indexOf(data, leaf); - } - - function root() public view returns (uint256) { - return LeanIMT.root(data); - } -} diff --git a/packages/lean-imt/hardhat.config.ts b/packages/lean-imt/hardhat.config.ts deleted file mode 100644 index d652e05..0000000 --- a/packages/lean-imt/hardhat.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox" -import { HardhatUserConfig } from "hardhat/config" -import "./tasks/deploy-imt-test" - -const hardhatConfig: HardhatUserConfig = { - solidity: { - version: "0.8.23", - settings: { - optimizer: { - enabled: true - } - } - }, - gasReporter: { - currency: "USD", - enabled: process.env.REPORT_GAS === "true" - }, - typechain: { - target: "ethers-v6" - } -} - -export default hardhatConfig diff --git a/packages/lean-imt/package.json b/packages/lean-imt/package.json index ef8316f..f94aaee 100644 --- a/packages/lean-imt/package.json +++ b/packages/lean-imt/package.json @@ -1,39 +1,25 @@ { - "name": "lean-imt.sol", - "private": true, - "scripts": { - "start": "hardhat node", - "compile": "hardhat compile", - "test": "hardhat test", - "test:report-gas": "REPORT_GAS=true hardhat test", - "test:coverage": "hardhat coverage", - "typechain": "hardhat typechain", - "lint": "solhint 'contracts/**/*.sol'" - }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.3", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", - "@zk-kit/lean-imt": "^2.0.1", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.19.4", - "hardhat-gas-reporter": "^1.0.8", - "poseidon-lite": "^0.2.0", - "prettier-plugin-solidity": "^1.3.1", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "^0.8.0", - "ts-node": "^10.9.2", - "typechain": "^8.3.0", - "typescript": "^5.3.3" + "name": "@zk-kit/lean-imt.sol", + "version": "2.0.0", + "description": "Incremental Merkle tree implementations in Solidity.", + "license": "MIT", + "files": [ + "src" + ], + "keywords": [ + "blockchain", + "ethereum", + "forge", + "smart-contracts", + "solidity", + "libraries", + "merkle-tree", + "incremental-merkle-tree" + ], + "repository": "git@github.com:privacy-scaling-explorations/zk-kit.solidity.git", + "homepage": "https://github.com/privacy-scaling-explorations/zk-kit.solidity/tree/main/packages/imt", + "publishConfig": { + "access": "public" }, "dependencies": { "poseidon-solidity": "0.0.5" diff --git a/packages/lean-imt/contracts/Constants.sol b/packages/lean-imt/src/Constants.sol similarity index 100% rename from packages/lean-imt/contracts/Constants.sol rename to packages/lean-imt/src/Constants.sol diff --git a/packages/lean-imt/contracts/InternalLeanIMT.sol b/packages/lean-imt/src/InternalLeanIMT.sol similarity index 95% rename from packages/lean-imt/contracts/InternalLeanIMT.sol rename to packages/lean-imt/src/InternalLeanIMT.sol index 49c3bdb..8f5c593 100644 --- a/packages/lean-imt/contracts/InternalLeanIMT.sol +++ b/packages/lean-imt/src/InternalLeanIMT.sol @@ -62,7 +62,7 @@ library InternalLeanIMT { uint256 node = leaf; - for (uint256 level = 0; level < treeDepth; ) { + for (uint256 level = 0; level < treeDepth;) { if ((index >> level) & 1 == 1) { node = PoseidonT3.hash([self.sideNodes[level], node]); } else { @@ -93,7 +93,7 @@ library InternalLeanIMT { uint256 treeSize = self.size; // Check that all the new values are correct to be added. - for (uint256 i = 0; i < leaves.length; ) { + for (uint256 i = 0; i < leaves.length;) { if (leaves[i] >= SNARK_SCALAR_FIELD) { revert LeafGreaterThanSnarkScalarField(); } else if (leaves[i] == 0) { @@ -138,12 +138,12 @@ library InternalLeanIMT { // The size of the next level. uint256 nextLevelSize = ((currentLevelSize - 1) >> 1) + 1; - for (uint256 level = 0; level < treeDepth; ) { + for (uint256 level = 0; level < treeDepth;) { // The number of nodes for the new level that will be created, // only the new values, not the entire level. uint256 numberOfNewNodes = nextLevelSize - nextLevelStartIndex; uint256[] memory nextLevelNewNodes = new uint256[](numberOfNewNodes); - for (uint256 i = 0; i < numberOfNewNodes; ) { + for (uint256 i = 0; i < numberOfNewNodes;) { uint256 leftNode; // Assign the left node using the saved path or the position in the array. @@ -226,12 +226,10 @@ library InternalLeanIMT { /// @param newLeaf: The new value that will replace the oldLeaf in the tree. /// @param siblingNodes: An array of sibling nodes that are necessary to recalculate the path to the root. /// @return The new hash of the updated node after the leaf has been updated. - function _update( - LeanIMTData storage self, - uint256 oldLeaf, - uint256 newLeaf, - uint256[] calldata siblingNodes - ) internal returns (uint256) { + function _update(LeanIMTData storage self, uint256 oldLeaf, uint256 newLeaf, uint256[] calldata siblingNodes) + internal + returns (uint256) + { if (newLeaf >= SNARK_SCALAR_FIELD) { revert LeafGreaterThanSnarkScalarField(); } else if (!_has(self, oldLeaf)) { @@ -250,7 +248,7 @@ library InternalLeanIMT { // Cache tree depth to optimize gas uint256 treeDepth = self.depth; - for (uint256 level = 0; level < treeDepth; ) { + for (uint256 level = 0; level < treeDepth;) { if ((index >> level) & 1 == 1) { if (siblingNodes[i] >= SNARK_SCALAR_FIELD) { revert LeafGreaterThanSnarkScalarField(); @@ -306,11 +304,10 @@ library InternalLeanIMT { /// @param oldLeaf: The value of the leaf to be removed. /// @param siblingNodes: An array of sibling nodes required for updating the path to the root after removal. /// @return The new root hash of the tree after the leaf has been removed. - function _remove( - LeanIMTData storage self, - uint256 oldLeaf, - uint256[] calldata siblingNodes - ) internal returns (uint256) { + function _remove(LeanIMTData storage self, uint256 oldLeaf, uint256[] calldata siblingNodes) + internal + returns (uint256) + { return _update(self, oldLeaf, 0, siblingNodes); } diff --git a/packages/lean-imt/contracts/LeanIMT.sol b/packages/lean-imt/src/LeanIMT.sol similarity index 76% rename from packages/lean-imt/contracts/LeanIMT.sol rename to packages/lean-imt/src/LeanIMT.sol index 3c546a3..552c88e 100644 --- a/packages/lean-imt/contracts/LeanIMT.sol +++ b/packages/lean-imt/src/LeanIMT.sol @@ -14,20 +14,17 @@ library LeanIMT { return InternalLeanIMT._insertMany(self, leaves); } - function update( - LeanIMTData storage self, - uint256 oldLeaf, - uint256 newLeaf, - uint256[] calldata siblingNodes - ) public returns (uint256) { + function update(LeanIMTData storage self, uint256 oldLeaf, uint256 newLeaf, uint256[] calldata siblingNodes) + public + returns (uint256) + { return InternalLeanIMT._update(self, oldLeaf, newLeaf, siblingNodes); } - function remove( - LeanIMTData storage self, - uint256 oldLeaf, - uint256[] calldata siblingNodes - ) public returns (uint256) { + function remove(LeanIMTData storage self, uint256 oldLeaf, uint256[] calldata siblingNodes) + public + returns (uint256) + { return InternalLeanIMT._remove(self, oldLeaf, siblingNodes); } diff --git a/packages/lean-imt/tasks/deploy-imt-test.ts b/packages/lean-imt/tasks/deploy-imt-test.ts deleted file mode 100644 index d9dc6f7..0000000 --- a/packages/lean-imt/tasks/deploy-imt-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { task, types } from "hardhat/config" - -task("deploy:imt-test", "Deploy an IMT contract for testing a library") - .addParam("library", "The name of the library", undefined, types.string) - .addOptionalParam("logs", "Print the logs", true, types.boolean) - .addOptionalParam("arity", "The arity of the tree", 2, types.int) - .setAction(async ({ logs, library: libraryName, arity }, { ethers }): Promise => { - const PoseidonFactory = await ethers.getContractFactory(`PoseidonT${arity + 1}`) - - const poseidon = await PoseidonFactory.deploy() - const poseidonAddress = await poseidon.getAddress() - - if (logs) { - console.info(`PoseidonT${arity + 1} library has been deployed to: ${poseidonAddress}`) - } - - const LibraryFactory = await ethers.getContractFactory(libraryName, { - libraries: { - [`PoseidonT${arity + 1}`]: poseidonAddress - } - }) - - const library = await LibraryFactory.deploy() - const libraryAddress = await library.getAddress() - - if (logs) { - console.info(`${libraryName} library has been deployed to: ${libraryAddress}`) - } - - const ContractFactory = await ethers.getContractFactory(`${libraryName}Test`, { - libraries: { - [libraryName]: libraryAddress - } - }) - - const contract = await ContractFactory.deploy() - const contractAddress = await contract.getAddress() - - if (logs) { - console.info(`${libraryName}Test contract has been deployed to: ${contractAddress}`) - } - - return { library, contract } - }) diff --git a/packages/lean-imt/test/LeanIMT.t.sol b/packages/lean-imt/test/LeanIMT.t.sol new file mode 100644 index 0000000..d01e847 --- /dev/null +++ b/packages/lean-imt/test/LeanIMT.t.sol @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import "forge-std/console.sol"; +import "forge-std/Test.sol"; +import {SNARK_SCALAR_FIELD} from "lean-imt/Constants.sol"; +import "lean-imt/LeanIMT.sol"; +import { + LeafAlreadyExists, + LeafCannotBeZero, + LeafDoesNotExist, + LeafGreaterThanSnarkScalarField, + WrongSiblingNodes +} from "lean-imt/InternalLeanIMT.sol"; + +contract LeanIMTTest is Test { + using LeanIMT for LeanIMTData; + + LeanIMTData private imt; + + function boundLeaf(uint256 leaf) private pure returns (uint256) { + return bound(leaf, 1, SNARK_SCALAR_FIELD - 1); + } + + function boundLeaves(uint256[] calldata leaves) private pure returns (uint256[] memory) { + uint256[] memory boundedLeaves = new uint256[](leaves.length); + for (uint256 i = 0; i < leaves.length; i++) { + boundedLeaves[i] = boundLeaf(leaves[i]); + } + return boundedLeaves; + } + + function test_RevertIf_InsertLeafGreaterThanSnarkScalarField() public { + vm.expectRevert(LeafGreaterThanSnarkScalarField.selector); + imt.insert(SNARK_SCALAR_FIELD); + + vm.expectRevert(LeafGreaterThanSnarkScalarField.selector); + imt.insert(SNARK_SCALAR_FIELD + 1); + } + + function test_RevertIf_InsertZeroLeaf() public { + vm.expectRevert(LeafCannotBeZero.selector); + imt.insert(0); + } + + function testRevert_InsertDuplicateLeaf() public { + imt.insert(1); + vm.expectRevert(LeafAlreadyExists.selector); + imt.insert(1); + } + + function testFuzz_Insert(uint256 leaf) public { + // revert if leaf out of bound already tested above + leaf = boundLeaf(leaf); + uint256 root = imt.insert(leaf); + + assertTrue(imt.has(leaf)); + assertEq(imt.indexOf(leaf), 0); + assertEq(imt.root(), root); + assertEq(imt.size, 1); + assertEq(imt.depth, 0); + } + + function test_RevertIf_InsertManyGreaterThanSnarkField() public { + vm.expectRevert(LeafGreaterThanSnarkScalarField.selector); + uint256[] memory leaves = new uint256[](1); + leaves[0] = SNARK_SCALAR_FIELD; + + imt.insertMany(leaves); + } + + function test_RevertIf_InsertManyZeroLeaf() public { + vm.expectRevert(LeafCannotBeZero.selector); + uint256[] memory leaves = new uint256[](1); + leaves[0] = 0; + + imt.insertMany(leaves); + } + + function test_RevertIf_InsertManyDuplicateLeaf() public { + uint256[] memory leaves = new uint256[](2); + leaves[0] = 1; + leaves[1] = 1; + + vm.expectRevert(LeafAlreadyExists.selector); + imt.insertMany(leaves); + } + + function test_insertMany() public { + uint256[] memory leaves = new uint256[](3); + leaves[0] = 1; + leaves[1] = 2; + leaves[2] = 3; + + uint256 root = imt.insertMany(leaves); + + for (uint256 i = 0; i < leaves.length; i++) { + assertTrue(imt.has(leaves[i])); + assertEq(imt.indexOf(leaves[i]), i); + } + assertEq(imt.root(), root); + assertEq(imt.size, 3); + assertEq(imt.depth, 2); + } + + function test_RevertIf_UpdateNewLeafGreaterThanSnarkScalarField() public { + imt.insert(1); + vm.expectRevert(LeafGreaterThanSnarkScalarField.selector); + imt.update(1, SNARK_SCALAR_FIELD, new uint256[](0)); + + vm.expectRevert(LeafGreaterThanSnarkScalarField.selector); + imt.update(1, SNARK_SCALAR_FIELD + 1, new uint256[](0)); + } + + function test_RevertIf_UpdateNewLeafAlreadyExists() public { + imt.insert(1); + vm.expectRevert(LeafAlreadyExists.selector); + imt.update(1, 1, new uint256[](0)); + } + + function test_RevertIf_UpdateOldLeafDoesNotExist() public { + imt.insert(1); + vm.expectRevert(LeafDoesNotExist.selector); + imt.update(2, 3, new uint256[](0)); + } + + function testFuzz_Update(uint256 oldLeaf, uint256 newLeaf) public { + // all revert cases already tested above, so forcing they can't happen while still fuzzing + oldLeaf = boundLeaf(oldLeaf); + newLeaf = boundLeaf(newLeaf); + while (oldLeaf == newLeaf) { + newLeaf = boundLeaf(newLeaf + 1); + } + + imt.insert(oldLeaf); + uint256 root = imt.update(oldLeaf, newLeaf, new uint256[](0)); + + assertTrue(imt.has(newLeaf)); + assertFalse(imt.has(oldLeaf)); + assertEq(imt.indexOf(newLeaf), 0); + assertEq(imt.root(), root); + assertEq(imt.size, 1); + assertEq(imt.depth, 0); + } + + function test_FuzzRemove(uint256 leaf) public { + leaf = boundLeaf(leaf); + assertEq(imt.size, 0); + imt.insert(leaf); + uint256 root = imt.remove(leaf, new uint256[](0)); + + assertFalse(imt.has(leaf)); + assertEq(imt.root(), root); + // TODO: question: remove does not update size?? + assertFalse(imt.size == 0); + } + + function test_RevertIf_IndexOfLeafDoesNotExist() public { + vm.expectRevert(LeafDoesNotExist.selector); + imt.indexOf(1); + } +} diff --git a/packages/lean-imt/test/LeanIMT.ts b/packages/lean-imt/test/LeanIMT.ts deleted file mode 100644 index 315bd5c..0000000 --- a/packages/lean-imt/test/LeanIMT.ts +++ /dev/null @@ -1,380 +0,0 @@ -import { LeanIMT as JSLeanIMT } from "@zk-kit/lean-imt" -import { expect } from "chai" -import { run } from "hardhat" -import { poseidon2 } from "poseidon-lite" -import { LeanIMT, LeanIMTTest } from "../typechain-types" - -describe("LeanIMT", () => { - const SNARK_SCALAR_FIELD = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") - let leanIMTTest: LeanIMTTest - let leanIMT: LeanIMT - let jsLeanIMT: JSLeanIMT - - beforeEach(async () => { - const { library, contract } = await run("deploy:imt-test", { library: "LeanIMT", logs: false }) - - leanIMTTest = contract - leanIMT = library - jsLeanIMT = new JSLeanIMT((a, b) => poseidon2([a, b])) - }) - - describe("# insert", () => { - it("Should not insert a leaf if its value is >= SNARK_SCALAR_FIELD", async () => { - const transaction = leanIMTTest.insert(SNARK_SCALAR_FIELD) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafGreaterThanSnarkScalarField") - }) - - it("Should not insert a leaf if it is 0", async () => { - const leaf = 0 - - const transaction = leanIMTTest.insert(leaf) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafCannotBeZero") - }) - - it("Should insert a leaf", async () => { - jsLeanIMT.insert(BigInt(1)) - - await leanIMTTest.insert(1) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - - it("Should not insert a leaf if it was already inserted before", async () => { - await leanIMTTest.insert(1) - - const transaction = leanIMTTest.insert(1) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafAlreadyExists") - }) - - it("Should insert 10 leaves", async () => { - for (let i = 0; i < 10; i += 1) { - jsLeanIMT.insert(BigInt(i + 1)) - - await leanIMTTest.insert(i + 1) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - } - }) - }) - - describe("# insertMany", () => { - it("Should not insert a leaf if its value is >= SNARK_SCALAR_FIELD", async () => { - const transaction = leanIMTTest.insertMany([SNARK_SCALAR_FIELD]) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafGreaterThanSnarkScalarField") - }) - - it("Should not insert a leaf if it is 0", async () => { - const leaf = 0 - - const transaction = leanIMTTest.insertMany([leaf]) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafCannotBeZero") - }) - it("Should not insert a leaf if it was already inserted before", async () => { - await leanIMTTest.insert(1) - - const transaction = leanIMTTest.insertMany([1]) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafAlreadyExists") - }) - it("Should insert a leaf", async () => { - jsLeanIMT.insert(BigInt(1)) - - await leanIMTTest.insertMany([1]) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - it("Should insert 10 leaves", async () => { - const elems: bigint[] = [] - for (let i = 0; i < 10; i += 1) { - elems.push(BigInt(i + 1)) - } - - jsLeanIMT.insertMany(elems) - await leanIMTTest.insertMany(elems) - - const root = await leanIMTTest.root() - expect(root).to.equal(jsLeanIMT.root) - }) - it("Should insert many leaves when the tree is not empty", async () => { - jsLeanIMT.insert(BigInt(1)) - - await leanIMTTest.insert(BigInt(1)) - - const elems: bigint[] = [] - for (let i = 1; i < 10; i += 1) { - elems.push(BigInt(i + 1)) - } - - jsLeanIMT.insertMany(elems) - await leanIMTTest.insertMany(elems) - - const root = await leanIMTTest.root() - expect(root).to.equal(jsLeanIMT.root) - }) - }) - - describe("# update", () => { - it("Should not update a leaf if the leaf does not exist", async () => { - const transaction = leanIMTTest.update(2, 1, [1, 2, 3, 4]) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafDoesNotExist") - }) - - it("Should not update a leaf if its value is >= SNARK_SCALAR_FIELD", async () => { - const transaction = leanIMTTest.update(2, SNARK_SCALAR_FIELD, [1, 2, 3, 4]) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafGreaterThanSnarkScalarField") - }) - - it("Should update a leaf if that's the only leaf in the tree", async () => { - await leanIMTTest.insert(1) - - jsLeanIMT.insert(BigInt(1)) - jsLeanIMT.update(0, BigInt(2)) - - const { siblings } = jsLeanIMT.generateProof(0) - - await leanIMTTest.update(1, 2, siblings) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - - it("Should update a leaf if there's more than 1 leaf in the tree", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - jsLeanIMT.update(0, BigInt(3)) - - const { siblings } = jsLeanIMT.generateProof(0) - - await leanIMTTest.update(1, 3, siblings) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - - it("Should not update a leaf if its index is even and the value of at least one sibling node is >= SNARK_SCALAR_FIELD", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - jsLeanIMT.update(0, BigInt(3)) - - const { siblings } = jsLeanIMT.generateProof(0) - - siblings[0] = SNARK_SCALAR_FIELD - - const transaction = leanIMTTest.update(1, 3, siblings) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if its index is odd and the value of at least one sibling node is >= SNARK_SCALAR_FIELD", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - jsLeanIMT.update(1, BigInt(3)) - - const { siblings } = jsLeanIMT.generateProof(1) - - siblings[0] = SNARK_SCALAR_FIELD - - const transaction = leanIMTTest.update(2, 3, siblings) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafGreaterThanSnarkScalarField") - }) - - it("Should not update a leaf if the siblings are wrong", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - jsLeanIMT.update(0, BigInt(3)) - - const { siblings } = jsLeanIMT.generateProof(0) - - siblings[0] = BigInt(3) - - const transaction = leanIMTTest.update(1, 3, siblings) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "WrongSiblingNodes") - }) - - it("Should update 6 leaves", async () => { - for (let i = 0; i < 6; i += 1) { - jsLeanIMT.insert(BigInt(i + 1)) - - await leanIMTTest.insert(i + 1) - } - - for (let i = 0; i < 6; i += 1) { - jsLeanIMT.update(i, BigInt(i + 7)) - - const { siblings } = jsLeanIMT.generateProof(i) - - await leanIMTTest.update(i + 1, i + 7, siblings) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - } - }) - - it("Should not update a leaf that was removed", async () => { - await leanIMTTest.insertMany([1, 2]) - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - - jsLeanIMT.update(1, BigInt(0)) - - const { siblings } = jsLeanIMT.generateProof(1) - - await leanIMTTest.remove(2, siblings) - - jsLeanIMT.update(1, BigInt(3)) - - const { siblings: newSiblings } = jsLeanIMT.generateProof(1) - - const transaction = leanIMTTest.update(0, 3, newSiblings) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafDoesNotExist") - }) - it("Should not update a leaf if the new value already exists", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - jsLeanIMT.update(0, BigInt(2)) - - const { siblings } = jsLeanIMT.generateProof(0) - - const transaction = leanIMTTest.update(1, 2, siblings) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafAlreadyExists") - }) - }) - - describe("# remove", () => { - it("Should remove a leaf", async () => { - await leanIMTTest.insert(1) - await leanIMTTest.insert(2) - await leanIMTTest.insert(3) - - jsLeanIMT.insertMany([BigInt(1), BigInt(2), BigInt(3)]) - jsLeanIMT.update(2, BigInt(0)) - - const { siblings } = jsLeanIMT.generateProof(2) - - await leanIMTTest.remove(3, siblings) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - - it("Should remove 10 leaf", async () => { - for (let i = 0; i < 10; i += 1) { - jsLeanIMT.insert(BigInt(i + 1)) - - await leanIMTTest.insert(i + 1) - } - - for (let i = 0; i < 10; i += 1) { - jsLeanIMT.update(i, BigInt(0)) - - const { siblings } = jsLeanIMT.generateProof(i) - - await leanIMTTest.remove(i + 1, siblings) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - } - }) - }) - - describe("# has", () => { - it("Should return true because the node is in the tree", async () => { - await leanIMTTest.insert(1) - - const hasLeaf = await leanIMTTest.has(1) - - expect(hasLeaf).to.equal(true) - }) - - it("Should return false because the node is not the tree", async () => { - const hasLeaf = await leanIMTTest.has(2) - - expect(hasLeaf).to.equal(false) - }) - - it("Should return false if the leaf is 0", async () => { - await leanIMTTest.insertMany([1, 2]) - jsLeanIMT.insertMany([BigInt(1), BigInt(2)]) - - jsLeanIMT.update(1, BigInt(0)) - - const { siblings } = jsLeanIMT.generateProof(1) - - await leanIMTTest.remove(2, siblings) - - const hasLeaf = await leanIMTTest.has(0) - - expect(hasLeaf).to.equal(false) - }) - }) - describe("# indexOf", () => { - it("Should return the index of a leaf", async () => { - await leanIMTTest.insert(1) - - const index = await leanIMTTest.indexOf(1) - - expect(index).to.equal(0) - }) - - it("Should return the indices of the leaves", async () => { - await leanIMTTest.insertMany([1, 2]) - - const index1 = await leanIMTTest.indexOf(1) - const index2 = await leanIMTTest.indexOf(2) - - expect(index1).to.equal(0) - expect(index2).to.equal(1) - }) - - it("Should throw a custom error if the leaf does not exist", async () => { - await leanIMTTest.insertMany([1, 2]) - - const transaction = leanIMTTest.indexOf(3) - - await expect(transaction).to.be.revertedWithCustomError(leanIMT, "LeafDoesNotExist") - }) - }) - - describe("# root", () => { - it("Should return the tree root", async () => { - jsLeanIMT.insert(BigInt(1)) - - await leanIMTTest.insert(1) - - const root = await leanIMTTest.root() - - expect(root).to.equal(jsLeanIMT.root) - }) - }) -}) diff --git a/packages/lean-imt/tsconfig.json b/packages/lean-imt/tsconfig.json deleted file mode 100644 index 0a513ff..0000000 --- a/packages/lean-imt/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["scripts/**/*", "tasks/**/*", "test/**/*", "typechain-types/**/*"], - "files": ["hardhat.config.ts"] -} diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..081e652 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,5 @@ +excubiae/=packages/excubiae/src +imt/=packages/imt/src +lazy-imt/=packages/lazy-imt/src +lazytower/=packages/lazytower/src +lean-imt/=packages/lean-imt/src diff --git a/scripts/publish-for-forge.sh b/scripts/publish-for-forge.sh new file mode 100755 index 0000000..e810104 --- /dev/null +++ b/scripts/publish-for-forge.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env sh + +set -eu + +clean() { + # TODO: use regex instead + find . -maxdepth 1 \ + ! -path . \ + ! -path ./.git \ + ! -path "./.git/*" \ + ! -path ./packages \ + ! -path ./LICENSE \ + -exec rm -rf {} + +} + +main() { + git fetch origin main + latest_main_commit_msg=$(git log origin/main -1 --pretty=%B) + + git checkout -b forge + git fetch origin forge + git pull origin forge --rebase || true + + clean + + # http://mywiki.wooledge.org/BashFAQ/001 + # https://github.com/koalaman/shellcheck/wiki/SC2012 + find packages -maxdepth 1 -mindepth 1 -printf '%P\n' | while read -r pkg; do + mkdir "$pkg" + mv "packages/$pkg/src" "$pkg" + mv "packages/$pkg/README.md" "$pkg" + git add "$pkg" + done + + rm -fr "packages" + + git commit -am "$latest_main_commit_msg" + git push origin forge +} + +main diff --git a/scripts/remove-stable-version-field.sh b/scripts/remove-stable-version-field.sh new file mode 100755 index 0000000..dd85062 --- /dev/null +++ b/scripts/remove-stable-version-field.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -eu + +remove_stable_version() { + package_json_path="$1" + sed -i '/^[[:space:]]*"stableVersion":/d' "$package_json_path" +} + +main() { + package_json_path="packages/$1/package.json" + remove_stable_version "$package_json_path" +} + +main "$@" diff --git a/scripts/remove-stable-version-field.ts b/scripts/remove-stable-version-field.ts deleted file mode 100644 index c34fe73..0000000 --- a/scripts/remove-stable-version-field.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { existsSync, readFileSync, writeFileSync } from "node:fs" - -async function main() { - const projectDirectory = `packages/${process.argv[2]}` - - let filePath = `${projectDirectory}/package.json` - - if (existsSync(`${projectDirectory}/contracts/package.json`)) { - filePath = `${projectDirectory}/contracts/package.json` - } - - const content = JSON.parse(readFileSync(filePath, "utf8")) - - if (content.stableVersion) { - delete content.stableVersion - } - - writeFileSync(filePath, JSON.stringify(content, null, 4), "utf8") -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/version-bump.sh b/scripts/version-bump.sh new file mode 100755 index 0000000..97f9e27 --- /dev/null +++ b/scripts/version-bump.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env sh + +set -eu + +ORANGE='\033[0;33m' +RED='\033[0;31m' +RESET='\033[0m' + +log() { + printf "%b\n" "$1" +} + +red() { + log "${RED}$1${RESET}" +} + +usage() { + red "Error: Missing arguments" + log "Usage: $0 ${ORANGE}package$RESET ${ORANGE}version$RESET" + exit 1 +} + +main() { + [ "$#" -ne 2 ] && usage + + pkg="$1" + version="$2" + + yarn workspace @zk-kit/"$pkg".sol version "$version" + scripts/remove-stable-version-field.sh "$pkg" + yarn format:write + NO_HOOK=1 git commit -am "chore($pkg): v$version" + git tag "$pkg.sol-v$version" +} + +main "$@" diff --git a/yarn.lock b/yarn.lock index 43fa6ce..8a97631 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,46 +5,39 @@ __metadata: version: 8 cacheKey: 10 -"@adraffy/ens-normalize@npm:1.10.1": - version: 1.10.1 - resolution: "@adraffy/ens-normalize@npm:1.10.1" - checksum: 10/4cb938c4abb88a346d50cb0ea44243ab3574330c81d4f5aaaf9dfee584b96189d0faa404de0fcbef5a1b73909ea4ebc3e63d84bd23f9949e5c8d4085207a5091 - languageName: node - linkType: hard - "@antfu/utils@npm:^0.7.7": - version: 0.7.8 - resolution: "@antfu/utils@npm:0.7.8" - checksum: 10/9efffb78a9683add047b0e2be96a059c3a29baee1565a2d127500bc433def25a0375c1e84c9479cbb3f1dcec797b2c1f0a24e5d85c830ea64f9a8a6a6ca5b9c3 + version: 0.7.10 + resolution: "@antfu/utils@npm:0.7.10" + checksum: 10/c8c2797aeab3e88f0095dea5736d2f16137a7213195e568246792b2cceecb184234f018346dc07c252c62e4d9085c09ce6bd180da833266cafa65133fb03e075 languageName: node linkType: hard "@babel/code-frame@npm:^7.0.0": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" dependencies: - "@babel/highlight": "npm:^7.24.2" + "@babel/highlight": "npm:^7.24.7" picocolors: "npm:^1.0.0" - checksum: 10/7db8f5b36ffa3f47a37f58f61e3d130b9ecad21961f3eede7e2a4ac2c7e4a5efb6e9d03a810c669bc986096831b6c0dfc2c3082673d93351b82359c1b03e0590 + checksum: 10/4812e94885ba7e3213d49583a155fdffb05292330f0a9b2c41b49288da70cf3c746a3fda0bf1074041a6d741c33f8d7be24be5e96f41ef77395eeddc5c9ff624 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.5": - version: 7.24.5 - resolution: "@babel/helper-validator-identifier@npm:7.24.5" - checksum: 10/38aaf6a64a0ea2e84766165b461deda3c24fd2173dff18419a2cc9e1ea1d3e709039aee94db29433a07011492717c80900a5eb564cdca7d137757c3c69e26898 +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 10/86875063f57361471b531dbc2ea10bbf5406e12b06d249b03827d361db4cad2388c6f00936bcd9dc86479f7e2c69ea21412c2228d4b3672588b754b70a449d4b languageName: node linkType: hard -"@babel/highlight@npm:^7.24.2": - version: 7.24.5 - resolution: "@babel/highlight@npm:7.24.5" +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.5" + "@babel/helper-validator-identifier": "npm:^7.24.7" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10/afde0403154ad69ecd58a98903058e776760444bf4d0363fb740a8596bc6278b72c5226637c4f6b3674d70acb1665207fe2fcecfe93a74f2f4ab033e89fd7e8c + checksum: 10/69b73f38cdd4f881b09b939a711e76646da34f4834f4ce141d7a49a6bb1926eab1c594148970a8aa9360398dff800f63aade4e81fafdd7c8d8a8489ea93bfec1 languageName: node linkType: hard @@ -242,15 +235,6 @@ __metadata: languageName: node linkType: hard -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": "npm:0.3.9" - checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff - languageName: node - linkType: hard - "@ethereum-attestation-service/eas-contracts@npm:1.7.1": version: 1.7.1 resolution: "@ethereum-attestation-service/eas-contracts@npm:1.7.1" @@ -260,27 +244,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/rlp@npm:^4.0.1": - version: 4.0.1 - resolution: "@ethereumjs/rlp@npm:4.0.1" - bin: - rlp: bin/rlp - checksum: 10/bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 - languageName: node - linkType: hard - -"@ethereumjs/util@npm:^8.1.0": - version: 8.1.0 - resolution: "@ethereumjs/util@npm:8.1.0" - dependencies: - "@ethereumjs/rlp": "npm:^4.0.1" - ethereum-cryptography: "npm:^2.0.0" - micro-ftch: "npm:^0.3.1" - checksum: 10/cc35338932e49b15e54ca6e548b32a1f48eed7d7e1d34ee743e4d3600dd616668bd50f70139e86c5c35f55aac35fba3b6cc4e6f679cf650aeba66bf93016200c - languageName: node - linkType: hard - -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:^5.1.2": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -297,7 +261,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": +"@ethersproject/abstract-provider@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abstract-provider@npm:5.7.0" dependencies: @@ -312,7 +276,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": +"@ethersproject/abstract-signer@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abstract-signer@npm:5.7.0" dependencies: @@ -325,7 +289,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": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" dependencies: @@ -338,7 +302,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": +"@ethersproject/base64@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/base64@npm:5.7.0" dependencies: @@ -347,17 +311,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/basex@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - checksum: 10/840e333e109bff2fcf8d91dcfd45fa951835844ef0e1ba710037e87291c7b5f3c189ba86f6cee2ca7de2ede5b7d59fbb930346607695855bee20d2f9f63371ef - languageName: node - linkType: hard - -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": +"@ethersproject/bignumber@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bignumber@npm:5.7.0" dependencies: @@ -368,7 +322,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": +"@ethersproject/bytes@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: @@ -377,7 +331,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": +"@ethersproject/constants@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/constants@npm:5.7.0" dependencies: @@ -386,25 +340,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/contracts@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/contracts@npm:5.7.0" - dependencies: - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - checksum: 10/5df66179af242faabea287a83fd2f8f303a4244dc87a6ff802e1e3b643f091451295c8e3d088c7739970b7915a16a581c192d4e007d848f1fdf3cc9e49010053 - languageName: node - linkType: hard - -"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": +"@ethersproject/hash@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/hash@npm:5.7.0" dependencies: @@ -421,48 +357,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/hdnode@npm:5.7.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/basex": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/pbkdf2": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/signing-key": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/wordlists": "npm:^5.7.0" - checksum: 10/2fbe6278c324235afaa88baa5dea24d8674c72b14ad037fe2096134d41025977f410b04fd146e333a1b6cac9482e9de62d6375d1705fd42667543f2d0eb66655 - languageName: node - linkType: hard - -"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/json-wallets@npm:5.7.0" - dependencies: - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hdnode": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/pbkdf2": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - aes-js: "npm:3.0.0" - scrypt-js: "npm:3.0.1" - checksum: 10/4a1ef0912ffc8d18c392ae4e292948d86bffd715fe3dd3e66d1cd21f6c9267aeadad4da84261db853327f97cdfd765a377f9a87e39d4c6749223a69226faf0a1 - languageName: node - linkType: hard - -"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": +"@ethersproject/keccak256@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/keccak256@npm:5.7.0" dependencies: @@ -472,14 +367,14 @@ __metadata: languageName: node linkType: hard -"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": +"@ethersproject/logger@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/logger@npm:5.7.0" checksum: 10/683a939f467ae7510deedc23d7611d0932c3046137f5ffb92ba1e3c8cd9cf2fbbaa676b660c248441a0fa9143783137c46d6e6d17d676188dd5a6ef0b72dd091 languageName: node linkType: hard -"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": +"@ethersproject/networks@npm:^5.7.0": version: 5.7.1 resolution: "@ethersproject/networks@npm:5.7.1" dependencies: @@ -488,17 +383,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/pbkdf2@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - checksum: 10/dea7ba747805e24b81dfb99e695eb329509bf5cad1a42e48475ade28e060e567458a3d5bf930f302691bded733fd3fa364f0c7adce920f9f05a5ef8c13267aaa - languageName: node - linkType: hard - -"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": +"@ethersproject/properties@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/properties@npm:5.7.0" dependencies: @@ -507,45 +392,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2": - version: 5.7.2 - resolution: "@ethersproject/providers@npm:5.7.2" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/base64": "npm:^5.7.0" - "@ethersproject/basex": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/networks": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/rlp": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/web": "npm:^5.7.0" - bech32: "npm:1.1.4" - ws: "npm:7.4.6" - checksum: 10/8534a1896e61b9f0b66427a639df64a5fe76d0c08ec59b9f0cc64fdd1d0cc28d9fc3312838ae8d7817c8f5e2e76b7f228b689bc33d1cbb8e1b9517d4c4f678d8 - languageName: node - linkType: hard - -"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/random@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/c23ec447998ce1147651bd58816db4d12dbeb404f66a03d14a13e1edb439879bab18528e1fc46b931502903ac7b1c08ea61d6a86e621a6e060fa63d41aeed3ac - languageName: node - linkType: hard - -"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": +"@ethersproject/rlp@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/rlp@npm:5.7.0" dependencies: @@ -555,18 +402,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/sha2@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - hash.js: "npm:1.1.7" - checksum: 10/09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc - languageName: node - linkType: hard - -"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": +"@ethersproject/signing-key@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/signing-key@npm:5.7.0" dependencies: @@ -580,21 +416,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/solidity@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/solidity@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/sha2": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 - languageName: node - linkType: hard - -"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": +"@ethersproject/strings@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/strings@npm:5.7.0" dependencies: @@ -605,7 +427,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": +"@ethersproject/transactions@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/transactions@npm:5.7.0" dependencies: @@ -622,41 +444,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/units@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/units@npm:5.7.0" - dependencies: - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/constants": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - checksum: 10/304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc - languageName: node - linkType: hard - -"@ethersproject/wallet@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wallet@npm:5.7.0" - dependencies: - "@ethersproject/abstract-provider": "npm:^5.7.0" - "@ethersproject/abstract-signer": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/hdnode": "npm:^5.7.0" - "@ethersproject/json-wallets": "npm:^5.7.0" - "@ethersproject/keccak256": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/random": "npm:^5.7.0" - "@ethersproject/signing-key": "npm:^5.7.0" - "@ethersproject/transactions": "npm:^5.7.0" - "@ethersproject/wordlists": "npm:^5.7.0" - checksum: 10/340f8e5c77c6c47c4d1596c200d97c53c1d4b4eb54d9166d0f2a114cb81685e7689255b0627e917fbcdc29cb54c4bd1f1a9909f3096ef9dff9acc0b24972f1c1 - languageName: node - linkType: hard - -"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": +"@ethersproject/web@npm:^5.7.0": version: 5.7.1 resolution: "@ethersproject/web@npm:5.7.1" dependencies: @@ -669,19 +457,6 @@ __metadata: languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wordlists@npm:5.7.0" - dependencies: - "@ethersproject/bytes": "npm:^5.7.0" - "@ethersproject/hash": "npm:^5.7.0" - "@ethersproject/logger": "npm:^5.7.0" - "@ethersproject/properties": "npm:^5.7.0" - "@ethersproject/strings": "npm:^5.7.0" - checksum: 10/737fca67ad743a32020f50f5b9e147e5683cfba2692367c1124a5a5538be78515865257b426ec9141daac91a70295e5e21bef7a193b79fe745f1be378562ccaa - languageName: node - linkType: hard - "@fastify/busboy@npm:^2.0.0": version: 2.1.1 resolution: "@fastify/busboy@npm:2.1.1" @@ -703,30 +478,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 10/89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.0.3" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff - languageName: node - linkType: hard - "@metamask/eth-sig-util@npm:^4.0.0": version: 4.0.1 resolution: "@metamask/eth-sig-util@npm:4.0.1" @@ -740,24 +491,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" - dependencies: - "@noble/hashes": "npm:1.3.2" - checksum: 10/94e02e9571a9fd42a3263362451849d2f54405cb3ce9fa7c45bc6b9b36dcd7d1d20e2e1e14cfded24937a13d82f1e60eefc4d7a14982ce0bc219a9fc0f51d1f9 - languageName: node - linkType: hard - -"@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": - version: 1.3.0 - resolution: "@noble/curves@npm:1.3.0" - dependencies: - "@noble/hashes": "npm:1.3.3" - checksum: 10/f3cbdd1af00179e30146eac5539e6df290228fb857a7a8ba36d1a772cbe59288a2ca83d06f175d3446ef00db3a80d7fd8b8347f7de9c2d4d5bf3865d8bb78252 - languageName: node - linkType: hard - "@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": version: 1.2.0 resolution: "@noble/hashes@npm:1.2.0" @@ -765,27 +498,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: 10/685f59d2d44d88e738114b71011d343a9f7dce9dfb0a121f1489132f9247baa60bc985e5ec6f3213d114fbd1e1168e7294644e46cbd0ce2eba37994f28eeb51b - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.3, @noble/hashes@npm:~1.3.2": - version: 1.3.3 - resolution: "@noble/hashes@npm:1.3.3" - checksum: 10/1025ddde4d24630e95c0818e63d2d54ee131b980fe113312d17ed7468bc18f54486ac86c907685759f8a7e13c2f9b9e83ec7b67d1cc20836f36b5e4a65bb102d - languageName: node - linkType: hard - -"@noble/hashes@npm:^1.4.0": - version: 1.4.0 - resolution: "@noble/hashes@npm:1.4.0" - checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 - languageName: node - linkType: hard - "@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": version: 1.7.1 resolution: "@noble/secp256k1@npm:1.7.1" @@ -793,33 +505,6 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 - languageName: node - linkType: hard - "@nomicfoundation/edr-darwin-arm64@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.3.8" @@ -934,182 +619,71 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.3": - version: 2.0.6 - resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.6" - dependencies: - "@types/chai-as-promised": "npm:^7.1.3" - chai-as-promised: "npm:^7.1.1" - deep-eql: "npm:^4.0.1" - ordinal: "npm:^1.0.3" - peerDependencies: - "@nomicfoundation/hardhat-ethers": ^3.0.0 - chai: ^4.2.0 - ethers: ^6.1.0 - hardhat: ^2.9.4 - checksum: 10/7ab908eddd51f63cda7709ec36beab9a7876d570f0708b68b8541160eeb1f54b8c9665e136661c5ee0d5d06060e909605341fff3f2c7b92ee671f951846bf203 - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-ethers@npm:^3.0.0": - version: 3.0.6 - resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.6" - dependencies: - debug: "npm:^4.1.1" - lodash.isequal: "npm:^4.5.0" - peerDependencies: - ethers: ^6.1.0 - hardhat: ^2.0.0 - checksum: 10/2a8dffeeacd91d0f65315f81b01991533135b5a4fec36642710dc473f7b604fe30281be386461167c5b5da79aeda1fed8395cdb460c8e722ae4d788e2a25efd6 - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-network-helpers@npm:^1.0.0": - version: 1.0.10 - resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" - dependencies: - ethereumjs-util: "npm:^7.1.4" - peerDependencies: - hardhat: ^2.9.5 - checksum: 10/38953777f69fea6c82a6df0f5de5c52afd797aae9d9d38d710dc19a4a0ef6bba2b4320db6050e04e94fb4bb0ce4cf81a2911a4da5097e0ca6fc1017ca77c3bb9 - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-toolbox@npm:^4.0.0": - version: 4.0.0 - resolution: "@nomicfoundation/hardhat-toolbox@npm:4.0.0" - peerDependencies: - "@nomicfoundation/hardhat-chai-matchers": ^2.0.0 - "@nomicfoundation/hardhat-ethers": ^3.0.0 - "@nomicfoundation/hardhat-network-helpers": ^1.0.0 - "@nomicfoundation/hardhat-verify": ^2.0.0 - "@typechain/ethers-v6": ^0.5.0 - "@typechain/hardhat": ^9.0.0 - "@types/chai": ^4.2.0 - "@types/mocha": ">=9.1.0" - "@types/node": ">=16.0.0" - chai: ^4.2.0 - ethers: ^6.4.0 - hardhat: ^2.11.0 - hardhat-gas-reporter: ^1.0.8 - solidity-coverage: ^0.8.1 - ts-node: ">=8.0.0" - typechain: ^8.3.0 - typescript: ">=4.5.0" - checksum: 10/a563cb50bd86a740b47864398277f21d6ee89c16737c849265b868381025f412fddbab579ff592ac4e9feddd807b9f72435f72a93766a9a153d6c538844b43a7 - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-verify@npm:^2.0.0": - version: 2.0.7 - resolution: "@nomicfoundation/hardhat-verify@npm:2.0.7" - dependencies: - "@ethersproject/abi": "npm:^5.1.2" - "@ethersproject/address": "npm:^5.0.2" - cbor: "npm:^8.1.0" - chalk: "npm:^2.4.2" - debug: "npm:^4.1.1" - lodash.clonedeep: "npm:^4.5.0" - semver: "npm:^6.3.0" - table: "npm:^6.8.0" - undici: "npm:^5.14.0" - peerDependencies: - hardhat: ^2.0.4 - checksum: 10/5ee492990b51a75a4599e29dcba9d72a6da72ebc0d470cae2ac7c7899bb6f0dc7d75238352537e7bdf825fb535c155d523d3f33f10b7830fbb0c9bebd1580066 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1" - conditions: os=linux & cpu=arm64 & libc=glibc +"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.2" + checksum: 10/cf241ad2577741ccaaf0e5f723409c3d6e005d46f7a6eeceff17dcdbef1bc3bf603f859b23f3adb827a7e221f55fec781efd6153b52c05e3a85ba7d9fa5121c0 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1" - conditions: os=linux & cpu=arm64 & libc=musl +"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.2" + checksum: 10/ff85471f3c0a6463896b1da1d433c174bd1b5f09976a9f678ab063baabe883c4f7fdaadc69d46050bf9c50b596b0f1f38d05e689e703386644a533350a2439f0 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1" - conditions: os=linux & cpu=x64 & libc=glibc +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.2" + checksum: 10/e0e0a8b7b5e81f002fd4e775bcb5035564c08b9c19cc2a99011d0ae691ec22278df343d054d76b9e2eff32b552defa3c63a6f9038996269e8f5b30ea9e07cb15 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1" - conditions: os=linux & cpu=x64 & libc=musl +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.2" + checksum: 10/1e8371db027c379fc9c3470cfdfe0913b32371317052c082b3c1338a569f1171f243d5df999bc5416799c342dda62145dcbce21c8d56eb7033bb31c470af5418 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1" - conditions: os=win32 & cpu=arm64 +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.2" + checksum: 10/63e9703975b784ad1ff64a44415ae4ab8fef64b776b7235d5e9bcf756cd636cf95e305b74d14072ffb541f5605151933476784f1afbb1e65b081b33860e9fcde languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1" - conditions: os=win32 & cpu=ia32 +"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.2" + checksum: 10/4c51615931ba8bd2ce144489f91fc0f1872def8f283253de50e6598945305f0b2655788ca03974e696046755c7db763c9457609908384ee91e649ee1899e4457 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1" - conditions: os=win32 & cpu=x64 +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.2" + checksum: 10/1a645168510776e469245e61e0139d6509632ba608806b78545b026725e423752987cd3f30b5924893260b9bf6fa106db1e5b69bf77e7e7133d1c3bef0fd1ffa languageName: node linkType: hard "@nomicfoundation/solidity-analyzer@npm:^0.1.0": - version: 0.1.1 - resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.1" - dependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "npm:0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "npm:0.1.1" + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.2" + dependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "npm:0.1.2" dependenciesMeta: "@nomicfoundation/solidity-analyzer-darwin-arm64": optional: true "@nomicfoundation/solidity-analyzer-darwin-x64": optional: true - "@nomicfoundation/solidity-analyzer-freebsd-x64": - optional: true "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": optional: true "@nomicfoundation/solidity-analyzer-linux-arm64-musl": @@ -1118,13 +692,9 @@ __metadata: optional: true "@nomicfoundation/solidity-analyzer-linux-x64-musl": optional: true - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": - optional: true - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": - optional: true "@nomicfoundation/solidity-analyzer-win32-x64-msvc": optional: true - checksum: 10/a3b3b557f911791b26a352d4e11abf5cbac427de33fda7d70fda043f1994a7f63f542c1752e6415a82c5452625470ba4fbf040e7d87dddd1aa3366e79b3dc2c6 + checksum: 10/e86f4c82420e44b22bdf9419c944c0e64f199c71dd539e350dc80ecaf0a9852068a0701a11885f2e460abb731568e5f19949ac403383a5466d12625799237c4e languageName: node linkType: hard @@ -1164,19 +734,10 @@ __metadata: languageName: node linkType: hard -"@prettier/sync@npm:^0.3.0": - version: 0.3.0 - resolution: "@prettier/sync@npm:0.3.0" - peerDependencies: - prettier: ^3.0.0 - checksum: 10/10520d2479830c18256bf2b18349a15a8964f968059f7ccaa1f6d455c133a26e6c96bd7aea7c64ef6701700e8007ad68619b16ec83391b356b5d4a741cbae504 - languageName: node - linkType: hard - -"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.4": - version: 1.1.6 - resolution: "@scure/base@npm:1.1.6" - checksum: 10/814fd1cce24f1e152751fabca2853d26aaa96ff8a9349c43d9aebc3b3d8ca88dd902966e1c289590a37f35d4c4436c6aedb1b386924b2909072045af4c3e9fe4 +"@scure/base@npm:~1.1.0": + version: 1.1.7 + resolution: "@scure/base@npm:1.1.7" + checksum: 10/fc50ffaab36cb46ff9fa4dc5052a06089ab6a6707f63d596bb34aaaec76173c9a564ac312a0b981b5e7a5349d60097b8878673c75d6cbfc4da7012b63a82099b languageName: node linkType: hard @@ -1191,17 +752,6 @@ __metadata: languageName: node linkType: hard -"@scure/bip32@npm:1.3.3": - version: 1.3.3 - resolution: "@scure/bip32@npm:1.3.3" - dependencies: - "@noble/curves": "npm:~1.3.0" - "@noble/hashes": "npm:~1.3.2" - "@scure/base": "npm:~1.1.4" - checksum: 10/4b8b75567866ff7d6b3ba154538add02d2951e9433e8dd7f0014331ac500cda5a88fe3d39b408fcc36e86b633682013f172b967af022c2e4e4ab07336801d688 - languageName: node - linkType: hard - "@scure/bip39@npm:1.1.1": version: 1.1.1 resolution: "@scure/bip39@npm:1.1.1" @@ -1212,16 +762,6 @@ __metadata: languageName: node linkType: hard -"@scure/bip39@npm:1.2.2": - version: 1.2.2 - resolution: "@scure/bip39@npm:1.2.2" - dependencies: - "@noble/hashes": "npm:~1.3.2" - "@scure/base": "npm:~1.1.4" - checksum: 10/f71aceda10a7937bf3779fd2b4c4156c95ec9813269470ddca464cb8ab610d2451b173037f4b1e6dac45414e406e7adc7b5814c51279f4474d5d38140bbee542 - languageName: node - linkType: hard - "@semaphore-protocol/contracts@npm:4.0.0-beta.16": version: 4.0.0-beta.16 resolution: "@semaphore-protocol/contracts@npm:4.0.0-beta.16" @@ -1313,94 +853,6 @@ __metadata: languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.14.0": - version: 0.14.5 - resolution: "@solidity-parser/parser@npm:0.14.5" - dependencies: - antlr4ts: "npm:^0.5.0-alpha.4" - checksum: 10/5ceb5601cf0b65cfcea86adf3efa3918cc377fff50cec361a3a0987de6c1ec79c5b5c4be8cc67df55d5a26f3243b35813a71f3d2e26f258fb38ce8158be97ea6 - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.16.0": - version: 0.16.2 - resolution: "@solidity-parser/parser@npm:0.16.2" - dependencies: - antlr4ts: "npm:^0.5.0-alpha.4" - checksum: 10/a95b0c45331623e587e938e69d49832814ab8867371bd58f9946346b99a18705ee47b98a1006c3da6dae33ec8c8c1bf7d203a4acfa1ced0bfd68632acf2cd19c - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.17.0": - version: 0.17.0 - resolution: "@solidity-parser/parser@npm:0.17.0" - checksum: 10/76de7d1268de676c101b9a41576c324c0d0b9699e3ba3d846b5e580d6cae454fd7ec088011c316ce18af1b23a1482da88768d30f0e41becfd9da90f692fb9a65 - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.18.0": - version: 0.18.0 - resolution: "@solidity-parser/parser@npm:0.18.0" - checksum: 10/3b600b584f49bd84d6d27aeeb453c49c279df49324e104bda00d12cd3b26f18cb6230ff63db6a0ba1f383868620d318b15b7417a92aa8c580099449adaa13d76 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node10@npm:1.0.11" - checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@typechain/ethers-v6@npm:^0.5.0": - version: 0.5.1 - resolution: "@typechain/ethers-v6@npm:0.5.1" - dependencies: - lodash: "npm:^4.17.15" - ts-essentials: "npm:^7.0.1" - peerDependencies: - ethers: 6.x - typechain: ^8.3.2 - typescript: ">=4.7.0" - checksum: 10/51dd8be3548fe3c061d2a5372beb9214e767e2b69f10c12424b699bba7ff409a13c4bdff2e513ef49046b51153db56489752205541be8fb1775f3b9ad884b85b - languageName: node - linkType: hard - -"@typechain/hardhat@npm:^9.0.0": - version: 9.1.0 - resolution: "@typechain/hardhat@npm:9.1.0" - dependencies: - fs-extra: "npm:^9.1.0" - peerDependencies: - "@typechain/ethers-v6": ^0.5.1 - ethers: ^6.1.0 - hardhat: ^2.9.9 - typechain: ^8.3.2 - checksum: 10/1f59d8243af020905f3cdb96125cf9fcad33bd16f919d5e07762c63e0220bccb658abf59b0ad74be784a3387c0a6b0262612fa1adeb9f6c99061a6abaa6afc53 - languageName: node - linkType: hard - "@types/bn.js@npm:^4.11.3": version: 4.11.6 resolution: "@types/bn.js@npm:4.11.6" @@ -1419,50 +871,6 @@ __metadata: languageName: node linkType: hard -"@types/chai-as-promised@npm:^7.1.3": - version: 7.1.8 - resolution: "@types/chai-as-promised@npm:7.1.8" - dependencies: - "@types/chai": "npm:*" - checksum: 10/88e2d42f14d1de19ba1c7b5c35f263fef37d3ad241c71f5eb59b10763706f3902f4131b93854c9c6ed520081c7e36be555849f202418357f905bea71178b7d02 - languageName: node - linkType: hard - -"@types/chai@npm:*, @types/chai@npm:^4.2.0": - version: 4.3.16 - resolution: "@types/chai@npm:4.3.16" - checksum: 10/f84a9049a7f13284f7237236872ed4afce5045dd6ea3926c8b0ac995490f5a524b247b2e70fcd3ebc85832201349a8f026bd0c336b90b5baca9eed0c7a4dbd3f - languageName: node - linkType: hard - -"@types/concat-stream@npm:^1.6.0": - version: 1.6.1 - resolution: "@types/concat-stream@npm:1.6.1" - dependencies: - "@types/node": "npm:*" - checksum: 10/7d211e74331affd3578b5469244f5cef84a93775f38332adb3ef12413559a23862bc682c6873d0a404b01c9d5d5f7d3ae091fe835b435b633eb420e3055b3e56 - languageName: node - linkType: hard - -"@types/form-data@npm:0.0.33": - version: 0.0.33 - resolution: "@types/form-data@npm:0.0.33" - dependencies: - "@types/node": "npm:*" - checksum: 10/f0c7437e9dd7b348cf7de772bf9c5ad810ecaec767b9199cfc600f4929d600212b52d1acd5a1c674e1ceec5e063cb4d9ce96c8e479aea8dacd56371e04aab836 - languageName: node - linkType: hard - -"@types/glob@npm:^7.1.1, @types/glob@npm:^7.2.0": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: 10/6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 - languageName: node - linkType: hard - "@types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" @@ -1470,13 +878,6 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 - languageName: node - linkType: hard - "@types/minimist@npm:^1.2.0": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" @@ -1484,40 +885,12 @@ __metadata: languageName: node linkType: hard -"@types/mocha@npm:^10.0.6": - version: 10.0.6 - resolution: "@types/mocha@npm:10.0.6" - checksum: 10/fc73626e81e89c32d06b7ff9b72c4177b46d579cdd932f796614adc026852d84cb849d743473ba572cb4d9ea6d8c04e3749552d326c26495ec1c4b46e6e0a0c0 - languageName: node - linkType: hard - -"@types/node@npm:*, @types/node@npm:^20, @types/node@npm:^20.10.7": - version: 20.12.12 - resolution: "@types/node@npm:20.12.12" +"@types/node@npm:*": + version: 20.14.10 + resolution: "@types/node@npm:20.14.10" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/e3945da0a3017bdc1f88f15bdfb823f526b2a717bd58d4640082d6eb0bd2794b5c99bfb914b9e9324ec116dce36066990353ed1c777e8a7b0641f772575793c4 - languageName: node - linkType: hard - -"@types/node@npm:18.15.13": - version: 18.15.13 - resolution: "@types/node@npm:18.15.13" - checksum: 10/b9bbe923573797ef7c5fd2641a6793489e25d9369c32aeadcaa5c7c175c85b42eb12d6fe173f6781ab6f42eaa1ebd9576a419eeaa2a1ec810094adb8adaa9a54 - languageName: node - linkType: hard - -"@types/node@npm:^10.0.3": - version: 10.17.60 - resolution: "@types/node@npm:10.17.60" - checksum: 10/f9161493b3284b1d41d5d594c2768625acdd9e33f992f71ccde47861916e662e2ae438d2cc5f1b285053391a31b52a7564ecedc22d485610d236bfad9c7e6a1c - languageName: node - linkType: hard - -"@types/node@npm:^8.0.0": - version: 8.10.66 - resolution: "@types/node@npm:8.10.66" - checksum: 10/49a93cbeeca74e247970b5c2130abe8204587b6d3c5ec259543e7511234e5fa340341668155807ade7a86c22dab1ec8ee18c0ac745e4d54679de1b2dabd99363 + checksum: 10/672892cf94d0d95cf052f11271990686a0fd204cd1e5fe7a4ef240e5315e06711765dc47b9ec98627d3adac18b8c92bb7e2d8db21d18faa20bc3e3203a143e79 languageName: node linkType: hard @@ -1537,20 +910,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.1": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 10/cda84c19acc3bf327545b1ce71114a7d08efbd67b5030b9e8277b347fa57b05178045f70debe1d363ff7efdae62f237260713aafc2d7217e06fc99b048a88497 - languageName: node - linkType: hard - -"@types/qs@npm:^6.2.31": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 10/97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 - languageName: node - linkType: hard - "@types/secp256k1@npm:^4.0.1": version: 4.0.6 resolution: "@types/secp256k1@npm:4.0.6" @@ -1560,9 +919,9 @@ __metadata: languageName: node linkType: hard -"@zk-kit/excubiae@workspace:packages/excubiae/contracts": +"@zk-kit/excubiae@workspace:packages/excubiae": version: 0.0.0-use.local - resolution: "@zk-kit/excubiae@workspace:packages/excubiae/contracts" + resolution: "@zk-kit/excubiae@workspace:packages/excubiae" dependencies: "@ethereum-attestation-service/eas-contracts": "npm:1.7.1" "@openzeppelin/contracts": "npm:5.0.2" @@ -1570,65 +929,38 @@ __metadata: languageName: unknown linkType: soft -"@zk-kit/imt.sol@workspace:packages/imt/contracts": +"@zk-kit/imt.sol@workspace:packages/imt": version: 0.0.0-use.local - resolution: "@zk-kit/imt.sol@workspace:packages/imt/contracts" + resolution: "@zk-kit/imt.sol@workspace:packages/imt" dependencies: poseidon-solidity: "npm:0.0.5" languageName: unknown linkType: soft -"@zk-kit/imt@npm:^2.0.0-beta.5": - version: 2.0.0-beta.5 - resolution: "@zk-kit/imt@npm:2.0.0-beta.5" - dependencies: - "@zk-kit/utils": "npm:1.0.0" - checksum: 10/666a84ea2be5893c9bd0e1cee487a3896304948ed08f9033fd54fabda0961ec93b152a23fd90d6b8504b4dfff2581c68e1310022adac38f4a3a53846e0e149c0 - languageName: node - linkType: hard - -"@zk-kit/lazy-imt.sol@workspace:packages/lazy-imt/contracts": +"@zk-kit/lazy-imt.sol@workspace:packages/lazy-imt": version: 0.0.0-use.local - resolution: "@zk-kit/lazy-imt.sol@workspace:packages/lazy-imt/contracts" + resolution: "@zk-kit/lazy-imt.sol@workspace:packages/lazy-imt" dependencies: poseidon-solidity: "npm:0.0.5" languageName: unknown linkType: soft -"@zk-kit/lazytower.sol@workspace:packages/lazytower/contracts": +"@zk-kit/lazytower.sol@workspace:packages/lazytower": version: 0.0.0-use.local - resolution: "@zk-kit/lazytower.sol@workspace:packages/lazytower/contracts" + resolution: "@zk-kit/lazytower.sol@workspace:packages/lazytower" dependencies: poseidon-solidity: "npm:0.0.5" languageName: unknown linkType: soft -"@zk-kit/lean-imt.sol@npm:2.0.0, @zk-kit/lean-imt.sol@workspace:packages/lean-imt/contracts": +"@zk-kit/lean-imt.sol@npm:2.0.0, @zk-kit/lean-imt.sol@workspace:packages/lean-imt": version: 0.0.0-use.local - resolution: "@zk-kit/lean-imt.sol@workspace:packages/lean-imt/contracts" + resolution: "@zk-kit/lean-imt.sol@workspace:packages/lean-imt" dependencies: poseidon-solidity: "npm:0.0.5" languageName: unknown linkType: soft -"@zk-kit/lean-imt@npm:^2.0.1": - version: 2.0.1 - resolution: "@zk-kit/lean-imt@npm:2.0.1" - dependencies: - "@zk-kit/utils": "npm:1.0.0" - checksum: 10/33d03a20c3ce6270036d4cc0a96100b4f6e17f373688595937d2a0863883562b648a768c11ab938fd83ed65d7a70b542db647e3d9e0b5e050c02efc5df0543ce - languageName: node - linkType: hard - -"@zk-kit/utils@npm:1.0.0": - version: 1.0.0 - resolution: "@zk-kit/utils@npm:1.0.0" - dependencies: - buffer: "npm:^6.0.3" - checksum: 10/a471025ca4c69a825bebf2c68a0d83c55c345c8843f28eeb958f1e2aa549aaa982939c1d6d819dda337601163064f382e450d09103ba4d9a0525281a0a23696b - languageName: node - linkType: hard - "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -1641,20 +973,6 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 - languageName: node - linkType: hard - -"abbrev@npm:1.0.x": - version: 1.0.9 - resolution: "abbrev@npm:1.0.9" - checksum: 10/5ca5ac34c39d3ae15a90ce5570309e25c0e72d3947bdf95c10a1957f83609bf42831cb4b746d3d96b2a85a52b290832797b8a63b27449f47925b25ca86b78591 - languageName: node - linkType: hard - "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -1662,19 +980,12 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 10/57dbe2fd8cf744f562431775741c5c087196cd7a65ce4ccb3f3981cdfad25cd24ad2bad404997b88464ac01e789a0a61e5e355b2a84876f13deef39fb39686ca - languageName: node - linkType: hard - -"acorn@npm:^8.11.3, acorn@npm:^8.4.1": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.11.3": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" bin: acorn: bin/acorn - checksum: 10/b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + checksum: 10/d08c2d122bba32d0861e0aa840b2ee25946c286d5dc5990abca991baf8cdbfbe199b05aacb221b979411a2fea36f83e26b5ac4f6b4e0ce49038c62316c1848f0 languageName: node linkType: hard @@ -1685,20 +996,6 @@ __metadata: languageName: node linkType: hard -"aes-js@npm:3.0.0": - version: 3.0.0 - resolution: "aes-js@npm:3.0.0" - checksum: 10/1b3772e5ba74abdccb6c6b99bf7f50b49057b38c0db1612b46c7024414f16e65ba7f1643b2d6e38490b1870bdf3ba1b87b35e2c831fd3fdaeff015f08aad19d1 - languageName: node - linkType: hard - -"aes-js@npm:4.0.0-beta.5": - version: 4.0.0-beta.5 - resolution: "aes-js@npm:4.0.0-beta.5" - checksum: 10/8f745da2e8fb38e91297a8ec13c2febe3219f8383303cd4ed4660ca67190242ccfd5fdc2f0d1642fd1ea934818fb871cd4cc28d3f28e812e3dc6c3d0f1f97c24 - languageName: node - linkType: hard - "agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -1727,34 +1024,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.6": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10/48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c - languageName: node - linkType: hard - -"ajv@npm:^8.0.1, ajv@npm:^8.11.0": - version: 8.13.0 - resolution: "ajv@npm:8.13.0" +"ajv@npm:^8.11.0": + version: 8.16.0 + resolution: "ajv@npm:8.16.0" dependencies: fast-deep-equal: "npm:^3.1.3" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" uri-js: "npm:^4.4.1" - checksum: 10/4ada268c9a6e44be87fd295df0f0a91267a7bae8dbc8a67a2d5799c3cb459232839c99d18b035597bb6e3ffe88af6979f7daece854f590a81ebbbc2dfa80002c - languageName: node - linkType: hard - -"amdefine@npm:>=0.0.4": - version: 1.0.1 - resolution: "amdefine@npm:1.0.1" - checksum: 10/517df65fc33d3ff14fe5c0057e041b03d603a2254dea7968b05dfbfa3041eb8430ea6729e305bc428c03fad03f162de91a4b256692d27d7b81d3ee691312cffe + checksum: 10/9b4b380efaf8be2639736d535662bd142a6972b43075b404380165c37ab6ceb72f01c7c987536747ff3e9e21eb5cd2e2a194f1e0fa8355364ea6204b1262fcd1 languageName: node linkType: hard @@ -1767,14 +1045,7 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:4.1.1": - version: 4.1.1 - resolution: "ansi-colors@npm:4.1.1" - checksum: 10/e862fddd0a9ca88f1e7c9312ea70674cec3af360c994762309f6323730525e92c77d2715ee5f08aa8f438b7ca18efe378af647f501fc92b15b8e4b3b52d09db4 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": +"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" checksum: 10/43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2 @@ -1797,13 +1068,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10/09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -1843,22 +1107,6 @@ __metadata: languageName: node linkType: hard -"antlr4@npm:^4.11.0": - version: 4.13.1 - resolution: "antlr4@npm:4.13.1" - checksum: 10/b17ee045cf30c7cec563f3ce81dc8bffd2c17b546646cd76e7b5f4cc4b676a1960c1a8a9aea53769947b0c6de70ed2aea73431e76c3840ab3b69cf3de5f1fc89 - languageName: node - linkType: hard - -"antlr4ts@npm:^0.5.0-alpha.4": - version: 0.5.0-dev - resolution: "antlr4ts@npm:0.5.0-dev" - dependencies: - source-map-support: "npm:^0.5.16" - checksum: 10/a95a061fb2fc9e2a0cd065e112fbc3fb899f408feace51249367051711b2255488b4e89b5912a706080f807c72484499e0f61f6a782391ecaba39c556d479f55 - languageName: node - linkType: hard - "anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -1869,22 +1117,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10/c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -1892,20 +1124,6 @@ __metadata: languageName: node linkType: hard -"array-back@npm:^3.0.1, array-back@npm:^3.1.0": - version: 3.1.0 - resolution: "array-back@npm:3.1.0" - checksum: 10/7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 - languageName: node - linkType: hard - -"array-back@npm:^4.0.1, array-back@npm:^4.0.2": - version: 4.0.2 - resolution: "array-back@npm:4.0.2" - checksum: 10/f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 - languageName: node - linkType: hard - "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -1913,20 +1131,6 @@ __metadata: languageName: node linkType: hard -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10/5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array-uniq@npm:1.0.3": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 10/1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e - languageName: node - linkType: hard - "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -1934,66 +1138,6 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.6": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: 10/b244c0458c571945e4b3be0b14eb001bea5596f9868cc50cc711dc03d58a7e953517d3f0dad81ccde3ff37d1f074701fa76a6f07d41aaa992d7204a37b915dda - languageName: node - linkType: hard - -"assertion-error@npm:^1.1.0": - version: 1.1.0 - resolution: "assertion-error@npm:1.1.0" - checksum: 10/fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf - languageName: node - linkType: hard - -"ast-parents@npm:^0.0.1": - version: 0.0.1 - resolution: "ast-parents@npm:0.0.1" - checksum: 10/08eaa3b755529aad0708aad54ff09087b171334dcffa0774d3401e1dc54db1242bd5e76e599152705e813f768b9245a3c20777ed033c706d2093e358a91b12c2 - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 10/876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - -"async@npm:1.x": - version: 1.5.2 - resolution: "async@npm:1.5.2" - checksum: 10/8afcdcee05168250926a3e7bd4dfaa74b681a74f634bae2af424fb716042461cbd20a375d9bc2534daa50a2d45286c9b174952fb239cee4ab8d6351a40c65327 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10/463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"axios@npm:^1.5.1": - version: 1.6.8 - resolution: "axios@npm:1.6.8" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10/3f9a79eaf1d159544fca9576261ff867cbbff64ed30017848e4210e49f3b01e97cf416390150e6fdf6633f336cd43dc1151f890bbd09c3c01ad60bb0891eee63 - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2002,25 +1146,11 @@ __metadata: linkType: hard "base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" + version: 3.0.10 + resolution: "base-x@npm:3.0.10" dependencies: safe-buffer: "npm:^5.0.1" - checksum: 10/957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10/669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"bech32@npm:1.1.4": - version: 1.1.4 - resolution: "bech32@npm:1.1.4" - checksum: 10/63ff37c0ce43be914c685ce89700bba1589c319af0dac1ea04f51b33d0e5ecfd40d14c24f527350b94f0a4e236385373bb9122ec276410f354ddcdbf29ca13f4 + checksum: 10/52307739559e81d9980889de2359cb4f816cc0eb9a463028fa3ab239ab913d9044a1b47b4520f98e68453df32a457b8ba58b8d0ee7e757fc3fb971f3fa7a1482 languageName: node linkType: hard @@ -2045,13 +1175,6 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:4.11.6": - version: 4.11.6 - resolution: "bn.js@npm:4.11.6" - checksum: 10/22741b015c9fff60fce32fc9988331b298eb9b6db5bfb801babb23b846eaaf894e440e0d067b2b3ae4e46aab754e90972f8f333b31bf94a686bbcb054bfa7b14 - languageName: node - linkType: hard - "bn.js@npm:^4.11.0, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -2059,7 +1182,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^5.1.2, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": +"bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 10/7a7e8764d7a6e9708b8b9841b2b3d6019cc154d2fc23716d0efecfe1e16921b7533c6f7361fb05471eab47986c4aa310c270f88e3507172104632ac8df2cfd84 @@ -2110,12 +1233,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - fill-range: "npm:^7.0.1" - checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 + fill-range: "npm:^7.1.1" + checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 languageName: node linkType: hard @@ -2126,7 +1249,7 @@ __metadata: languageName: node linkType: hard -"browser-stdout@npm:1.3.1": +"browser-stdout@npm:^1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" checksum: 10/ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015 @@ -2181,16 +1304,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10/b6bc68237ebf29bdacae48ce60e5e28fc53ae886301f2ad9496618efac49427ed79096750033e7eab1897a4f26ae374ace49106a5758f38fb70c78c9fda2c3b1 - languageName: node - linkType: hard - "bundle-name@npm:^3.0.0": version: 3.0.0 resolution: "bundle-name@npm:3.0.0" @@ -2208,22 +1321,27 @@ __metadata: linkType: hard "c12@npm:^1.4.2, c12@npm:^1.6.1": - version: 1.10.0 - resolution: "c12@npm:1.10.0" + version: 1.11.1 + resolution: "c12@npm:1.11.1" dependencies: chokidar: "npm:^3.6.0" - confbox: "npm:^0.1.3" + confbox: "npm:^0.1.7" defu: "npm:^6.1.4" dotenv: "npm:^16.4.5" - giget: "npm:^1.2.1" - jiti: "npm:^1.21.0" - mlly: "npm:^1.6.1" + giget: "npm:^1.2.3" + jiti: "npm:^1.21.6" + mlly: "npm:^1.7.1" ohash: "npm:^1.1.3" pathe: "npm:^1.1.2" perfect-debounce: "npm:^1.0.0" - pkg-types: "npm:^1.0.3" - rc9: "npm:^2.1.1" - checksum: 10/e592593fe3fb48c63ecae6a711045fae11904d1a50c5c7ff2920528e398a15e695d791f962662c51c6dcd3add8404b45a89ce9f305c4a029deef0bbd89466768 + pkg-types: "npm:^1.1.1" + rc9: "npm:^2.1.2" + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + checksum: 10/f836395ef3a3ec9b4d254f72ff9e92ab3dc0530193881a81f6d49506bcc8f41d8ba6613c6b776c7cabb996065b447f9a8822eff3f74d03af24c5cd7c067b9c92 languageName: node linkType: hard @@ -2254,19 +1372,6 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 - languageName: node - linkType: hard - "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2278,73 +1383,24 @@ __metadata: version: 6.2.2 resolution: "camelcase-keys@npm:6.2.2" dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10/c1999f5b6d03bee7be9a36e48eef3da9e93e51b000677348ec8d15d51fc4418375890fb6c7155e387322d2ebb2a2cdebf9cd96607a6753d1d6c170d9b1e2eed5 - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"caseless@npm:^0.12.0, caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10/ea1efdf430975fdbac3505cdd21007f7ac5aa29b6d4d1c091f965853cd1bf87e4b08ea07b31a6d688b038872b7cdf0589d9262d59c699d199585daad052aeb20 - languageName: node - linkType: hard - -"cbor@npm:^8.1.0": - version: 8.1.0 - resolution: "cbor@npm:8.1.0" - dependencies: - nofilter: "npm:^3.1.0" - checksum: 10/fc6c6d4f8d14def3a0f2ef111f4fc14b3b0bc91d22ed8fd0eb005095c4699c723a45721e515d713571148d0d965ceeb771f4ad422953cb4e9658b379991b52c9 - languageName: node - linkType: hard - -"chai-as-promised@npm:^7.1.1": - version: 7.1.2 - resolution: "chai-as-promised@npm:7.1.2" - dependencies: - check-error: "npm:^1.0.2" - peerDependencies: - chai: ">= 2.1.2 < 6" - checksum: 10/be372540dad92ef85cde3954bc0e9b0b33e4e6454f3740b17bfb16e36eda638911619089c05a4e4f2bf6722563bf893bb78c2af59b318c23abb2199e5c20ca1f + camelcase: "npm:^5.3.1" + map-obj: "npm:^4.0.0" + quick-lru: "npm:^4.0.1" + checksum: 10/c1999f5b6d03bee7be9a36e48eef3da9e93e51b000677348ec8d15d51fc4418375890fb6c7155e387322d2ebb2a2cdebf9cd96607a6753d1d6c170d9b1e2eed5 languageName: node linkType: hard -"chai@npm:^4.2.0": - version: 4.4.1 - resolution: "chai@npm:4.4.1" - dependencies: - assertion-error: "npm:^1.1.0" - check-error: "npm:^1.0.3" - deep-eql: "npm:^4.1.3" - get-func-name: "npm:^2.0.2" - loupe: "npm:^2.3.6" - pathval: "npm:^1.1.1" - type-detect: "npm:^4.0.8" - checksum: 10/c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard -"chalk@npm:5.3.0": - version: 5.3.0 - resolution: "chalk@npm:5.3.0" - checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea +"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard @@ -2359,7 +1415,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2369,6 +1425,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:~5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea + languageName: node + linkType: hard + "changelogen@npm:0.5.5": version: 0.5.5 resolution: "changelogen@npm:0.5.5" @@ -2430,42 +1493,7 @@ __metadata: languageName: node linkType: hard -"charenc@npm:>= 0.0.1": - version: 0.0.2 - resolution: "charenc@npm:0.0.2" - checksum: 10/81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 - languageName: node - linkType: hard - -"check-error@npm:^1.0.2, check-error@npm:^1.0.3": - version: 1.0.3 - resolution: "check-error@npm:1.0.3" - dependencies: - get-func-name: "npm:^2.0.2" - checksum: 10/e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 - languageName: node - linkType: hard - -"chokidar@npm:3.5.3": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/863e3ff78ee7a4a24513d2a416856e84c8e4f5e60efbe03e8ab791af1a183f569b62fc6f6b8044e2804966cb81277ddbbc1dc374fba3265bd609ea8efd62f5b3 - languageName: node - linkType: hard - -"chokidar@npm:^3.4.0, chokidar@npm:^3.6.0": +"chokidar@npm:^3.4.0, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -2540,20 +1568,6 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:^0.5.0": - version: 0.5.1 - resolution: "cli-table3@npm:0.5.1" - dependencies: - colors: "npm:^1.1.2" - object-assign: "npm:^4.1.0" - string-width: "npm:^2.1.1" - dependenciesMeta: - colors: - optional: true - checksum: 10/5b4aaa81943c9030e3366aaf20cc4be0792397d82dea3a1660e80ce49edded4dcc722f9bf272354061c5bfa3f4236ad2fdc86bc7bb0bbf7e4b8e8d3b418b955a - languageName: node - linkType: hard - "cli-truncate@npm:^4.0.0": version: 4.0.0 resolution: "cli-truncate@npm:4.0.0" @@ -2625,22 +1639,6 @@ __metadata: languageName: node linkType: hard -"colors@npm:1.4.0, colors@npm:^1.1.2": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 10/90b2d5465159813a3983ea72ca8cff75f784824ad70f2cc2b32c233e95bcfbcda101ebc6d6766bc50f57263792629bfb4f1f8a4dfbd1d240f229fc7f69b785fc - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 - languageName: node - linkType: hard - "command-exists@npm:^1.2.8": version: 1.2.9 resolution: "command-exists@npm:1.2.9" @@ -2648,37 +1646,6 @@ __metadata: languageName: node linkType: hard -"command-line-args@npm:^5.1.1": - version: 5.2.1 - resolution: "command-line-args@npm:5.2.1" - dependencies: - array-back: "npm:^3.1.0" - find-replace: "npm:^3.0.0" - lodash.camelcase: "npm:^4.3.0" - typical: "npm:^4.0.0" - checksum: 10/e6a42652ae8843fbb56e2fba1e85da00a16a0482896bb1849092e1bc70b8bf353d945e69732bf4ae98370ff84e8910ff4933af8f2f747806a6b2cb5074799fdb - languageName: node - linkType: hard - -"command-line-usage@npm:^6.1.0": - version: 6.1.3 - resolution: "command-line-usage@npm:6.1.3" - dependencies: - array-back: "npm:^4.0.2" - chalk: "npm:^2.4.2" - table-layout: "npm:^1.0.2" - typical: "npm:^5.2.0" - checksum: 10/902901582a543b26f55f90fc0f266c08a603a92bfadd8d07c66679f3d9eea2c074a039404126b0c4b65ff8452153c5f2010ea2f4ec14b70be0c77241f6d5bd53 - languageName: node - linkType: hard - -"commander@npm:11.1.0": - version: 11.1.0 - resolution: "commander@npm:11.1.0" - checksum: 10/66bd2d8a0547f6cb1d34022efb25f348e433b0e04ad76a65279b1b09da108f59a4d3001ca539c60a7a46ea38bcf399fc17d91adad76a8cf43845d8dcbaf5cda1 - languageName: node - linkType: hard - "commander@npm:3.0.2": version: 3.0.2 resolution: "commander@npm:3.0.2" @@ -2686,10 +1653,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 10/8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb +"commander@npm:~12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93 languageName: node linkType: hard @@ -2710,19 +1677,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^2.2.2" - typedarray: "npm:^0.0.6" - checksum: 10/71db903c84fc073ca35a274074e8d26c4330713d299f8623e993c448c1f6bf8b967806dd1d1a7b0f8add6f15ab1af7435df21fe79b4fe7efd78420c89e054e28 - languageName: node - linkType: hard - -"confbox@npm:^0.1.3, confbox@npm:^0.1.7": +"confbox@npm:^0.1.7": version: 0.1.7 resolution: "confbox@npm:0.1.7" checksum: 10/3086687b9a2a70d44d4b40a2d376536fe7e1baec4a2a34261b21b8a836026b419cbf89ded6054216631823e7d63c415dad4b4d53591d6edbb202bb9820dfa6fa @@ -2789,13 +1744,6 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10/9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - "cosmiconfig-typescript-loader@npm:^5.0.0": version: 5.0.0 resolution: "cosmiconfig-typescript-loader@npm:5.0.0" @@ -2809,7 +1757,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.0.0, cosmiconfig@npm:^8.3.6": +"cosmiconfig@npm:^8.3.6": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" dependencies: @@ -2853,13 +1801,6 @@ __metadata: languageName: node linkType: hard -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -2871,20 +1812,13 @@ __metadata: languageName: node linkType: hard -"crypt@npm:>= 0.0.1": - version: 0.0.2 - resolution: "crypt@npm:0.0.2" - checksum: 10/2c72768de3d28278c7c9ffd81a298b26f87ecdfe94415084f339e6632f089b43fe039f2c93f612bcb5ffe447238373d93b2e8c90894cba6cfb0ac7a74616f8b9 - languageName: node - linkType: hard - "czg@npm:^1.9.1": - version: 1.9.1 - resolution: "czg@npm:1.9.1" + version: 1.9.3 + resolution: "czg@npm:1.9.3" bin: czg: bin/index.js git-czg: bin/index.js - checksum: 10/4673b5dd9f48db2748520f35e4211d7363db5c045e44a1d32af96263efd8bff514a37a9e816d716ddebfd909548578613bf8e34517b57ee566d005cc84f360bb + checksum: 10/2908dc75e31877f2dbe560fc207613199e76bf0fdb56c1734500752e73004bb807850e362596be95bc17ed52ad2a1f1c83e378c54155e26053415d0142bfa7c2 languageName: node linkType: hard @@ -2895,22 +1829,15 @@ __metadata: languageName: node linkType: hard -"death@npm:^1.1.0": - version: 1.1.0 - resolution: "death@npm:1.1.0" - checksum: 10/b6fc4d1b8fbfc84486a025d36c540795c5ae9368f580a31fc2740935d0a9afbd31a214b00650335e97756f4c1a3fae895adc45795aeb9ef00694968311ab844d - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" dependencies: ms: "npm:2.1.2" peerDependenciesMeta: supports-color: optional: true - checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 + checksum: 10/cb6eab424c410e07813ca1392888589972ce9a32b8829c6508f5e1f25f3c3e70a76731610ae55b4bbe58d1a2fffa1424b30e97fa8d394e49cd2656a9643aedd2 languageName: node linkType: hard @@ -2938,29 +1865,6 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.3": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" - dependencies: - type-detect: "npm:^4.0.0" - checksum: 10/12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 - languageName: node - linkType: hard - -"deep-extend@npm:~0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - -"deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10/ec12d074aef5ae5e81fa470b9317c313142c9e8e2afe3f8efa124db309720db96d1d222b82b84c834e5f87e7a614b44a4684b6683583118b87c833b3be40d4d8 - languageName: node - linkType: hard - "default-browser-id@npm:^3.0.0": version: 3.0.0 resolution: "default-browser-id@npm:3.0.0" @@ -2983,17 +1887,6 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae - languageName: node - linkType: hard - "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -3008,13 +1901,6 @@ __metadata: languageName: node linkType: hard -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -3029,35 +1915,10 @@ __metadata: languageName: node linkType: hard -"diff@npm:5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: 10/4a179a75b17cbb420eb9145be913f9ddb34b47cb2ba4301e80ae745122826a468f02ca8f5e56945958de26ace594899c8381acb6659c88e7803ef078b53d690c - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 - languageName: node - linkType: hard - -"difflib@npm:^0.2.4": - version: 0.2.4 - resolution: "difflib@npm:0.2.4" - dependencies: - heap: "npm:>= 0.2.0" - checksum: 10/35c09c9469f762b72703a1eee4bd7bae6227fac96cef4605cd00f0ab3773b547584aefd2c5224f85c5b1701f0e8cedebd45afbb853b01d1d44863b4720cfcd35 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10/fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 +"diff@npm:^5.2.0": + version: 5.2.0 + resolution: "diff@npm:5.2.0" + checksum: 10/01b7b440f83a997350a988e9d2f558366c0f90f15be19f4aa7f1bb3109a4e153dfc3b9fbf78e14ea725717017407eeaa2271e3896374a0181e8f52445740846d languageName: node linkType: hard @@ -3177,22 +2038,6 @@ __metadata: languageName: node linkType: hard -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: "npm:^1.2.4" - checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.2 resolution: "escalade@npm:3.1.2" @@ -3200,13 +2045,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3214,91 +2052,10 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:1.8.x": - version: 1.8.1 - resolution: "escodegen@npm:1.8.1" - dependencies: - esprima: "npm:^2.7.1" - estraverse: "npm:^1.9.1" - esutils: "npm:^2.0.2" - optionator: "npm:^0.8.1" - source-map: "npm:~0.2.0" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: ./bin/escodegen.js - esgenerate: ./bin/esgenerate.js - checksum: 10/f7c4f9639f4198848784548f268bb4bbd55f1a12344af79ea4a8978168c2009b0bfc1047dece1e0fdca4ff539fe9dffb0b4183ecab22ab91dea88328487da86a - languageName: node - linkType: hard - -"esprima@npm:2.7.x, esprima@npm:^2.7.1": - version: 2.7.3 - resolution: "esprima@npm:2.7.3" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10/7508285b882012deea8f68dff4b759f9a17e9317ad8c7449969feb1e2efc083fa4a0012139a4722f1e96da81ece0ac319756c8e79a01e5ddb4b36ae483464d3f - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10/f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb - languageName: node - linkType: hard - -"estraverse@npm:^1.9.1": - version: 1.9.3 - resolution: "estraverse@npm:1.9.3" - checksum: 10/682a7e2fda17fd3e892b78a8347d055f923465598f5d713354aefd53a3348b2a1a6ee8df41031d8f5ad9802cfd27c29caac84c2f58ce3b2df659d43d668c870b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10/b23acd24791db11d8f65be5ea58fd9a6ce2df5120ae2da65c16cfc5331ff59d5ac4ef50af66cd4bde238881503ec839928a0135b99a036a9cdfa22d17fd56cdb - languageName: node - linkType: hard - -"eth-gas-reporter@npm:^0.2.25": - version: 0.2.27 - resolution: "eth-gas-reporter@npm:0.2.27" - dependencies: - "@solidity-parser/parser": "npm:^0.14.0" - axios: "npm:^1.5.1" - cli-table3: "npm:^0.5.0" - colors: "npm:1.4.0" - ethereum-cryptography: "npm:^1.0.3" - ethers: "npm:^5.7.2" - fs-readdir-recursive: "npm:^1.1.0" - lodash: "npm:^4.17.14" - markdown-table: "npm:^1.1.3" - mocha: "npm:^10.2.0" - req-cwd: "npm:^2.0.0" - sha1: "npm:^1.1.1" - sync-request: "npm:^6.0.0" - peerDependencies: - "@codechecks/client": ^0.1.0 - peerDependenciesMeta: - "@codechecks/client": - optional: true - checksum: 10/d2ba21b6e7edfadc39a29368bf52d22ab5314ee6a132b88df2abfe746e4c8161a32fd998be4ee6a98309a4c04162d5150e46f1391f116bcb15a76d711538453d - languageName: node - linkType: hard - -"ethereum-bloom-filters@npm:^1.0.6": - version: 1.1.0 - resolution: "ethereum-bloom-filters@npm:1.1.0" - dependencies: - "@noble/hashes": "npm:^1.4.0" - checksum: 10/fb50448d024723f5817d7fce7d11ed22921b36f2b14b6102fe553721cf073b07f5f0f32ceef1a2a4520b426e5d9cac217b76f5bc8af4b82b4036c2d14b907836 +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 languageName: node linkType: hard @@ -3337,18 +2094,6 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.2": - version: 2.1.3 - resolution: "ethereum-cryptography@npm:2.1.3" - dependencies: - "@noble/curves": "npm:1.3.0" - "@noble/hashes": "npm:1.3.3" - "@scure/bip32": "npm:1.3.3" - "@scure/bip39": "npm:1.2.2" - checksum: 10/cc5aa9a4368dc1dd7680ba921957c098ced7b3d7dbb1666334013ab2f8d4cd25a785ad84e66fd9f5c5a9b6de337930ea24ff8c722938f36a9c00cec597ca16b5 - languageName: node - linkType: hard - "ethereumjs-abi@npm:^0.6.8": version: 0.6.8 resolution: "ethereumjs-abi@npm:0.6.8" @@ -3374,82 +2119,6 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:^7.1.4": - version: 7.1.5 - resolution: "ethereumjs-util@npm:7.1.5" - dependencies: - "@types/bn.js": "npm:^5.1.0" - bn.js: "npm:^5.1.2" - create-hash: "npm:^1.1.2" - ethereum-cryptography: "npm:^0.1.3" - rlp: "npm:^2.2.4" - checksum: 10/f28fc1ebb8f35bf9e418f76f51be737d94d603b912c3e014c4e87cd45ccd1b10bdfef764c8f152574b57e9faa260a18773cbc110f9e0a754d6b3730699e54dc9 - languageName: node - linkType: hard - -"ethers@npm:^5.7.2": - version: 5.7.2 - resolution: "ethers@npm:5.7.2" - dependencies: - "@ethersproject/abi": "npm:5.7.0" - "@ethersproject/abstract-provider": "npm:5.7.0" - "@ethersproject/abstract-signer": "npm:5.7.0" - "@ethersproject/address": "npm:5.7.0" - "@ethersproject/base64": "npm:5.7.0" - "@ethersproject/basex": "npm:5.7.0" - "@ethersproject/bignumber": "npm:5.7.0" - "@ethersproject/bytes": "npm:5.7.0" - "@ethersproject/constants": "npm:5.7.0" - "@ethersproject/contracts": "npm:5.7.0" - "@ethersproject/hash": "npm:5.7.0" - "@ethersproject/hdnode": "npm:5.7.0" - "@ethersproject/json-wallets": "npm:5.7.0" - "@ethersproject/keccak256": "npm:5.7.0" - "@ethersproject/logger": "npm:5.7.0" - "@ethersproject/networks": "npm:5.7.1" - "@ethersproject/pbkdf2": "npm:5.7.0" - "@ethersproject/properties": "npm:5.7.0" - "@ethersproject/providers": "npm:5.7.2" - "@ethersproject/random": "npm:5.7.0" - "@ethersproject/rlp": "npm:5.7.0" - "@ethersproject/sha2": "npm:5.7.0" - "@ethersproject/signing-key": "npm:5.7.0" - "@ethersproject/solidity": "npm:5.7.0" - "@ethersproject/strings": "npm:5.7.0" - "@ethersproject/transactions": "npm:5.7.0" - "@ethersproject/units": "npm:5.7.0" - "@ethersproject/wallet": "npm:5.7.0" - "@ethersproject/web": "npm:5.7.1" - "@ethersproject/wordlists": "npm:5.7.0" - checksum: 10/227dfa88a2547c799c0c3c9e92e5e246dd11342f4b495198b3ae7c942d5bf81d3970fcef3fbac974a9125d62939b2d94f3c0458464e702209b839a8e6e615028 - languageName: node - linkType: hard - -"ethers@npm:^6.4.0": - version: 6.12.1 - resolution: "ethers@npm:6.12.1" - dependencies: - "@adraffy/ens-normalize": "npm:1.10.1" - "@noble/curves": "npm:1.2.0" - "@noble/hashes": "npm:1.3.2" - "@types/node": "npm:18.15.13" - aes-js: "npm:4.0.0-beta.5" - tslib: "npm:2.4.0" - ws: "npm:8.5.0" - checksum: 10/2995766164292b531499764d319d753b1f4e1cd7ddb4f26c6557a26e42947d5642a4b3bbeace0b8bb398b909dc22fafa4f52d5190a9bb8180bebf2dd3d4d48a9 - languageName: node - linkType: hard - -"ethjs-unit@npm:0.1.6": - version: 0.1.6 - resolution: "ethjs-unit@npm:0.1.6" - dependencies: - bn.js: "npm:4.11.6" - number-to-bn: "npm:1.7.0" - checksum: 10/35086cb671806992ec36d5dd43ab67e68ad7a9237e42c0e963f9081c88e40147cda86c1a258b0a3180bf2b7bc1960e607c5bcaefdb2196e0f3564acf73276189 - languageName: node - linkType: hard - "ethjs-util@npm:0.1.6, ethjs-util@npm:^0.1.6": version: 0.1.6 resolution: "ethjs-util@npm:0.1.6" @@ -3478,51 +2147,6 @@ __metadata: languageName: node linkType: hard -"excubiae@workspace:packages/excubiae": - version: 0.0.0-use.local - resolution: "excubiae@workspace:packages/excubiae" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.3" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@typechain/ethers-v6": "npm:^0.5.0" - "@typechain/hardhat": "npm:^9.0.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.6" - "@types/node": "npm:^20.10.7" - chai: "npm:^4.2.0" - ethers: "npm:^6.4.0" - hardhat: "npm:^2.19.4" - hardhat-gas-reporter: "npm:^1.0.8" - prettier-plugin-solidity: "npm:^1.3.1" - solhint: "npm:^3.3.6" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.0" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" - languageName: unknown - linkType: soft - -"execa@npm:8.0.1, execa@npm:^8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^8.0.1" - human-signals: "npm:^5.0.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^4.1.0" - strip-final-newline: "npm:^3.0.0" - checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -3552,93 +2176,48 @@ __metadata: npm-run-path: "npm:^5.1.0" onetime: "npm:^6.0.0" signal-exit: "npm:^3.0.7" - strip-final-newline: "npm:^3.0.0" - checksum: 10/473feff60f9d4dbe799225948de48b5158c1723021d19c4b982afe37bcd111ae84e1b4c9dfe967fae5101b0894b1a62e4dd564a286dfa3e46d7b0cfdbf7fe62b - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10/2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd - 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" - checksum: 10/e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2, fast-diff@npm:^1.2.0": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: 10/9e57415bc69cd6efcc720b3b8fe9fdaf42dcfc06f86f0f45378b1fa512598a8aac48aa3928c8751d58e2f01bb4ba4f07e4f3d9bc0d57586d45f1bd1e872c6cde - languageName: node - linkType: hard - -"fast-glob@npm:^3.0.3": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10/222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10/2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e - languageName: node - linkType: hard - -"fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10/eb7e220ecf2bab5159d157350b81d01f75726a4382f5a9266f42b9150c4523b9795f7f5d9fbbbeaeac09a441b2369f05ee02db48ea938584205530fe5693cfe1 + strip-final-newline: "npm:^3.0.0" + checksum: 10/473feff60f9d4dbe799225948de48b5158c1723021d19c4b982afe37bcd111ae84e1b4c9dfe967fae5101b0894b1a62e4dd564a286dfa3e46d7b0cfdbf7fe62b languageName: node linkType: hard -"fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" +"execa@npm:^8.0.1, execa@npm:~8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" dependencies: - reusify: "npm:^1.0.4" - checksum: 10/a443180068b527dd7b3a63dc7f2a47ceca2f3e97b9c00a1efe5538757e6cc4056a3526df94308075d7727561baf09ebaa5b67da8dcbddb913a021c5ae69d1f69 + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10/2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd languageName: node linkType: hard -"find-replace@npm:^3.0.0": - version: 3.0.0 - resolution: "find-replace@npm:3.0.0" - dependencies: - array-back: "npm:^3.0.1" - checksum: 10/6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10/e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d languageName: node linkType: hard -"find-up@npm:5.0.0, find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + to-regex-range: "npm:^5.0.1" + checksum: 10/a7095cb39e5bc32fada2aa7c7249d3f6b01bd1ce461a61b0adabacccabd9198500c6fb1f68a7c851a657e273fce2233ba869638897f3d7ed2e87a2d89b4436ea languageName: node linkType: hard @@ -3661,6 +2240,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" @@ -3670,7 +2259,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.15.6": +"follow-redirects@npm:^1.12.1": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: @@ -3681,34 +2270,12 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" + version: 3.2.1 + resolution: "foreground-child@npm:3.2.1" dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^4.0.1" - checksum: 10/087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb - languageName: node - linkType: hard - -"form-data@npm:^2.2.0": - version: 2.5.1 - resolution: "form-data@npm:2.5.1" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - checksum: 10/2e2e5e927979ba3623f9b4c4bcc939275fae3f2dea9dafc8db3ca656a3d75476605de2c80f0e6f1487987398e056f0b4c738972d6e1edd83392d5686d0952eed - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10/7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805 + checksum: 10/77b33b3c438a499201727ca84de39a66350ccd54a8805df712773e963cefb5c4632dbc4386109e97a0df8fb1585aee95fa35acb07587e3e04cfacabfc0ae15dc languageName: node linkType: hard @@ -3739,7 +2306,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1": +"fs-extra@npm:^7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" dependencies: @@ -3750,29 +2317,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10/6fb12449f5349be724a138b4a7b45fe6a317d2972054517f5971959c26fbd17c0e145731a11c7324460262baa33e0a799b183ceace98f7a372c95fbb6f20f5de - languageName: node - linkType: hard - -"fs-extra@npm:^9.1.0": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/08600da1b49552ed23dfac598c8fc909c66776dd130fea54fbcad22e330f7fcc13488bb995f6bc9ce5651aa35b65702faf616fe76370ee56f1aade55da982dca - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -3791,13 +2335,6 @@ __metadata: languageName: node linkType: hard -"fs-readdir-recursive@npm:^1.1.0": - version: 1.1.0 - resolution: "fs-readdir-recursive@npm:1.1.0" - checksum: 10/d5e3fd8456b8e5d57a43f169a9eaf65c70fa82c4a22f1d4361cdba4ea5e61c60c5c2b4ac481ea137a4d43b2b99b3ea2fae95ac2730255c4206d61af645866c3a - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -3845,33 +2382,6 @@ __metadata: languageName: node linkType: hard -"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": - version: 2.0.2 - resolution: "get-func-name@npm:2.0.2" - checksum: 10/3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d - languageName: node - linkType: hard - -"get-port@npm:^3.1.0": - version: 3.2.0 - resolution: "get-port@npm:3.2.0" - checksum: 10/577b6ae47dcac1cb64f9bad28c9aa9e4cd8e8f2166c4224485dcdd1dede64154517a57a0eb55bfb557ad3d48f9a1b400415ed047f04002e936f96ddb247f645d - languageName: node - linkType: hard - "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -3886,19 +2396,7 @@ __metadata: languageName: node linkType: hard -"ghost-testrpc@npm:^0.0.2": - version: 0.0.2 - resolution: "ghost-testrpc@npm:0.0.2" - dependencies: - chalk: "npm:^2.4.2" - node-emoji: "npm:^1.10.0" - bin: - testrpc-sc: ./index.js - checksum: 10/e52f1d7ad5ac84c8528b3884496270c65056264b37373c00631ca874674b3cfd7c45ae2fc787ba3ff75e63273188f29d155d995ce3e361244bd55a9c365e444f - languageName: node - linkType: hard - -"giget@npm:^1.2.1": +"giget@npm:^1.2.3": version: 1.2.3 resolution: "giget@npm:1.2.3" dependencies: @@ -3931,7 +2429,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": +"glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -3940,20 +2438,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.7": - version: 7.1.7 - resolution: "glob@npm:7.1.7" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/ff5aab0386e9cace92b0550d42085b71013c5ea382982dd7fdded998a559635f61413b8ba6fb7294eef289c83b52f4e64136f888300ac8afc4f3e5623182d6c8 - languageName: node - linkType: hard - "glob@npm:7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -3968,58 +2452,46 @@ __metadata: languageName: node linkType: hard -"glob@npm:8.1.0, glob@npm:^8.0.3": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^5.0.1" - once: "npm:^1.3.0" - checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e - languageName: node - linkType: hard - "glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.15 - resolution: "glob@npm:10.3.15" + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.6" - minimatch: "npm:^9.0.1" - minipass: "npm:^7.0.4" - path-scurry: "npm:^1.11.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" bin: glob: dist/esm/bin.mjs - checksum: 10/b2b1c74309979b34fd6010afb50418a12525def32f1d3758d5827fc75d6143fc3ee5d1f3180a43111f6386c9e297c314f208d9d09955a6c6b69f22e92ee97635 + checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac languageName: node linkType: hard -"glob@npm:^5.0.15": - version: 5.0.15 - resolution: "glob@npm:5.0.15" +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" dependencies: + fs.realpath: "npm:^1.0.0" inflight: "npm:^1.0.4" inherits: "npm:2" - minimatch: "npm:2 || 3" + minimatch: "npm:^3.1.1" once: "npm:^1.3.0" path-is-absolute: "npm:^1.0.0" - checksum: 10/4a1f2401329d94b5c25c6ac16276aceccc52b865bd9b2b9198da21fc937d021bfd87463ae44de9a9e4794894a49bc619ebaf7e5b12182bcf97e2ceb68ae116d7 + checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" +"glob@npm:^8.1.0": + version: 8.1.0 + resolution: "glob@npm:8.1.0" dependencies: fs.realpath: "npm:^1.0.0" inflight: "npm:^1.0.4" inherits: "npm:2" - minimatch: "npm:^3.1.1" + minimatch: "npm:^5.0.1" once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b + checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e languageName: node linkType: hard @@ -4032,76 +2504,13 @@ __metadata: languageName: node linkType: hard -"global-modules@npm:^2.0.0": - version: 2.0.0 - resolution: "global-modules@npm:2.0.0" - dependencies: - global-prefix: "npm:^3.0.0" - checksum: 10/4aee73adf533fe82ead2ad15c8bfb6ea4fb29e16d2d067521ab39d3b45b8f834d71c47a807e4f8f696e79497c3946d4ccdcd708da6f3a4522d65b087b8852f64 - languageName: node - linkType: hard - -"global-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "global-prefix@npm:3.0.0" - dependencies: - ini: "npm:^1.3.5" - kind-of: "npm:^6.0.2" - which: "npm:^1.3.1" - checksum: 10/a405b9f83c7d88a49dc1c1e458d6585e258356810d3d0f41094265152a06a0f393b14d911f45616e35a4ce3894176a73be2984883575e778f55e90bf812d7337 - languageName: node - linkType: hard - -"globby@npm:^10.0.1": - version: 10.0.2 - resolution: "globby@npm:10.0.2" - dependencies: - "@types/glob": "npm:^7.1.1" - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.0.3" - glob: "npm:^7.1.3" - ignore: "npm:^5.1.1" - merge2: "npm:^1.2.3" - slash: "npm:^3.0.0" - checksum: 10/6974752014f0914b112957b4364b760af5f2fda4033ff29bedb830bbe278ff4c13ba64681741f3e62b1f12ea0f2d64bf02ac28534f9cbea4b90ed7e9cd6e954f - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 languageName: node linkType: hard -"handlebars@npm:^4.0.1": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10/bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 - languageName: node - linkType: hard - "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -4109,20 +2518,7 @@ __metadata: languageName: node linkType: hard -"hardhat-gas-reporter@npm:^1.0.8": - version: 1.0.10 - resolution: "hardhat-gas-reporter@npm:1.0.10" - dependencies: - array-uniq: "npm:1.0.3" - eth-gas-reporter: "npm:^0.2.25" - sha1: "npm:^1.1.1" - peerDependencies: - hardhat: ^2.0.2 - checksum: 10/ad6df4f87ebddea967d02243a728f824cd02a486bc400a0b5fb0bfc55b24eb08d445d4c2650e8d53fa622050f6f4a971e954179bb2ac02f2bbaba97f4464d33f - languageName: node - linkType: hard - -"hardhat@npm:2.22.4, hardhat@npm:^2.19.4": +"hardhat@npm:2.22.4": version: 2.22.4 resolution: "hardhat@npm:2.22.4" dependencies: @@ -4183,13 +2579,6 @@ __metadata: languageName: node linkType: hard -"has-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-flag@npm:1.0.0" - checksum: 10/ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 - languageName: node - linkType: hard - "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -4204,29 +2593,6 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 - languageName: node - linkType: hard - -"has-proto@npm:^1.0.1": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b - languageName: node - linkType: hard - "hash-base@npm:^3.0.0": version: 3.1.0 resolution: "hash-base@npm:3.1.0" @@ -4248,7 +2614,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": +"hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -4257,7 +2623,7 @@ __metadata: languageName: node linkType: hard -"he@npm:1.2.0": +"he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -4266,13 +2632,6 @@ __metadata: languageName: node linkType: hard -"heap@npm:>= 0.2.0": - version: 0.2.7 - resolution: "heap@npm:0.2.7" - checksum: 10/6374f6510af79bf47f2cfcee265bf608e6ed2b2694875974d1cb5654ddc98af05347dcf3a42ee9a7de318b576022d6f4d00fe06fa65a4a65c4c60638375eabfe - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -4300,18 +2659,6 @@ __metadata: languageName: node linkType: hard -"http-basic@npm:^8.1.1": - version: 8.1.3 - resolution: "http-basic@npm:8.1.3" - dependencies: - caseless: "npm:^0.12.0" - concat-stream: "npm:^1.6.2" - http-response-object: "npm:^3.0.1" - parse-cache-control: "npm:^1.0.1" - checksum: 10/f515c46159da289bc1573251a90f29b36ec7d781587481acc93656bc21d07f664c862662bd0e79144870c0254758e8b328e16ddc0a5c004827fb1503760e561e - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -4342,15 +2689,6 @@ __metadata: languageName: node linkType: hard -"http-response-object@npm:^3.0.1": - version: 3.0.2 - resolution: "http-response-object@npm:3.0.2" - dependencies: - "@types/node": "npm:^10.0.3" - checksum: 10/f530c1b28d35200ec125e3a1d3c2d6da1f9d78cc52537e9379219e8172bda24f831856eb050a635d9746f9545586532ade60ffe75253d5a1db14dfaf4759d691 - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -4362,12 +2700,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" dependencies: agent-base: "npm:^7.0.2" debug: "npm:4" - checksum: 10/405fe582bba461bfe5c7e2f8d752b384036854488b828ae6df6a587c654299cbb2c50df38c4b6ab303502c3c5e029a793fbaac965d1e86ee0be03faceb554d63 + checksum: 10/6679d46159ab3f9a5509ee80c3a3fc83fba3a920a5e18d32176c3327852c3c00ad640c0c4210a8fd70ea3c4a6d3a1b375bf01942516e7df80e2646bdc77658ab languageName: node linkType: hard @@ -4419,20 +2757,6 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 - languageName: node - linkType: hard - -"ignore@npm:^5.1.1, ignore@npm:^5.2.4": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10/0a884c2fbc8c316f0b9f92beaf84464253b73230a4d4d286697be45fca081199191ca33e1c2e82d9e5f851f5e9a48a78e25a35c951e7eb41e59f150db3530065 - languageName: node - linkType: hard - "immutable@npm:^4.0.0-rc.12": version: 4.3.6 resolution: "immutable@npm:4.3.6" @@ -4450,37 +2774,6 @@ __metadata: languageName: node linkType: hard -"imt.sol@workspace:packages/imt": - version: 0.0.0-use.local - resolution: "imt.sol@workspace:packages/imt" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.3" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@typechain/ethers-v6": "npm:^0.5.0" - "@typechain/hardhat": "npm:^9.0.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.6" - "@types/node": "npm:^20.10.7" - "@zk-kit/imt": "npm:^2.0.0-beta.5" - chai: "npm:^4.2.0" - ethers: "npm:^6.4.0" - hardhat: "npm:^2.19.4" - hardhat-gas-reporter: "npm:^1.0.8" - poseidon-lite: "npm:^0.2.0" - poseidon-solidity: "npm:0.0.5" - prettier-plugin-solidity: "npm:^1.3.1" - solhint: "npm:^3.3.6" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.0" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" - languageName: unknown - linkType: soft - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -4505,27 +2798,20 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, 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.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard -"ini@npm:^1.3.4, ini@npm:^1.3.5": +"ini@npm:^1.3.4": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 languageName: node linkType: hard -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 10/5beec568d3f60543d0f61f2c5969d44dffcb1a372fe5abcdb8013968114d4e4aaac06bc971a4c9f5bd52d150881d8ebad72a8c60686b1361f5f0522f39c0e1a3 - languageName: node - linkType: hard - "io-ts@npm:1.10.4": version: 1.10.4 resolution: "io-ts@npm:1.10.4" @@ -4562,11 +2848,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" + version: 2.14.0 + resolution: "is-core-module@npm:2.14.0" dependencies: - hasown: "npm:^2.0.0" - checksum: 10/d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 + hasown: "npm:^2.0.2" + checksum: 10/1e0d1a16cb3a94746f6a28db09ccab4562860c94c74bacedb3a6729736d61cfb97001d2052f9622637aa7ea8e0643a3f0f4f16965c70ba6ce30a8ccfe8074af8 languageName: node linkType: hard @@ -4595,13 +2881,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10/eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -4726,13 +3005,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -4747,29 +3019,29 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^2.3.6": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" +"jackspeak@npm:^3.1.2": + version: 3.4.2 + resolution: "jackspeak@npm:3.4.2" dependencies: "@isaacs/cliui": "npm:^8.0.2" "@pkgjs/parseargs": "npm:^0.11.0" dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 10/6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 + checksum: 10/485b77ffef380d1a1367a6453f3c6e61ca02728012be99bb397e673479020e87b1b0307d8f2a9288e48017eea9b8c95586a5c621b137e60c856e87365b9e1a8f languageName: node linkType: hard -"jiti@npm:^1.19.1, jiti@npm:^1.21.0": - version: 1.21.0 - resolution: "jiti@npm:1.21.0" +"jiti@npm:^1.19.1, jiti@npm:^1.21.6": + version: 1.21.6 + resolution: "jiti@npm:1.21.6" bin: jiti: bin/jiti.js - checksum: 10/005a0239e50381b5c9919f59dbab86128367bd64872f3376dbbde54b6523f41bd134bf22909e2a509e38fd87e1c22125ca255b9b6b53e7df0fedd23f737334cc + checksum: 10/289b124cea411c130a14ffe88e3d38376ab44b6695616dfa0a1f32176a8f20ec90cdd6d2b9d81450fc6467cfa4d865f04f49b98452bff0f812bc400fd0ae78d6 languageName: node linkType: hard -"js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": +"js-sha3@npm:0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" checksum: 10/a49ac6d3a6bfd7091472a28ab82a94c7fb8544cc584ee1906486536ba1cb4073a166f8c7bb2b0565eade23c5b3a7b8f7816231e0309ab5c549b737632377a20c @@ -4783,19 +3055,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:3.x": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 - languageName: node - linkType: hard - -"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": +"js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -4820,13 +3080,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10/7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -4858,19 +3111,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 - languageName: node - linkType: hard - "jsonparse@npm:^1.2.0": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" @@ -4878,13 +3118,6 @@ __metadata: languageName: node linkType: hard -"jsonschema@npm:^1.2.4": - version: 1.4.1 - resolution: "jsonschema@npm:1.4.1" - checksum: 10/d7a188da7a3100a2caa362b80e98666d46607b7a7153aac405b8e758132961911c6df02d444d4700691330874e21a62639f550e856b21ddd28423690751ca9c6 - languageName: node - linkType: hard - "keccak@npm:^3.0.0, keccak@npm:^3.0.2": version: 3.0.4 resolution: "keccak@npm:3.0.4" @@ -4897,7 +3130,7 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": +"kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 @@ -4914,121 +3147,19 @@ __metadata: optional: true checksum: 10/68b8ccb89f222dca60805df2b0e0fa0b3e4203ca1928b8facc0afac660e3e362809fe00f868ac877f495ebf89e376bb9ac9275508a132b5573e7382bed3ab006 languageName: node - linkType: hard - -"kolorist@npm:^1.8.0": - version: 1.8.0 - resolution: "kolorist@npm:1.8.0" - checksum: 10/71d5d122951cc65f2f14c3e1d7f8fd91694b374647d4f6deec3816d018cd04a44edd9578d93e00c82c2053b925e5d30a0565746c4171f4ca9fce1a13bd5f3315 - languageName: node - linkType: hard - -"lazy-imt.sol@workspace:packages/lazy-imt": - version: 0.0.0-use.local - resolution: "lazy-imt.sol@workspace:packages/lazy-imt" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.3" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@typechain/ethers-v6": "npm:^0.5.0" - "@typechain/hardhat": "npm:^9.0.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.6" - "@types/node": "npm:^20.10.7" - "@zk-kit/imt": "npm:^2.0.0-beta.5" - chai: "npm:^4.2.0" - ethers: "npm:^6.4.0" - hardhat: "npm:^2.19.4" - hardhat-gas-reporter: "npm:^1.0.8" - poseidon-lite: "npm:^0.2.0" - poseidon-solidity: "npm:0.0.5" - prettier-plugin-solidity: "npm:^1.3.1" - solhint: "npm:^3.3.6" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.0" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" - languageName: unknown - linkType: soft - -"lazytower.sol@workspace:packages/lazytower": - version: 0.0.0-use.local - resolution: "lazytower.sol@workspace:packages/lazytower" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.3" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@typechain/ethers-v6": "npm:^0.5.0" - "@typechain/hardhat": "npm:^9.0.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.6" - "@types/node": "npm:^20.10.7" - chai: "npm:^4.2.0" - ethers: "npm:^6.4.0" - hardhat: "npm:^2.19.4" - hardhat-gas-reporter: "npm:^1.0.8" - poseidon-lite: "npm:^0.2.0" - poseidon-solidity: "npm:0.0.5" - prettier-plugin-solidity: "npm:^1.3.1" - solhint: "npm:^3.3.6" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.0" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" - languageName: unknown - linkType: soft - -"lean-imt.sol@workspace:packages/lean-imt": - version: 0.0.0-use.local - resolution: "lean-imt.sol@workspace:packages/lean-imt" - dependencies: - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.3" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@typechain/ethers-v6": "npm:^0.5.0" - "@typechain/hardhat": "npm:^9.0.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.6" - "@types/node": "npm:^20.10.7" - "@zk-kit/lean-imt": "npm:^2.0.1" - chai: "npm:^4.2.0" - ethers: "npm:^6.4.0" - hardhat: "npm:^2.19.4" - hardhat-gas-reporter: "npm:^1.0.8" - poseidon-lite: "npm:^0.2.0" - poseidon-solidity: "npm:0.0.5" - prettier-plugin-solidity: "npm:^1.3.1" - solhint: "npm:^3.3.6" - solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:^0.8.0" - ts-node: "npm:^10.9.2" - typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" - languageName: unknown - linkType: soft + linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: "npm:~1.1.2" - type-check: "npm:~0.3.2" - checksum: 10/e1c3e75b5c430d9aa4c32c83c8a611e4ca53608ca78e3ea3bf6bbd9d017e4776d05d86e27df7901baebd3afa732abede9f26f715b8c1be19e95505c7a3a7b589 +"kolorist@npm:^1.8.0": + version: 1.8.0 + resolution: "kolorist@npm:1.8.0" + checksum: 10/71d5d122951cc65f2f14c3e1d7f8fd91694b374647d4f6deec3816d018cd04a44edd9578d93e00c82c2053b925e5d30a0565746c4171f4ca9fce1a13bd5f3315 languageName: node linkType: hard -"lilconfig@npm:3.0.0": - version: 3.0.0 - resolution: "lilconfig@npm:3.0.0" - checksum: 10/55f60f4f9f7b41358cc33875e3696919412683a35aec30c6c60c4f6ecb16fb6d11f7ac856b8458b9b82b21d5f4629649fbfca1de034e8d5b0cc7a70836266db6 +"lilconfig@npm:~3.1.1": + version: 3.1.2 + resolution: "lilconfig@npm:3.1.2" + checksum: 10/8058403850cfad76d6041b23db23f730e52b6c17a8c28d87b90766639ca0ee40c748a3e85c2d7bd133d572efabff166c4b015e5d25e01fd666cb4b13cfada7f0 languageName: node linkType: hard @@ -5040,36 +3171,36 @@ __metadata: linkType: hard "lint-staged@npm:^15.2.2": - version: 15.2.2 - resolution: "lint-staged@npm:15.2.2" - dependencies: - chalk: "npm:5.3.0" - commander: "npm:11.1.0" - debug: "npm:4.3.4" - execa: "npm:8.0.1" - lilconfig: "npm:3.0.0" - listr2: "npm:8.0.1" - micromatch: "npm:4.0.5" - pidtree: "npm:0.6.0" - string-argv: "npm:0.3.2" - yaml: "npm:2.3.4" + version: 15.2.7 + resolution: "lint-staged@npm:15.2.7" + dependencies: + chalk: "npm:~5.3.0" + commander: "npm:~12.1.0" + debug: "npm:~4.3.4" + execa: "npm:~8.0.1" + lilconfig: "npm:~3.1.1" + listr2: "npm:~8.2.1" + micromatch: "npm:~4.0.7" + pidtree: "npm:~0.6.0" + string-argv: "npm:~0.3.2" + yaml: "npm:~2.4.2" bin: lint-staged: bin/lint-staged.js - checksum: 10/5855ae7abf3ffdc2d66e8ad20759915e76544e7c4bcdfef78c82b5c126502284320d9fb0ecde554a6d07747311ab751d0bccbe3468aa5d5a7661774317cd7437 + checksum: 10/7557bcf4e8dc0555f2c7e6a8ab6f5dfd7faaaed632a5d9e598768c86f786267ca216f8005068796a8118884d322a1c7f8f93e57c01b3e556475b77297ddad34f languageName: node linkType: hard -"listr2@npm:8.0.1": - version: 8.0.1 - resolution: "listr2@npm:8.0.1" +"listr2@npm:~8.2.1": + version: 8.2.3 + resolution: "listr2@npm:8.2.3" dependencies: cli-truncate: "npm:^4.0.0" colorette: "npm:^2.0.20" eventemitter3: "npm:^5.0.1" log-update: "npm:^6.0.0" - rfdc: "npm:^1.3.0" + rfdc: "npm:^1.4.1" wrap-ansi: "npm:^9.0.0" - checksum: 10/3fa83e8b709306b7efab69884ac1af08de3e18449bccf0b4d81f78dc7235dc921a32a5875b1e7deea0650f0faef2bca2d8992f16377d858158eb5a57bbb0d025 + checksum: 10/4d63a699b851d6763df83b0eb26d9f07e6ba656fbae79ddd2447bd72a5b6825dad2fd315aacba712707ccd414fab3365ba863ad5b12b9f1b515a5d0768f6fc7d languageName: node linkType: hard @@ -5108,20 +3239,6 @@ __metadata: languageName: node linkType: hard -"lodash.clonedeep@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.clonedeep@npm:4.5.0" - checksum: 10/957ed243f84ba6791d4992d5c222ffffca339a3b79dbe81d2eaf0c90504160b500641c5a0f56e27630030b18b8e971ea10b44f928a977d5ced3c8948841b555f - languageName: node - linkType: hard - -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 - languageName: node - linkType: hard - "lodash.isfunction@npm:^3.0.9": version: 3.0.9 resolution: "lodash.isfunction@npm:3.0.9" @@ -5171,13 +3288,6 @@ __metadata: languageName: node linkType: hard -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: 10/7a495616121449e5d2288c606b1025d42ab9979e8c93ba885e5c5802ffd4f1ebad4428c793ccc12f73e73237e85a9f5b67dd6415757546fbd5a4653ba83e25ac - languageName: node - linkType: hard - "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" @@ -5192,14 +3302,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21": +"lodash@npm:^4.17.11, lodash@npm:^4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 languageName: node linkType: hard -"log-symbols@npm:4.1.0": +"log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -5222,19 +3332,10 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^2.3.6": - version: 2.3.7 - resolution: "loupe@npm:2.3.7" - dependencies: - get-func-name: "npm:^2.0.1" - checksum: 10/635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 - languageName: node - linkType: hard - "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.2 - resolution: "lru-cache@npm:10.2.2" - checksum: 10/ff1a496d30b5eaec2c9079080965bb0cede203cf878371f7033a007f1e54cd4aa13cc8abf7ccec4c994a83a22ed5476e83a55bb57cc07e6c1547a42937e42c37 + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a languageName: node linkType: hard @@ -5254,13 +3355,6 @@ __metadata: languageName: node linkType: hard -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - "make-fetch-happen@npm:^13.0.0": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" @@ -5295,13 +3389,6 @@ __metadata: languageName: node linkType: hard -"markdown-table@npm:^1.1.3": - version: 1.1.3 - resolution: "markdown-table@npm:1.1.3" - checksum: 10/ca94e8a84c467f9da963d1888aa298939f137d792b39259bf971d01d6fb534e02c0435e10dcccdc0b11d9e29bf6eb7dffacb007b07e3038b68b2e6eb02990fb1 - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -5353,43 +3440,13 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.2.3, merge2@npm:^1.3.0": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"micro-ftch@npm:^0.3.1": - version: 0.3.1 - resolution: "micro-ftch@npm:0.3.1" - checksum: 10/a7ab07d25e28ec4ae492ce4542ea9b06eee85538742b3b1263b247366ee8872f2c5ce9c8651138b2f1d22c8212f691a7b8b5384fe86ead5aff1852e211f1c035 - languageName: node - linkType: hard - -"micromatch@npm:4.0.5, micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" +"micromatch@npm:~4.0.7": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" dependencies: - braces: "npm:^3.0.2" + braces: "npm:^3.0.3" picomatch: "npm:^2.3.1" - checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10/54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a + checksum: 10/a11ed1cb67dcbbe9a5fc02c4062cf8bb0157d73bf86956003af8dcfdf9b287f9e15ec0f6d6925ff6b8b5b496202335e497b01de4d95ef6cf06411bc5e5c474a0 languageName: node linkType: hard @@ -5428,7 +3485,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1": +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -5437,16 +3494,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:5.0.1": - version: 5.0.1 - resolution: "minimatch@npm:5.0.1" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10/2656580f18d9f38ada186196fcc72dc9076d70f7227adc664e72614d464e075dc4ae3936e6742519e09e336996ef33c6035e606888b12f65ca7fda792ddd2085 - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": +"minimatch@npm:^5.0.1, minimatch@npm:^5.1.6": version: 5.1.6 resolution: "minimatch@npm:5.1.6" dependencies: @@ -5455,12 +3503,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10/4cdc18d112b164084513e890d6323370db14c22249d536ad1854539577a895e690a27513dc346392f61a4a50afbbd8abc88f3f25558bfbbbb862cd56508b20f5 + checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 languageName: node linkType: hard @@ -5475,7 +3523,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f @@ -5549,10 +3597,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": - version: 7.1.1 - resolution: "minipass@npm:7.1.1" - checksum: 10/6f4f920f1b5ea585d08fa3739b9bd81726cd85a0c972fb371c0fa6c1544d468813fb1694c7bc64ad81f138fd8abf665e2af0f406de9ba5741d8e4a377ed346b1 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 languageName: node linkType: hard @@ -5566,18 +3614,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:0.5.x": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10/0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -5586,15 +3623,15 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.6.1, mlly@npm:^1.7.0": - version: 1.7.0 - resolution: "mlly@npm:1.7.0" +"mlly@npm:^1.7.1": + version: 1.7.1 + resolution: "mlly@npm:1.7.1" dependencies: acorn: "npm:^8.11.3" pathe: "npm:^1.1.2" - pkg-types: "npm:^1.1.0" + pkg-types: "npm:^1.1.1" ufo: "npm:^1.5.3" - checksum: 10/a52f17767f1aa8133ad4354065e579c3d1cc72e866102bde7e466123772f5e571327b95ce777d1d655724f0c479a82acaafc6e81e25781851779d865682c8823 + checksum: 10/c1ef3989e95fb6c6c27a238330897b01f46507020501f45a681f2cae453f982e38dcb0e45aa65f672ea7280945d4a729d266f17a8acb187956f312b0cafddf61 languageName: node linkType: hard @@ -5607,34 +3644,34 @@ __metadata: languageName: node linkType: hard -"mocha@npm:^10.0.0, mocha@npm:^10.2.0": - version: 10.4.0 - resolution: "mocha@npm:10.4.0" - dependencies: - ansi-colors: "npm:4.1.1" - browser-stdout: "npm:1.3.1" - chokidar: "npm:3.5.3" - debug: "npm:4.3.4" - diff: "npm:5.0.0" - escape-string-regexp: "npm:4.0.0" - find-up: "npm:5.0.0" - glob: "npm:8.1.0" - he: "npm:1.2.0" - js-yaml: "npm:4.1.0" - log-symbols: "npm:4.1.0" - minimatch: "npm:5.0.1" - ms: "npm:2.1.3" - serialize-javascript: "npm:6.0.0" - strip-json-comments: "npm:3.1.1" - supports-color: "npm:8.1.1" - workerpool: "npm:6.2.1" - yargs: "npm:16.2.0" - yargs-parser: "npm:20.2.4" - yargs-unparser: "npm:2.0.0" +"mocha@npm:^10.0.0": + version: 10.6.0 + resolution: "mocha@npm:10.6.0" + dependencies: + ansi-colors: "npm:^4.1.3" + browser-stdout: "npm:^1.3.1" + chokidar: "npm:^3.5.3" + debug: "npm:^4.3.5" + diff: "npm:^5.2.0" + escape-string-regexp: "npm:^4.0.0" + find-up: "npm:^5.0.0" + glob: "npm:^8.1.0" + he: "npm:^1.2.0" + js-yaml: "npm:^4.1.0" + log-symbols: "npm:^4.1.0" + minimatch: "npm:^5.1.6" + ms: "npm:^2.1.3" + serialize-javascript: "npm:^6.0.2" + strip-json-comments: "npm:^3.1.1" + supports-color: "npm:^8.1.1" + workerpool: "npm:^6.5.1" + yargs: "npm:^16.2.0" + yargs-parser: "npm:^20.2.9" + yargs-unparser: "npm:^2.0.0" bin: _mocha: bin/_mocha mocha: bin/mocha.js - checksum: 10/0147b2a86c8a3b134b3bda949006aa5f2b08db606b9394e38eb3fa0d97dd2f54f06eb4afb270d4ae08aa6fb7674282737ed556b9a8bc407f9b8488380852eca4 + checksum: 10/8e9901f4c8a3299c3e1b65821778915622aa0b5758acbe6d5b96f142843e23562b6aa3c87c2baa8626640ecb7e6b956d7a6cdb622ac8422d43a13558cb748e42 languageName: node linkType: hard @@ -5652,7 +3689,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3": +"ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -5666,13 +3703,6 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 - languageName: node - linkType: hard - "node-addon-api@npm:^2.0.0": version: 2.0.2 resolution: "node-addon-api@npm:2.0.2" @@ -5682,15 +3712,6 @@ __metadata: languageName: node linkType: hard -"node-emoji@npm:^1.10.0": - version: 1.11.0 - resolution: "node-emoji@npm:1.11.0" - dependencies: - lodash: "npm:^4.17.21" - checksum: 10/1d7ae9bcb0f23d7cdfcac5c3a90a6fd6ec584e6f7c70ff073f6122bfbed6c06284da7334092500d24e14162f5c4016e5dcd3355753cbd5b7e60de560a973248d - languageName: node - linkType: hard - "node-fetch-native@npm:^1.2.0, node-fetch-native@npm:^1.6.3": version: 1.6.4 resolution: "node-fetch-native@npm:1.6.4" @@ -5729,24 +3750,6 @@ __metadata: languageName: node linkType: hard -"nofilter@npm:^3.1.0": - version: 3.1.0 - resolution: "nofilter@npm:3.1.0" - checksum: 10/f63d87231dfda4b783db17d75b15aac948f78e65f4f1043096ef441147f6667ff74cd4b3f57ada5dbe240be282d3e9838558ac863a66cb04ef25fff7b2b4be4e - languageName: node - linkType: hard - -"nopt@npm:3.x": - version: 3.0.6 - resolution: "nopt@npm:3.0.6" - dependencies: - abbrev: "npm:1" - bin: - nopt: ./bin/nopt.js - checksum: 10/2f582a44f7a4e495f21b6668008eda47f6e9c50c27efc00494aa67360791c9240da537661371786afc5d5712f353d3debb863a7201b536fe35fb393ceadc8a23 - languageName: node - linkType: hard - "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -5807,42 +3810,19 @@ __metadata: languageName: node linkType: hard -"number-to-bn@npm:1.7.0": - version: 1.7.0 - resolution: "number-to-bn@npm:1.7.0" - dependencies: - bn.js: "npm:4.11.6" - strip-hex-prefix: "npm:1.0.0" - checksum: 10/702e8f00b6b90abd23f711056005179c3bd5ce3b063c47d468250f63ab3b9b4b82e27bff3b4642a9e71e06c717d5ed359873501746df0a64c3db1fa6d704e704 - languageName: node - linkType: hard - "nypm@npm:^0.3.8": - version: 0.3.8 - resolution: "nypm@npm:0.3.8" + version: 0.3.9 + resolution: "nypm@npm:0.3.9" dependencies: citty: "npm:^0.1.6" consola: "npm:^3.2.3" execa: "npm:^8.0.1" pathe: "npm:^1.1.2" - ufo: "npm:^1.4.0" + pkg-types: "npm:^1.1.1" + ufo: "npm:^1.5.3" bin: nypm: dist/cli.mjs - checksum: 10/fc3fcf4f2c9837d09c1b9b976c205e1538a9378b5ac40ea0d3bac0bcaeb554d0a8d17e4b42c1b8b6079fb6bf760f0d94b576084c032f862433a915739a54e327 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 10/92f4989ed83422d56431bc39656d4c780348eb15d397ce352ade6b7fec08f973b53744bd41b94af021901e61acaf78fcc19e65bf464ecc0df958586a672700f0 + checksum: 10/fd884f4465f51c57fe584a11299320a5678934b14eed0ecc56003dd26f5638db4e858d97f2ab580937fa17a4a1c4ef73e32b82c7ef0bc06d820b3f32b932a45a languageName: node linkType: hard @@ -5871,7 +3851,7 @@ __metadata: languageName: node linkType: hard -"once@npm:1.x, once@npm:^1.3.0": +"once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -5910,27 +3890,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: "npm:~0.1.3" - fast-levenshtein: "npm:~2.0.6" - levn: "npm:~0.3.0" - prelude-ls: "npm:~1.1.2" - type-check: "npm:~0.3.2" - word-wrap: "npm:~1.2.3" - checksum: 10/6fa3c841b520f10aec45563962922215180e8cfbc59fde3ecd4ba2644ad66ca96bd19ad0e853f22fefcb7fc10e7612a5215b412cc66c5588f9a3138b38f6b5ff - languageName: node - linkType: hard - -"ordinal@npm:^1.0.3": - version: 1.0.3 - resolution: "ordinal@npm:1.0.3" - checksum: 10/6761c5b7606b6c4b0c22b4097dab4fe7ffcddacc49238eedf9c0ced877f5d4e4ad3f4fd43fefa1cc3f167cc54c7149267441b2ae85b81ccf13f45cf4b7947164 - languageName: node - linkType: hard - "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -6015,6 +3974,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.0 + resolution: "package-json-from-dist@npm:1.0.0" + checksum: 10/ac706ec856a5a03f5261e4e48fa974f24feb044d51f84f8332e2af0af04fbdbdd5bbbfb9cbbe354190409bc8307c83a9e38c6672c3c8855f709afb0006a009ea + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -6024,13 +3990,6 @@ __metadata: languageName: node linkType: hard -"parse-cache-control@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-cache-control@npm:1.0.1" - checksum: 10/13171cd97395bdcb9ad29e0b82a789f2313663f2392ab4f699c97ecd2059e18c00834b9c12c9b42f6b0f22bc3c9395d16db9d2e3db7e21538ad5cf2e5ec9fdbe - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -6085,7 +4044,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.0": +"path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -6109,13 +4068,6 @@ __metadata: languageName: node linkType: hard -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: 10/b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 - languageName: node - linkType: hard - "pbkdf2@npm:^3.0.17": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" @@ -6150,7 +4102,7 @@ __metadata: languageName: node linkType: hard -"pidtree@npm:0.6.0": +"pidtree@npm:~0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" bin: @@ -6159,35 +4111,14 @@ __metadata: languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10/8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec - languageName: node - linkType: hard - -"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.0": - version: 1.1.1 - resolution: "pkg-types@npm:1.1.1" +"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": + version: 1.1.3 + resolution: "pkg-types@npm:1.1.3" dependencies: confbox: "npm:^0.1.7" - mlly: "npm:^1.7.0" + mlly: "npm:^1.7.1" pathe: "npm:^1.1.2" - checksum: 10/225eaf7c0339027e176dd0d34a6d9a1384c21e0aab295e57dfbef1f1b7fc132f008671da7e67553e352b80b17ba38c531c720c914061d277410eef1bdd9d9608 - languageName: node - linkType: hard - -"pluralize@npm:^8.0.0": - version: 8.0.0 - resolution: "pluralize@npm:8.0.0" - checksum: 10/17877fdfdb7ddb3639ce257ad73a7c51a30a966091e40f56ea9f2f545b5727ce548d4928f8cb3ce38e7dc0c5150407d318af6a4ed0ea5265d378473b4c2c61ec - languageName: node - linkType: hard - -"poseidon-lite@npm:^0.2.0": - version: 0.2.0 - resolution: "poseidon-lite@npm:0.2.0" - checksum: 10/63c7668b480ee3d57aaca0eda7e56d563ab2bfcc40bbce0e4bccdc9deed4c0d68255749356e328b622ce8715b1f1ba689fe1a86ca78eb1056a51a18daa252ee1 + checksum: 10/06c03ca679ea8e3a1ea7cb74e92af1a486a6081401aac35f6aa51fb6f0855cd86bbfc713f9bfdaaa730815b5ae147b4d6a838710b550c1c4b3f54a6653ff04a3 languageName: node linkType: hard @@ -6198,50 +4129,12 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: 10/946a9f60d3477ca6b7d4c5e8e452ad1b98dc8aaa992cea939a6b926ac16cc4129d7217c79271dc808b5814b1537ad0af37f29a942e2eafbb92cfc5a1c87c38cb - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: "npm:^1.1.2" - checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 - languageName: node - linkType: hard - -"prettier-plugin-solidity@npm:^1.3.1": - version: 1.3.1 - resolution: "prettier-plugin-solidity@npm:1.3.1" - dependencies: - "@solidity-parser/parser": "npm:^0.17.0" - semver: "npm:^7.5.4" - solidity-comments-extractor: "npm:^0.0.8" - peerDependencies: - prettier: ">=2.3.0" - checksum: 10/45c1bf16ca960e43e8dc518db95a9eecfce941480e2737272ab259ea9dcb9796a7830a8884de21637f286f80f06d4b4163418d4d55e41347aee96ee93bc4e8f0 - languageName: node - linkType: hard - -"prettier@npm:^2.3.1, prettier@npm:^2.8.3": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24 - languageName: node - linkType: hard - "prettier@npm:^3.2.5": - version: 3.2.5 - resolution: "prettier@npm:3.2.5" + version: 3.3.2 + resolution: "prettier@npm:3.3.2" bin: prettier: bin/prettier.cjs - checksum: 10/d509f9da0b70e8cacc561a1911c0d99ec75117faed27b95cc8534cb2349667dee6351b0ca83fa9d5703f14127faa52b798de40f5705f02d843da133fc3aa416a + checksum: 10/83214e154afa5aa9b664c2506640212323eb1376b13379b2413dc351b7de0687629dca3f00ff2ec895ebd7e3a2adb7d7e231b6c77606e2358137f2150807405b languageName: node linkType: hard @@ -6259,13 +4152,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10/1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -6276,22 +4162,6 @@ __metadata: languageName: node linkType: hard -"promise@npm:^8.0.0": - version: 8.3.0 - resolution: "promise@npm:8.3.0" - dependencies: - asap: "npm:~2.0.6" - checksum: 10/55e9d0d723c66810966bc055c6c77a3658c0af7e4a8cc88ea47aeaf2949ca0bd1de327d9c631df61236f5406ad478384fa19a77afb3f88c0303eba9e5eb0a8d8 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -6299,22 +4169,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.4.0": - version: 6.12.1 - resolution: "qs@npm:6.12.1" - dependencies: - side-channel: "npm:^1.0.6" - checksum: 10/035bcad2a1ab0175bac7a74c904c15913bdac252834149ccff988c93a51de02642fe7be10e43058ba4dc4094bb28ce9b59d12b9e91d40997f445cfde3ecc1c29 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b - languageName: node - linkType: hard - "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -6343,7 +4197,7 @@ __metadata: languageName: node linkType: hard -"rc9@npm:^2.1.1": +"rc9@npm:^2.1.2": version: 2.1.2 resolution: "rc9@npm:2.1.2" dependencies: @@ -6387,21 +4241,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.2.2": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10/8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -6411,24 +4250,6 @@ __metadata: languageName: node linkType: hard -"rechoir@npm:^0.6.2": - version: 0.6.2 - resolution: "rechoir@npm:0.6.2" - dependencies: - resolve: "npm:^1.1.6" - checksum: 10/fe76bf9c21875ac16e235defedd7cbd34f333c02a92546142b7911a0f7c7059d2e16f441fe6fb9ae203f459c05a31b2bcf26202896d89e390eda7514d5d2702b - languageName: node - linkType: hard - -"recursive-readdir@npm:^2.2.2": - version: 2.2.3 - resolution: "recursive-readdir@npm:2.2.3" - dependencies: - minimatch: "npm:^3.0.5" - checksum: 10/19298852b0b87810aed5f2c81a73bfaaeb9ade7c9bf363f350fc1443f2cc3df66ecade5e102dfbb153fcd9df20342c301848e11e149e5f78759c1d55aa2c9c39 - languageName: node - linkType: hard - "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -6439,31 +4260,6 @@ __metadata: languageName: node linkType: hard -"reduce-flatten@npm:^2.0.0": - version: 2.0.0 - resolution: "reduce-flatten@npm:2.0.0" - checksum: 10/64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 - languageName: node - linkType: hard - -"req-cwd@npm:^2.0.0": - version: 2.0.0 - resolution: "req-cwd@npm:2.0.0" - dependencies: - req-from: "npm:^2.0.0" - checksum: 10/c44f9dea0b0f7d3a72be18a04f7769e0eefbadca363e3a346c1c02b79745126c871e1f6970357b3e731c26740aad8344bf80fb3ce055a2bcf8ca85ad2b44f519 - languageName: node - linkType: hard - -"req-from@npm:^2.0.0": - version: 2.0.0 - resolution: "req-from@npm:2.0.0" - dependencies: - resolve-from: "npm:^3.0.0" - checksum: 10/4c369881a2296e23e71668ed089c5d93b37652fe900ec9f1e1f5c1da65f6bca4ee271e97ba2b806fdea50219e011995d1df3c80a7209015cc1e1fc622507f140 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -6485,13 +4281,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-from@npm:3.0.0" - checksum: 10/c4189f1592a777f7d51c1ff6153df18b5d062c831fb0c623b4b87736c8a73c08e4eaab19e807399287040791f3e7aa0877f05f9d86739d3ef1ef0c727e9fe06c - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -6508,13 +4297,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.1.x": - version: 1.1.7 - resolution: "resolve@npm:1.1.7" - checksum: 10/0a4ff8a102b1d059321caf77563cb2c495979c734f9dc400a70e3ceaaafe76a72bbcc625f9361756348d7b6af6d3cd2815cfbe3109be655a2b18e62d1cdadfc5 - languageName: node - linkType: hard - "resolve@npm:1.17.0": version: 1.17.0 resolution: "resolve@npm:1.17.0" @@ -6524,7 +4306,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0": +"resolve@npm:^1.10.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -6537,13 +4319,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.1.x#optional!builtin": - version: 1.1.7 - resolution: "resolve@patch:resolve@npm%3A1.1.7#optional!builtin::version=1.1.7&hash=3bafbf" - checksum: 10/dc5c99fb47807d3771be3135ac6bdb892186973d0895ab17838f0b85bb575e03111214aa16cb68b6416df3c1dd658081a066dd7a9af6e668c28b0025080b615c - languageName: node - linkType: hard - "resolve@patch:resolve@npm%3A1.17.0#optional!builtin": version: 1.17.0 resolution: "resolve@patch:resolve@npm%3A1.17.0#optional!builtin::version=1.17.0&hash=c3c19d" @@ -6553,7 +4328,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -6583,17 +4358,10 @@ __metadata: languageName: node linkType: hard -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb - languageName: node - linkType: hard - -"rfdc@npm:^1.3.0": - version: 1.3.1 - resolution: "rfdc@npm:1.3.1" - checksum: 10/44cc6a82e2fe1db13b7d3c54e9ffd0b40ef070cbde69ffbfbb38dab8cee46bd68ba686784b96365ff08d04798bc121c3465663a0c91f2c421c90546c4366f4a6 +"rfdc@npm:^1.4.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10/2f3d11d3d8929b4bfeefc9acb03aae90f971401de0add5ae6c5e38fec14f0405e6a4aad8fdb76344bfdd20c5193110e3750cbbd28ba86d73729d222b6cf4a729 languageName: node linkType: hard @@ -6618,7 +4386,7 @@ __metadata: languageName: node linkType: hard -"rlp@npm:^2.2.3, rlp@npm:^2.2.4": +"rlp@npm:^2.2.3": version: 2.2.7 resolution: "rlp@npm:2.2.7" dependencies: @@ -6638,15 +4406,6 @@ __metadata: languageName: node linkType: hard -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - "safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -6654,13 +4413,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a - languageName: node - linkType: hard - "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -6668,31 +4420,7 @@ __metadata: languageName: node linkType: hard -"sc-istanbul@npm:^0.4.5": - version: 0.4.6 - resolution: "sc-istanbul@npm:0.4.6" - dependencies: - abbrev: "npm:1.0.x" - async: "npm:1.x" - escodegen: "npm:1.8.x" - esprima: "npm:2.7.x" - glob: "npm:^5.0.15" - handlebars: "npm:^4.0.1" - js-yaml: "npm:3.x" - mkdirp: "npm:0.5.x" - nopt: "npm:3.x" - once: "npm:1.x" - resolve: "npm:1.1.x" - supports-color: "npm:^3.1.0" - which: "npm:^1.1.1" - wordwrap: "npm:^1.0.0" - bin: - istanbul: lib/cli.js - checksum: 10/69acccb8ef3af117a71a57a4a1767ce845e62d1d6ff3d6fd2b5e0dc02746772c352bebee67fd0d0bb805a864bd4753741b118690955955bf34c990c3db36c0f8 - languageName: node - linkType: hard - -"scrypt-js@npm:3.0.1, scrypt-js@npm:^3.0.0": +"scrypt-js@npm:^3.0.0": version: 3.0.1 resolution: "scrypt-js@npm:3.0.1" checksum: 10/2f8aa72b7f76a6f9c446bbec5670f80d47497bccce98474203d89b5667717223eeb04a50492ae685ed7adc5a060fc2d8f9fd988f8f7ebdaf3341967f3aeff116 @@ -6747,7 +4475,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.5.4": +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.4": version: 7.6.2 resolution: "semver@npm:7.6.2" bin: @@ -6756,26 +4484,12 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" dependencies: randombytes: "npm:^2.1.0" - checksum: 10/ed3dabfbb565c48c9eb1ca8fe58f0d256902ab70a8a605be634ddd68388d5f728bb0bd1268e94fab628748ba8ad8392f01b05f3cbe1e4878b5c58c669fd3d1b4 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.1": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d + checksum: 10/445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58 languageName: node linkType: hard @@ -6805,54 +4519,19 @@ __metadata: languageName: node linkType: hard -"sha1@npm:^1.1.1": - version: 1.1.1 - resolution: "sha1@npm:1.1.1" - dependencies: - charenc: "npm:>= 0.0.1" - crypt: "npm:>= 0.0.1" - checksum: 10/da9f47e949988e2f595ef19733fd1dc736866ef6de4e421a55c13b444c03ae532e528b7350ae6ea55d9fb053be61d4648ec2cd5250d46cfdbdf4f6b4e763713d - languageName: node - linkType: hard - "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" dependencies: shebang-regex: "npm:^3.0.0" - checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shelljs@npm:^0.8.3": - version: 0.8.5 - resolution: "shelljs@npm:0.8.5" - dependencies: - glob: "npm:^7.0.0" - interpret: "npm:^1.0.0" - rechoir: "npm:^0.6.2" - bin: - shjs: bin/shjs - checksum: 10/f2178274b97b44332bbe9ddb78161137054f55ecf701c7a99db9552cb5478fe279ad5f5131d8a7c2f0730e01ccf0c629d01094143f0541962ce1a3d0243d23f7 + checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa languageName: node linkType: hard -"side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" - dependencies: - call-bind: "npm:^1.0.7" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - object-inspect: "npm:^1.13.1" - checksum: 10/eb10944f38cebad8ad643dd02657592fa41273ce15b8bfa928d3291aff2d30c20ff777cfe908f76ccc4551ace2d1245822fdc576657cce40e9066c638ca8fa4d +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 languageName: node linkType: hard @@ -6870,24 +4549,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10/94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - astral-regex: "npm:^2.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - checksum: 10/4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - "slice-ansi@npm:^5.0.0": version: 5.0.0 resolution: "slice-ansi@npm:5.0.0" @@ -6916,17 +4577,17 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" dependencies: agent-base: "npm:^7.1.1" debug: "npm:^4.3.4" - socks: "npm:^2.7.1" - checksum: 10/c2112c66d6322e497d68e913c3780f3683237fd394bfd480b9283486a86e36095d0020db96145d88f8ccd9cc73261b98165b461f9c1bf5dc17abfe75c18029ce + socks: "npm:^2.8.3" + checksum: 10/c8e7c2b398338b49a0a0f4d2bae5c0602aeeca6b478b99415927b6c5db349ca258448f2c87c6958ebf83eea17d42cbc5d1af0bfecb276cac10b9658b0f07f7d7 languageName: node linkType: hard -"socks@npm:^2.7.1": +"socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -6955,89 +4616,7 @@ __metadata: languageName: node linkType: hard -"solhint-plugin-prettier@npm:^0.1.0": - version: 0.1.0 - resolution: "solhint-plugin-prettier@npm:0.1.0" - dependencies: - "@prettier/sync": "npm:^0.3.0" - prettier-linter-helpers: "npm:^1.0.0" - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-solidity: ^1.0.0 - checksum: 10/241caa07b9d1570117cf0cc56371cc81c69fb17706dbc68136dfb112279c8c1cf815dbaa70c146acd06876e16d9a7385312b63302f2381868c02c3bdfa23715b - languageName: node - linkType: hard - -"solhint@npm:^3.3.6": - version: 3.6.2 - resolution: "solhint@npm:3.6.2" - dependencies: - "@solidity-parser/parser": "npm:^0.16.0" - ajv: "npm:^6.12.6" - antlr4: "npm:^4.11.0" - ast-parents: "npm:^0.0.1" - chalk: "npm:^4.1.2" - commander: "npm:^10.0.0" - cosmiconfig: "npm:^8.0.0" - fast-diff: "npm:^1.2.0" - glob: "npm:^8.0.3" - ignore: "npm:^5.2.4" - js-yaml: "npm:^4.1.0" - lodash: "npm:^4.17.21" - pluralize: "npm:^8.0.0" - prettier: "npm:^2.8.3" - semver: "npm:^7.5.2" - strip-ansi: "npm:^6.0.1" - table: "npm:^6.8.1" - text-table: "npm:^0.2.0" - dependenciesMeta: - prettier: - optional: true - bin: - solhint: solhint.js - checksum: 10/3ee71c3e2363c046b2fe4379d8cd16283e2fd5c8e07d6200b324cd82c0f22c4765cecb9b0a3c9a8097158810b4f34c4a2320b0ad1f13343035f9cd8cc16e5a41 - languageName: node - linkType: hard - -"solidity-comments-extractor@npm:^0.0.8": - version: 0.0.8 - resolution: "solidity-comments-extractor@npm:0.0.8" - checksum: 10/615d53c2e8f5e7a1ad26e4e7e3bdc8b7c7885420611fcd690864bb54a9af2813a93cf30bdede16273791bda16eebc7a4ce1379d458ac2d7834074eb4936dea70 - languageName: node - linkType: hard - -"solidity-coverage@npm:^0.8.0": - version: 0.8.12 - resolution: "solidity-coverage@npm:0.8.12" - dependencies: - "@ethersproject/abi": "npm:^5.0.9" - "@solidity-parser/parser": "npm:^0.18.0" - chalk: "npm:^2.4.2" - death: "npm:^1.1.0" - difflib: "npm:^0.2.4" - fs-extra: "npm:^8.1.0" - ghost-testrpc: "npm:^0.0.2" - global-modules: "npm:^2.0.0" - globby: "npm:^10.0.1" - jsonschema: "npm:^1.2.4" - lodash: "npm:^4.17.21" - mocha: "npm:^10.2.0" - node-emoji: "npm:^1.10.0" - pify: "npm:^4.0.1" - recursive-readdir: "npm:^2.2.2" - sc-istanbul: "npm:^0.4.5" - semver: "npm:^7.3.4" - shelljs: "npm:^0.8.3" - web3-utils: "npm:^1.3.6" - peerDependencies: - hardhat: ^2.11.0 - bin: - solidity-coverage: plugins/bin.js - checksum: 10/69f73bba3f3b24bddac00f88a1e739b08b7b37edad46757f477c7ae0422e9f0f16c9da4e8521cb5d83054e2e990dc16d8ea931a334af245e48238577f64be00f - languageName: node - linkType: hard - -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16": +"source-map-support@npm:^0.5.13": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -7047,22 +4626,13 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": +"source-map@npm:^0.6.0": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 10/59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff languageName: node linkType: hard -"source-map@npm:~0.2.0": - version: 0.2.0 - resolution: "source-map@npm:0.2.0" - dependencies: - amdefine: "npm:>=0.0.4" - checksum: 10/616b67d874a4bce443d285db07f8e4c6b1a1e60df17ea4e4d357c8173bd4b165c97386ee0675ef67afb9a9f1bdbd511368544febc4d92c8d8d1ebda57c4e7efb - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -7091,9 +4661,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.17 - resolution: "spdx-license-ids@npm:3.0.17" - checksum: 10/8f6c6ae02ebb25b4ca658b8990d9e8a8f8d8a95e1d8b9fd84d87eed80a7dc8f8073d6a8d50b8a0295c0e8399e1f8814f5c00e2985e6bf3731540a16f7241cbf1 + version: 3.0.18 + resolution: "spdx-license-ids@npm:3.0.18" + checksum: 10/45fdbb50c4bbe364720ef0acd19f4fc1914d73ba1e2b1ce9db21ee12d7f9e8bf14336289f6ad3d5acac3dc5b91aafe61e9c652d5806b31cbb8518a14979a16ff languageName: node linkType: hard @@ -7120,13 +4690,6 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10/c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa - languageName: node - linkType: hard - "ssri@npm:^10.0.0": version: 10.0.6 resolution: "ssri@npm:10.0.6" @@ -7159,20 +4722,13 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:0.3.2": +"string-argv@npm:~0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" checksum: 10/f9d3addf887026b4b5f997a271149e93bf71efc8692e7dc0816e8807f960b18bcb9787b45beedf0f97ff459575ee389af3f189d8b649834cac602f2e857e75af languageName: node linkType: hard -"string-format@npm:^2.0.0": - version: 2.0.0 - resolution: "string-format@npm:2.0.0" - checksum: 10/8889014e926f69aaa8d117551a84a97cd7932484f5b0ab5b5b760eb0761e5722dee6112893ea742efac5adeb1b08dfedb77d9a91192dcd683a331e06c5148a87 - languageName: node - linkType: hard - "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -7184,16 +4740,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10/d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a - languageName: node - linkType: hard - "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -7206,13 +4752,13 @@ __metadata: linkType: hard "string-width@npm:^7.0.0": - version: 7.1.0 - resolution: "string-width@npm:7.1.0" + version: 7.2.0 + resolution: "string-width@npm:7.2.0" dependencies: emoji-regex: "npm:^10.3.0" get-east-asian-width: "npm:^1.0.0" strip-ansi: "npm:^7.1.0" - checksum: 10/a183573fe7209e0d294f661846d33f8caf72aa86d983e5b48a0ed45ab15bcccb02c6f0344b58b571988871105457137b8207855ea536827dbc4a376a0f31bf8f + checksum: 10/42f9e82f61314904a81393f6ef75b832c39f39761797250de68c041d8ba4df2ef80db49ab6cd3a292923a6f0f409b8c9980d120f7d32c820b4a8a84a2598a295 languageName: node linkType: hard @@ -7225,15 +4771,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10/7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 - languageName: node - linkType: hard - "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -7243,15 +4780,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10/d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca - languageName: node - linkType: hard - "strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" @@ -7293,31 +4821,13 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:3.1.1": +"strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 10/492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard -"supports-color@npm:8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282 - languageName: node - linkType: hard - -"supports-color@npm:^3.1.0": - version: 3.2.3 - resolution: "supports-color@npm:3.2.3" - dependencies: - has-flag: "npm:^1.0.0" - checksum: 10/476a70d263a1f7ac11c26c10dfc58f0d9439edf198005b95f0e358ea8182d06b492d96320f16a841e4e968c7189044dd8c3f3037bd533480d15c7cc00e17c5d8 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -7336,55 +4846,19 @@ __metadata: languageName: node linkType: hard -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e - languageName: node - linkType: hard - -"sync-request@npm:^6.0.0": - version: 6.1.0 - resolution: "sync-request@npm:6.1.0" - dependencies: - http-response-object: "npm:^3.0.1" - sync-rpc: "npm:^1.2.1" - then-request: "npm:^6.0.0" - checksum: 10/7f2b63b77c8440d36212c61b4babdf740a4ac37492f62f1da5e59e4081c940275a9d929e359ba427d2796e1e401fe00f35f0354b356b3709524a9bcda093313c - languageName: node - linkType: hard - -"sync-rpc@npm:^1.2.1": - version: 1.3.6 - resolution: "sync-rpc@npm:1.3.6" - dependencies: - get-port: "npm:^3.1.0" - checksum: 10/13c05461a32f06f9f41993374b3b9e3145105baede4097bd385e57d841ac0b47dad51737a919c1592df5b04aabdfee03f1d28562c37d5a76ef704069db1b4522 - languageName: node - linkType: hard - -"table-layout@npm:^1.0.2": - version: 1.0.2 - resolution: "table-layout@npm:1.0.2" +"supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" dependencies: - array-back: "npm:^4.0.1" - deep-extend: "npm:~0.6.0" - typical: "npm:^5.2.0" - wordwrapjs: "npm:^4.0.0" - checksum: 10/5dd12bc64ddf246f774fc51b45398dd8da900b7bb246595c84007ea292c15936264701660b80704be17da5d4066a9a250549418c40a2b635a0916c9294b103af + has-flag: "npm:^4.0.0" + checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282 languageName: node linkType: hard -"table@npm:^6.8.0, table@npm:^6.8.1": - version: 6.8.2 - resolution: "table@npm:6.8.2" - dependencies: - ajv: "npm:^8.0.1" - lodash.truncate: "npm:^4.4.2" - slice-ansi: "npm:^4.0.0" - string-width: "npm:^4.2.3" - strip-ansi: "npm:^6.0.1" - checksum: 10/2946162eb87a91b9bf4283214d26830db96f09cf517eff18e7501d47a4770c529b432bb54c9394337c3dfd6c8dbf66581f76edb37e9838beb6ec394080af4ac2 +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e languageName: node linkType: hard @@ -7409,32 +4883,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10/4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 - languageName: node - linkType: hard - -"then-request@npm:^6.0.0": - version: 6.0.2 - resolution: "then-request@npm:6.0.2" - dependencies: - "@types/concat-stream": "npm:^1.6.0" - "@types/form-data": "npm:0.0.33" - "@types/node": "npm:^8.0.0" - "@types/qs": "npm:^6.2.31" - caseless: "npm:~0.12.0" - concat-stream: "npm:^1.6.0" - form-data: "npm:^2.2.0" - http-basic: "npm:^8.1.1" - http-response-object: "npm:^3.0.1" - promise: "npm:^8.0.0" - qs: "npm:^6.4.0" - checksum: 10/7a33192fa03493fa7d5a40dbe2039271723c1c226aaa6db91576b439bf56393c8fe5a206478f37855c98284adf31d18c5bb7bafc94ebedae7c5bdb26a580dacc - languageName: node - linkType: hard - "through2@npm:^4.0.0": version: 4.0.2 resolution: "through2@npm:4.0.2" @@ -7490,74 +4938,6 @@ __metadata: languageName: node linkType: hard -"ts-command-line-args@npm:^2.2.0": - version: 2.5.1 - resolution: "ts-command-line-args@npm:2.5.1" - dependencies: - chalk: "npm:^4.1.0" - command-line-args: "npm:^5.1.1" - command-line-usage: "npm:^6.1.0" - string-format: "npm:^2.0.0" - bin: - write-markdown: dist/write-markdown.js - checksum: 10/dd1b1fcd7aea599a909f037903bd4903c25e44e034dac8e1a2c049f34992c6cb4c9c692023c92d0dbd0f6183c3bd1bfff2181fee57099b6c5f296d38038224bf - languageName: node - linkType: hard - -"ts-essentials@npm:^7.0.1": - version: 7.0.3 - resolution: "ts-essentials@npm:7.0.3" - peerDependencies: - typescript: ">=3.7.0" - checksum: 10/021b4263ddd58897171f3f5c467b5c872f76ba2ea07dfc11fa9667ba8d62ccb7f390db3e581139dcc6da94c3ff6306921f574acdb2b94cbc9d7da3e859e24665 - languageName: node - linkType: hard - -"ts-node@npm:^10.9.2": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": "npm:^0.8.0" - "@tsconfig/node10": "npm:^1.0.7" - "@tsconfig/node12": "npm:^1.0.7" - "@tsconfig/node14": "npm:^1.0.0" - "@tsconfig/node16": "npm:^1.0.2" - acorn: "npm:^8.4.1" - acorn-walk: "npm:^8.1.1" - arg: "npm:^4.1.0" - create-require: "npm:^1.1.0" - diff: "npm:^4.0.1" - make-error: "npm:^1.1.1" - v8-compile-cache-lib: "npm:^3.0.1" - yn: "npm:3.1.1" - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 - languageName: node - linkType: hard - -"tslib@npm:2.4.0": - version: 2.4.0 - resolution: "tslib@npm:2.4.0" - checksum: 10/d8379e68b36caf082c1905ec25d17df8261e1d68ddc1abfd6c91158a064f6e4402039ae7c02cf4c81d12e3a2a2c7cd8ea2f57b233eb80136a2e3e7279daf2911 - languageName: node - linkType: hard - "tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -7586,22 +4966,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: "npm:~1.1.2" - checksum: 10/11dec0b50d7c3fd2e630b4b074ba36918ed2b1efbc87dfbd40ba9429d49c58d12dad5c415ece69fcf358fa083f33466fc370f23ab91aa63295c45d38b3a60dda - languageName: node - linkType: hard - -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10/5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d - languageName: node - linkType: hard - "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" @@ -7644,85 +5008,13 @@ __metadata: languageName: node linkType: hard -"typechain@npm:^8.3.0": - version: 8.3.2 - resolution: "typechain@npm:8.3.2" - dependencies: - "@types/prettier": "npm:^2.1.1" - debug: "npm:^4.3.1" - fs-extra: "npm:^7.0.0" - glob: "npm:7.1.7" - js-sha3: "npm:^0.8.0" - lodash: "npm:^4.17.15" - mkdirp: "npm:^1.0.4" - prettier: "npm:^2.3.1" - ts-command-line-args: "npm:^2.2.0" - ts-essentials: "npm:^7.0.1" - peerDependencies: - typescript: ">=4.3.0" - bin: - typechain: dist/cli/cli.js - checksum: 10/d6dad2f70bb3914c56bac6758ba2a761a1592a8258aa9f84360fda410c27bfade0b2f49faa366df94ac3c2f567d40b3db17f4a32903ef52bc7f9a020545eeb7f - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 10/2cc1bcf7d8c1237f6a16c04efc06637b2c5f2d74e58e84665445cf87668b85a21ab18dd751fa49eee6ae024b70326635d7b79ad37b1c370ed2fec6aeeeb52714 - languageName: node - linkType: hard - -"typescript@npm:^5.3.3": - version: 5.4.5 - resolution: "typescript@npm:5.4.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/d04a9e27e6d83861f2126665aa8d84847e8ebabcea9125b9ebc30370b98cb38b5dff2508d74e2326a744938191a83a69aa9fddab41f193ffa43eabfdf3f190a5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": - version: 5.4.5 - resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/760f7d92fb383dbf7dee2443bf902f4365db2117f96f875cf809167f6103d55064de973db9f78fe8f31ec08fff52b2c969aee0d310939c0a3798ec75d0bca2e1 - languageName: node - linkType: hard - -"typical@npm:^4.0.0": - version: 4.0.0 - resolution: "typical@npm:4.0.0" - checksum: 10/aefe2c24b025cda22534ae2594df4a1df5db05b5fe3692890fd51db741ca4f18937a149f968b8d56d9a7b0756e7cd8843b1907bea21987ff4a06619c54d5a575 - languageName: node - linkType: hard - -"typical@npm:^5.2.0": - version: 5.2.0 - resolution: "typical@npm:5.2.0" - checksum: 10/fd8e4197cb2e021ca6d11fea0018ee219c29bf4160ab613492f74c0e21806003d1cd92a15088b111778a7b5c6432e4e28321899785a86980b390b87c4010efe5 - languageName: node - linkType: hard - -"ufo@npm:^1.4.0, ufo@npm:^1.5.3": +"ufo@npm:^1.5.3": version: 1.5.3 resolution: "ufo@npm:1.5.3" checksum: 10/2b30dddd873c643efecdb58cfe457183cd4d95937ccdacca6942c697b87a2c578232c25a5149fda85436696bf0fdbc213bf2b220874712bc3e58c0fb00a2c950 languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" - bin: - uglifyjs: bin/uglifyjs - checksum: 10/4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e - languageName: node - linkType: hard - "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -7764,13 +5056,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10/ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 - languageName: node - linkType: hard - "unpipe@npm:1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -7785,7 +5070,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": +"uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -7794,14 +5079,7 @@ __metadata: languageName: node linkType: hard -"utf8@npm:3.0.0": - version: 3.0.0 - resolution: "utf8@npm:3.0.0" - checksum: 10/31d19c4faacbb65b09ebc1c21c32b20bdb0919c6f6773cee5001b99bb83f8e503e7233c08fc71ebb34f7cfebd95cec3243b81d90176097aa2f286cccb4ce866e - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 @@ -7817,13 +5095,6 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -7834,33 +5105,6 @@ __metadata: languageName: node linkType: hard -"web3-utils@npm:^1.3.6": - version: 1.10.4 - resolution: "web3-utils@npm:1.10.4" - dependencies: - "@ethereumjs/util": "npm:^8.1.0" - bn.js: "npm:^5.2.1" - ethereum-bloom-filters: "npm:^1.0.6" - ethereum-cryptography: "npm:^2.1.2" - ethjs-unit: "npm:0.1.6" - number-to-bn: "npm:1.7.0" - randombytes: "npm:^2.1.0" - utf8: "npm:3.0.0" - checksum: 10/3e586b638cdae9fa45b7698e8a511ae2cbf60e219a900351ae38d384beaaf67424ac6e1d9c5098c3fb8f2ff3cc65a70d977a20bdce3dad542cb50deb666ea2a3 - languageName: node - linkType: hard - -"which@npm:^1.1.1, which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10/549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e - languageName: node - linkType: hard - "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -7892,34 +5136,10 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:~1.2.3": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10/1ec6f6089f205f83037be10d0c4b34c9183b0b63fca0834a5b3cee55dd321429d73d40bb44c8fc8471b5203d6e8f8275717f49a8ff4b2b0ab41d7e1b563e0854 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10/497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd - languageName: node - linkType: hard - -"wordwrapjs@npm:^4.0.0": - version: 4.0.1 - resolution: "wordwrapjs@npm:4.0.1" - dependencies: - reduce-flatten: "npm:^2.0.0" - typical: "npm:^5.2.0" - checksum: 10/4182c48c9d3eab0932fb9f9f202e3f1d4d28ff6db3fd2e1654ec8606677d8e0ab80110f0f8e2e236ee2b52631cbc5fccf3097e9287e3ace20cbc1613a784befc - languageName: node - linkType: hard - -"workerpool@npm:6.2.1": - version: 6.2.1 - resolution: "workerpool@npm:6.2.1" - checksum: 10/3e637f76320cab92eaeffa4fbefb351db02e20aa29245d8ee05fa7c088780ef7b4446bfafff2668a22fd94b7d9d97c7020117036ac77a76370ecea278b9a9b91 +"workerpool@npm:^6.5.1": + version: 6.5.1 + resolution: "workerpool@npm:6.5.1" + checksum: 10/b1b00139fe62f2ebec556a2af8085bf6e7502ad26cf2a4dcb34fb4408b2e68aa12c88b0a50cb463b24f2806d60fa491fc0da933b56ec3b53646aeec0025d14cb languageName: node linkType: hard @@ -7963,39 +5183,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:7.4.6": - version: 7.4.6 - resolution: "ws@npm:7.4.6" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/150e3f917b7cde568d833a5ea6ccc4132e59c38d04218afcf2b6c7b845752bd011a9e0dc1303c8694d3c402a0bdec5893661a390b71ff88f0fc81a4e4e66b09c - languageName: node - linkType: hard - -"ws@npm:8.5.0": - version: 8.5.0 - resolution: "ws@npm:8.5.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/f0ee700970a0bf925b1ec213ca3691e84fb8b435a91461fe3caf52f58c6cec57c99ed5890fbf6978824c932641932019aafc55d864cad38ac32577496efd5d3a - languageName: node - linkType: hard - "ws@npm:^7.4.6": - version: 7.5.9 - resolution: "ws@npm:7.5.9" + version: 7.5.10 + resolution: "ws@npm:7.5.10" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -8004,7 +5194,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10/171e35012934bd8788150a7f46f963e50bac43a4dc524ee714c20f258693ac4d3ba2abadb00838fdac42a47af9e958c7ae7e6f4bc56db047ba897b8a2268cf7c + checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 languageName: node linkType: hard @@ -8022,30 +5212,16 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.3.4": - version: 2.3.4 - resolution: "yaml@npm:2.3.4" - checksum: 10/f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b - languageName: node - linkType: hard - -"yaml@npm:^2.3.1": - version: 2.4.2 - resolution: "yaml@npm:2.4.2" +"yaml@npm:^2.3.1, yaml@npm:~2.4.2": + version: 2.4.5 + resolution: "yaml@npm:2.4.5" bin: yaml: bin.mjs - checksum: 10/6eafbcd68dead734035f6f72af21bd820c29214caf7d8e40c595671a3c908535cef8092b9660a1c055c5833aa148aa640e0c5fa4adb5af2dacd6d28296ccd81c - languageName: node - linkType: hard - -"yargs-parser@npm:20.2.4": - version: 20.2.4 - resolution: "yargs-parser@npm:20.2.4" - checksum: 10/db8f251ae40e24782d5c089ed86883ba3c0ce7f3c174002a67ec500802f928df9d505fea5d04829769221ce20b0f69f6fb1138fbb2e2fb102e3e9d426d20edab + checksum: 10/b09bf5a615a65276d433d76b8e34ad6b4c0320b85eb3f1a39da132c61ae6e2ff34eff4624e6458d96d49566c93cf43408ba5e568218293a8c6541a2006883f64 languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3, yargs-parser@npm:^20.2.9": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc @@ -8059,7 +5235,7 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:2.0.0": +"yargs-unparser@npm:^2.0.0": version: 2.0.0 resolution: "yargs-unparser@npm:2.0.0" dependencies: @@ -8071,7 +5247,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:16.2.0": +"yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" dependencies: @@ -8101,13 +5277,6 @@ __metadata: languageName: node linkType: hard -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -8121,14 +5290,10 @@ __metadata: dependencies: "@commitlint/cli": "npm:^18.6.1" "@commitlint/config-conventional": "npm:^18.6.2" - "@types/glob": "npm:^7.2.0" - "@types/node": "npm:^20" changelogithub: "patch:changelogithub@npm%3A0.13.3#~/.yarn/patches/changelogithub-npm-0.13.3-1783949906.patch" czg: "npm:^1.9.1" husky: "npm:^9.0.11" lint-staged: "npm:^15.2.2" prettier: "npm:^3.2.5" - ts-node: "npm:^10.9.2" - typescript: "npm:^5.3.3" languageName: unknown linkType: soft