diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..02b15f4f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +**/node_modules/ +**/cache +**/.env +Dockerfile +.github +.vscode +.changeset +.dockerignore +.secrets \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 94babbf4..a13a8dc2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,7 @@ const path = require("path"); +const OFF = 0; + /** * @type {import("eslint").Linter.Config} */ @@ -10,12 +12,22 @@ module.exports = { mocha: true, node: true, }, - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint", "simple-import-sort", "prettier"], extends: ["plugin:prettier/recommended"], + parser: "@typescript-eslint/parser", parserOptions: { ecmaVersion: 12, }, + plugins: ["@typescript-eslint", "prettier", "simple-import-sort", "sort-keys-fix", "typescript-sort-keys"], + rules: { + "@typescript-eslint/sort-type-union-intersection-members": "error", + camelcase: "off", + "no-console": OFF, + "simple-import-sort/exports": "error", + "simple-import-sort/imports": "error", + "sort-keys-fix/sort-keys-fix": "error", + "typescript-sort-keys/interface": "error", + "typescript-sort-keys/string-enum": "error", + }, settings: { "import/parsers": { "@typescript-eslint/parser": [".js", ".jsx", ".ts", ".tsx", ".d.ts"], @@ -29,9 +41,4 @@ module.exports = { }, }, }, - rules: { - camelcase: "off", - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error", - }, }; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..3ec79e40 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @andresaiello @fadeev @lucas-janon diff --git a/.github/workflows/gitguardian.yml b/.github/workflows/gitguardian.yml new file mode 100644 index 00000000..43cee265 --- /dev/null +++ b/.github/workflows/gitguardian.yml @@ -0,0 +1,21 @@ +name: GitGuardian scan + +on: [push, pull_request] + +jobs: + scanning: + name: GitGuardian scan + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 # fetch all history so multiple commits can be scanned + - name: GitGuardian scan + uses: GitGuardian/ggshield-action@master + env: + GITHUB_PUSH_BEFORE_SHA: ${{ github.event.before }} + GITHUB_PUSH_BASE_SHA: ${{ github.event.base }} + GITHUB_PULL_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + GITGUARDIAN_API_KEY: ${{ secrets.GITGUARDIAN_API_KEY }} \ No newline at end of file diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 00000000..c951c95e --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,26 @@ +name: Lint TS/JS + +on: + pull_request: + branches: + - "*" + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: "16" + registry-url: "https://registry.npmjs.org" + + - name: Install Dependencies + run: yarn install + + - name: Lint + run: yarn lint diff --git a/.github/workflows/publish-npm.yaml b/.github/workflows/publish-npm.yaml new file mode 100644 index 00000000..8aceae0f --- /dev/null +++ b/.github/workflows/publish-npm.yaml @@ -0,0 +1,62 @@ +name: Publish to NPM + +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: "16" + registry-url: "https://registry.npmjs.org" + + - name: Install Dependencies + run: yarn install + + - name: Determine NPM Tag zeta app contracts + id: determine-npm-tag-zeta-app-contracts + working-directory: packages/zeta-app-contracts + run: | + VERSION_TAG=${GITHUB_REF#refs/tags/v} + if [[ $VERSION_TAG == *"-"* ]]; then + echo ::set-output name=NPM_TAG::${VERSION_TAG#*-} + else + echo ::set-output name=NPM_TAG::latest + fi + env: + GITHUB_REF: ${{ github.ref }} + + - name: Publish to NPM zeta app contracts + working-directory: packages/zeta-app-contracts + run: npm publish --tag ${{ steps.determine-npm-tag-zeta-app-contracts.outputs.NPM_TAG }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + GITHUB_REF: ${{ github.ref }} + + - name: Determine NPM Tag zevm app contracts + id: determine-npm-tag-zevm-app-contracts + working-directory: packages/zevm-app-contracts + run: | + VERSION_TAG=${GITHUB_REF#refs/tags/v} + if [[ $VERSION_TAG == *"-"* ]]; then + echo ::set-output name=NPM_TAG::${VERSION_TAG#*-} + else + echo ::set-output name=NPM_TAG::latest + fi + env: + GITHUB_REF: ${{ github.ref }} + + - name: Publish to NPM zevm app contracts + working-directory: packages/zevm-app-contracts + run: npm publish --tag ${{ steps.determine-npm-tag-zevm-app-contracts.outputs.NPM_TAG }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + GITHUB_REF: ${{ github.ref }} diff --git a/.github/workflows/semantic-pr.yaml b/.github/workflows/semantic-pr.yaml new file mode 100644 index 00000000..498b95be --- /dev/null +++ b/.github/workflows/semantic-pr.yaml @@ -0,0 +1,16 @@ +name: "Semantic PR" +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..bee83c99 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,32 @@ +name: Test + +on: + pull_request: + branches: + - "*" + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: "16" + registry-url: "https://registry.npmjs.org" + + - name: Install Dependencies + run: yarn install + + - name: Test + run: yarn test + working-directory: packages/zeta-app-contracts + + - name: Test + run: yarn test + working-directory: packages/zevm-app-contracts + \ No newline at end of file diff --git a/.gitignore b/.gitignore index fa259158..f5e75401 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ node_modules !.yarn/sdks !.yarn/versions + # Hardhat artifacts typechain-types @@ -20,3 +21,12 @@ tsconfig.tsbuildinfo # Misc .env .DS_Store +.secrets +.wallet.json + +# Slither +scripts/slither-results/* +!scripts/slither-results/.gitkeep + +**/coverage/* +**/coverage.json diff --git a/.solhint.json b/.solhint.json index a513c7a4..5dc69539 100644 --- a/.solhint.json +++ b/.solhint.json @@ -1,7 +1,7 @@ { "extends": "solhint:recommended", "rules": { - "compiler-version": ["error", "0.8.9"], + "compiler-version": ["error", "0.8.7"], "func-visibility": ["warn", { "ignoreConstructors": true }], "reason-string": ["warn", { "maxLength": 80 }], "no-empty-blocks": "off", diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..955672f6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ + +FROM node:16.14-alpine + +ENV SHELL /bin/ash +ENV EXECUTE_PROGRAMMATICALLY=true + +RUN apk add --update python3 yarn git nodejs make g++ + +## Install node modules before the code is copied to the container +WORKDIR /home/zetachain/ +COPY package*.json ./ +COPY packages/zeta-app-contracts/package.json ./packages/zeta-app-contracts/package.json +COPY packages/zevm-app-contracts/package.json ./packages/zevm-app-contracts/package.json +RUN yarn install ; exit 0 + +COPY . ./ +RUN yarn install + +RUN yarn add solc@0.5.10 solc@0.6.6 solc@0.7.6 solc@0.8.7 + +RUN cd packages/zeta-app-contracts && npx hardhat compile && cd - +RUN cd packages/zevm-app-contracts && npx hardhat compile && cd - + +WORKDIR /home/zetachain/ + +ENTRYPOINT ["ash"] + diff --git a/README.md b/README.md index 9b2aac04..532de0a8 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ ZetaChain is a public, decentralized blockchain and smart contract platform buil * Utilities to interact with ZetaChain's contracts from your dApp, scripts, or tests. * Interfaces to easily develop omnichain contracts. -* Omnichain dApp example contracts. -* Protocol native contracts (Zeta Token, Zeta Connector). ## Learn more about ZetaChain @@ -32,6 +30,12 @@ ZetaChain is a public, decentralized blockchain and smart contract platform buil yarn compile +### Packages + +#### [Zeta App contracts](packages/zeta-app-contracts) + +#### [ZEVM App contracts](packages/zevm-app-contracts) + ### Cross-repo commands #### Package-specific commands @@ -62,6 +66,26 @@ yarn lint yarn lint:fix ``` +## Coverage +To check the test coverage run the follow command on the desire package + +```bash +npx hardhat coverage +``` + +## Static test +We run slither on our packages. If you want to run it should install slither + +```bash +brew install slither-analyzer +``` +and execute it + +```bash +slither . --filter-paths "contracts/test/|node_modules/" --exclude naming-convention +``` + ## Contributing -We welcome (and appreciate) everyone's contributions, if you wanna contribute, read [CONTRIBUTING.md](CONTRIBUTING.md) for next steps. +We welcome (and appreciate) everyone's contributions. If you wanna contribute, read [CONTRIBUTING.md](CONTRIBUTING.md) for next steps. + diff --git a/bugbounty.md b/bugbounty.md new file mode 100644 index 00000000..8de375d3 --- /dev/null +++ b/bugbounty.md @@ -0,0 +1,45 @@ +## Bug Bounty Overview + +ZetaChain is committed to security across all aspects of its ecosystem. To that end, ZetaChain has established a bug bounty program to reward researchers, developers, and users who help identify and report security vulnerabilities. + +You can access and report issues at [https://immunefi.com/bounty/zetachain/](https://immunefi.com/bounty/zetachain/). + +## Scope + +The scope of this bug bounty program is focused on ZetaChain's smart contracts, public-facing APIs, blockchain protocol/infrastructure, and web applications. + +## Program Guidelines + +1. All reports must be submitted through Immunefi, accessible [here](https://immunefi.com/bounty/zetachain/). +2. Report any suspected vulnerability promptly. +3. Do not attempt to exploit a vulnerability without prior authorization. +4. Do not publicly disclose a vulnerability before it is reported and patched. +5. Do not access data or systems beyond the scope of the vulnerability. +6. Do not use social engineering techniques. +7. Do not attempt to access accounts or personal data of users. + +## Rewards + +The rewards for successful vulnerability reports range from $5,000 to $100,000, depending on the severity of the issue. All payouts are to be done by the ZetaChain team through Immunefi. + +### **Smart Contracts** + +| Critical | USD $30,000 to $100,000 | +| --- | --- | +| High | USD $10,000 to $30,000 | +| Medium | USD $10,000 | + +### **Websites and Applications** + +| Critical | USD $15,000 to $30,000 | +| --- | --- | +| High | USD $5,000 to $15,000 | +| Medium | USD $5,000 | + +## Responsible Disclosure + +We value responsible disclosure, and we encourage all participants to act responsibly when reporting vulnerabilities. + +## Contact + +For any questions or concerns, please contact us at bugbounty@zetachain.com. diff --git a/package.json b/package.json index 90178c9a..569e7040 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { "name": "zetachain", "license": "MIT", - "private": true, + "version": "0.1.0", + "private": false, "workspaces": { "packages": [ "packages/*" @@ -15,25 +16,31 @@ "crosschain" ], "scripts": { - "compile": "yarn workspaces foreach -pv run compile", "clean": "yarn workspaces foreach -pv run clean", - "lint": "npx eslint . --ext .js,.ts", + "compile": "yarn workspaces foreach -pv run compile", + "g:prepublishOnly": "yarn workspaces foreach -pv run prepublishOnly", "lint:fix": "npx eslint . --ext .js,.ts --fix", - "test": "yarn workspaces foreach -ptv run test" + "lint": "npx eslint . --ext .js,.ts", + "slither": "npx ts-node ./scripts/slither.ts", + "test": "yarn workspaces foreach -ptv run test", + "g:changeset": "changeset", + "g:release": "yarn changeset publish", + "setup-tutorial": "ts-node ./scripts/setup-tutorial.ts" }, "devDependencies": { + "@changesets/cli": "^2.23.1", + "@nomicfoundation/hardhat-verify": "2.0.3", "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-etherscan": "3.0.3", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^10.0.0", "@typechain/hardhat": "^6.0.0", "@types/chai": "^4.3.1", - "@types/mocha": "^9.1.1", + "@types/inquirer": "^8.2.1", + "@types/mocha": "^10.0.1", "@types/node": "^17.0.25", "@typescript-eslint/eslint-plugin": "^5.20.0", "@typescript-eslint/parser": "^5.20.0", "chai": "^4.3.6", - "chai-bignumber": "^3.0.0", "dotenv": "^16.0.0", "eslint": "^8.13.0", "eslint-config-prettier": "^8.5.0", @@ -44,14 +51,21 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-simple-import-sort": "7.0.0", - "ethereum-waffle": "^3.4.4", + "eslint-plugin-sort-keys-fix": "1.1.2", + "eslint-plugin-typescript-sort-keys": "2.1.0", + "ethereum-waffle": "^4.0.9", "ethereumjs-utils": "^5.2.5", "ethers": "5.6.8", - "hardhat": "2.9.7", - "mocha": "^9.2.2", - "ts-mocha": "^9.0.2", + "hardhat": "2.12.6", + "inquirer": "^8.2.4", + "mocha": "^10.2.0", + "ts-mocha": "^10.0.0", + "ts-node": "10.8.1", "typechain": "^8.0.0", "typescript": "^4.6.3" }, - "packageManager": "yarn@3.2.0" -} + "packageManager": "yarn@3.2.0", + "dependencies": { + "solc": "0.8.7" + } +} \ No newline at end of file diff --git a/packages/addresses/hardhat.config.ts b/packages/addresses/hardhat.config.ts deleted file mode 100644 index a3b8359f..00000000 --- a/packages/addresses/hardhat.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { HardhatUserConfig } from "hardhat/types"; - -const config: HardhatUserConfig = {}; - -export default config; diff --git a/packages/addresses/package.json b/packages/addresses/package.json deleted file mode 100644 index 03cc3445..00000000 --- a/packages/addresses/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@zetachain/addresses", - "version": "0.0.1", - "license": "MIT", - "main": "src/index.ts", - "scripts": { - "tsc:watch": "npx tsc --watch" - } -} diff --git a/packages/addresses/src/add-new-address.ts b/packages/addresses/src/add-new-address.ts deleted file mode 100644 index 1fb9e423..00000000 --- a/packages/addresses/src/add-new-address.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { addNewAddress } from "./addresses.helpers"; - -const name = process.argv[2]; - -if (!name) { - console.log("Usage: 'ts-node src/add-new-address '."); - process.exit(1); -} - -addNewAddress(name); diff --git a/packages/addresses/src/add-new-network.ts b/packages/addresses/src/add-new-network.ts deleted file mode 100644 index 60ff8be4..00000000 --- a/packages/addresses/src/add-new-network.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { addNewNetwork, isZetaNetworkName } from "./addresses.helpers"; - -const name = process.argv[2]; -const parsedAddTo = process.argv[3].split(","); - -if (!name || !parsedAddTo.every(isZetaNetworkName)) { - console.log("Usage: 'ts-node src/add-new-network '."); - console.log("Usage e.g.: 'ts-node src/add-new-network rinkeby athens'."); - process.exit(1); -} - -addNewNetwork(name, parsedAddTo); diff --git a/packages/addresses/src/addresses.helpers.ts b/packages/addresses/src/addresses.helpers.ts deleted file mode 100644 index bb305fce..00000000 --- a/packages/addresses/src/addresses.helpers.ts +++ /dev/null @@ -1,328 +0,0 @@ -import dotenv from "dotenv"; -import { readdirSync, readFileSync, writeFileSync } from "fs"; -import { network } from "hardhat"; -import { join } from "path"; - -import { deepCloneSerializable } from "./misc.helpers"; - -export type ZetaAddress = - | "connector" - | "crossChainCounter" - | "crossChainNft" - | "multiChainSwap" - | "multiChainSwapZetaConnector" - | "multiChainValue" - | "tss" - | "tssUpdater" - | "uniswapV2Router02" - | "zetaToken"; - -type NetworkAddresses = Record; -const zetaAddresses: Record = { - connector: true, - crossChainCounter: true, - crossChainNft: true, - multiChainSwap: true, - multiChainSwapZetaConnector: true, - multiChainValue: true, - tss: true, - tssUpdater: true, - uniswapV2Router02: true, - zetaToken: true, -}; - -export const isZetaAddress = (a: string | undefined): a is ZetaAddress => Boolean(zetaAddresses[a as ZetaAddress]); - -/** - * @description Localnet - */ - -export type LocalNetworkName = "hardhat" | "eth-localnet" | "bsc-localnet" | "polygon-localnet"; -export type ZetaLocalNetworkName = "troy"; -type LocalnetAddressGroup = Record; -export const isLocalNetworkName = (networkName: string): networkName is LocalNetworkName => - networkName === "hardhat" || - networkName === "eth-localnet" || - networkName === "bsc-localnet" || - networkName === "polygon-localnet"; -export const isZetaLocalnet = (networkName: string | undefined): networkName is ZetaLocalNetworkName => - networkName === "troy"; - -export const getLocalnetList = (): Record => ({ - troy: JSON.parse(readFileSync(join(__dirname, "./addresses/addresses.troy.json"), "utf8")) as LocalnetAddressGroup, -}); - -/** - * @description Testnet - */ - -export type TestnetNetworkName = "bsc-testnet" | "goerli" | "polygon-mumbai" | "ropsten"; -export type ZetaTestnetNetworkName = "athens"; -type TestnetAddressGroup = Record; -const isTestnetNetworkName = (networkName: string): networkName is TestnetNetworkName => - networkName === "goerli" || - networkName === "bsc-testnet" || - networkName === "polygon-mumbai" || - networkName === "ropsten"; -export const isZetaTestnet = (networkName: string | undefined): networkName is ZetaTestnetNetworkName => - networkName === "athens"; - -export const getTestnetList = (): Record => ({ - athens: JSON.parse(readFileSync(join(__dirname, "./addresses/addresses.athens.json"), "utf8")) as TestnetAddressGroup, -}); - -/** - * @description Mainnet - */ - -export type MainnetNetworkName = "eth-mainnet"; -export type ZetaMainnetNetworkName = "mainnet"; -type MainnetAddressGroup = Record; -const isMainnetNetworkName = (networkName: string): networkName is MainnetNetworkName => networkName === "eth-mainnet"; -export const isZetaMainnet = (networkName: string | undefined): networkName is ZetaMainnetNetworkName => - networkName === "mainnet"; - -const getMainnetList: () => Record = () => ({ - mainnet: JSON.parse( - readFileSync(join(__dirname, "./addresses/addresses.mainnet.json"), "utf8") - ) as MainnetAddressGroup, -}); - -/** - * @description Shared - */ - -export type NetworkName = LocalNetworkName | TestnetNetworkName | MainnetNetworkName; -export type ZetaNetworkName = ZetaLocalNetworkName | ZetaTestnetNetworkName | ZetaMainnetNetworkName; - -export const getChainId = (networkName: NetworkName) => { - const chainIds: Record = { - "bsc-testnet": 97, - "eth-mainnet": 1, - "polygon-mumbai": 80001, - goerli: 5, - ropsten: 3, - hardhat: 1337, - "eth-localnet": 5, - "bsc-localnet": 97, - "polygon-localnet": 80001, - }; - - return chainIds[networkName]; -}; - -export const isNetworkName = (str: string): str is NetworkName => - isLocalNetworkName(str) || isTestnetNetworkName(str) || isMainnetNetworkName(str); - -export const isZetaNetworkName = (str: string): str is ZetaNetworkName => - isZetaLocalnet(str) || isZetaTestnet(str) || isZetaMainnet(str); - -export const getScanVariable = ({ customNetworkName }: { customNetworkName?: string } = {}): string => { - const networkName = customNetworkName || network.name; - if (!isNetworkName(networkName)) throw new Error(); - dotenv.config(); - - const v = { - "bsc-testnet": process.env.BSCSCAN_API_KEY || "", - "eth-mainnet": process.env.ETHERSCAN_API_KEY || "", - "polygon-mumbai": process.env.POLYGONSCAN_API_KEY || "", - goerli: process.env.ETHERSCAN_API_KEY || "", - ropsten: process.env.ETHERSCAN_API_KEY || "", - hardhat: "", - "eth-localnet": "", - "bsc-localnet": "", - "polygon-localnet": "", - }; - - return v[networkName]; -}; - -export const getExplorerUrl = ({ customNetworkName }: { customNetworkName?: string } = {}): string => { - const networkName = customNetworkName || network.name; - if (!isNetworkName(networkName)) throw new Error(); - dotenv.config(); - - const v = { - "bsc-testnet": "https://testnet.bscscan.com/", - "eth-mainnet": "https://etherscan.io/", - "polygon-mumbai": "https://mumbai.polygonscan.com/", - goerli: "https://goerli.etherscan.io/", - ropsten: "https://ropsten.etherscan.io/", - hardhat: "", - "eth-localnet": "", - "bsc-localnet": "", - "polygon-localnet": "", - }; - - return v[networkName]; -}; - -const MissingZetaNetworkError = new Error( - "ZETA_NETWORK is not defined, please set the environment variable (e.g.: ZETA_NETWORK=athens )" -); - -export const getAddress = ( - address: ZetaAddress, - { - customNetworkName, - customZetaNetwork, - }: { customNetworkName?: NetworkName; customZetaNetwork?: ZetaNetworkName } = {} -): string => { - const { name: _networkName } = network; - const networkName = customNetworkName || _networkName; - - const { ZETA_NETWORK: _ZETA_NETWORK } = process.env; - const ZETA_NETWORK = customZetaNetwork || _ZETA_NETWORK; - - if (!ZETA_NETWORK) throw MissingZetaNetworkError; - - console.log(`Getting ${address} address from ${ZETA_NETWORK}: ${networkName}.`); - - if (isZetaLocalnet(ZETA_NETWORK) && isLocalNetworkName(networkName)) { - return getLocalnetList()[ZETA_NETWORK][networkName][address]; - } - - if (isZetaTestnet(ZETA_NETWORK) && isTestnetNetworkName(networkName)) { - return getTestnetList()[ZETA_NETWORK][networkName][address]; - } - - if (isZetaMainnet(ZETA_NETWORK) && isMainnetNetworkName(networkName)) { - return getMainnetList()[ZETA_NETWORK][networkName][address]; - } - - throw new Error(`Invalid ZETA_NETWORK + network combination ${ZETA_NETWORK} ${networkName}.`); -}; - -export const saveAddress = (addressName: ZetaAddress, newAddress: string) => { - const { ZETA_NETWORK } = process.env; - const { name: networkName } = network; - - if (!ZETA_NETWORK) throw MissingZetaNetworkError; - - console.log(`Updating ${addressName} address on ${ZETA_NETWORK}: ${networkName}.`); - - const filename = join(__dirname, `./addresses/addresses.${ZETA_NETWORK}.json`); - - if (isZetaLocalnet(ZETA_NETWORK) && isLocalNetworkName(networkName)) { - const newAddresses: LocalnetAddressGroup = JSON.parse(readFileSync(filename, "utf8")); - if (typeof newAddresses[networkName][addressName] === "undefined") { - console.log( - `The address ${addressName} does not exist, it will get created but make sure to add it to the types.` - ); - } - - newAddresses[networkName][addressName] = newAddress; - - writeFileSync(filename, JSON.stringify(newAddresses, null, 2)); - - console.log(`Updated, new address: ${newAddress}.`); - - return; - } - - if (isZetaTestnet(ZETA_NETWORK) && isTestnetNetworkName(networkName)) { - const newAddresses: TestnetAddressGroup = JSON.parse(readFileSync(filename, "utf8")); - newAddresses[networkName][addressName] = newAddress; - - writeFileSync(filename, JSON.stringify(newAddresses, null, 2)); - - console.log(`Updated, new address: ${newAddress}.`); - - return; - } - - if (isZetaMainnet(ZETA_NETWORK) && isMainnetNetworkName(networkName)) { - const newAddresses: MainnetAddressGroup = JSON.parse(readFileSync(filename, "utf8")); - newAddresses[networkName][addressName] = newAddress; - - writeFileSync(filename, JSON.stringify(newAddresses, null, 2)); - - console.log(`Updated, new address: ${newAddress}.`); - - return; - } - - throw new Error(`Invalid ZETA_NETWORK + network combination ${ZETA_NETWORK} ${networkName}.`); -}; - -export const addNewAddress = (addressName: string, addressValue: string = "") => { - if (!addressName) throw new Error("Emtpy address name."); - - const addressesDirname = join(__dirname, `./addresses`); - const addressesFiles = readdirSync(addressesDirname); - - addressesFiles.forEach((addressesFilename) => { - const addressPath = join(addressesDirname, addressesFilename); - - const addressesByNetwork = JSON.parse(readFileSync(addressPath, "utf8")); - - Object.keys(addressesByNetwork).forEach((network) => { - if (!isNetworkName(network)) return; - - addressesByNetwork[network][addressName] = addressValue; - addressesByNetwork[network] = Object.keys(addressesByNetwork[network]) - .sort() - .reduce((obj, key) => { - obj[key as ZetaAddress] = addressesByNetwork[network][key]; - return obj; - }, {} as NetworkAddresses); - }); - - writeFileSync(addressPath, JSON.stringify(addressesByNetwork, null, 2)); - }); - - console.log(`To enable IntelliSense, add the address (${addressName}) to the constants (addresses.helpers.ts).`); -}; - -export const addNewNetwork = (newNetworkName: string, addTo: ZetaNetworkName[]) => { - if (!newNetworkName) throw new Error("Emtpy networkName name."); - - const addressesDirname = join(__dirname, `./addresses`); - const addressesFiles = readdirSync(addressesDirname); - - addressesFiles.forEach((addressFilename) => { - const addressesFilePath = join(addressesDirname, addressFilename); - /** - * Gets the Zeta network name using the filename, e.g.: addresses.athens.json -> athens - */ - const zetaNetworkName = addressFilename.substring( - addressFilename.indexOf(".") + 1, - addressFilename.lastIndexOf(".") - ); - - if (!isZetaNetworkName(zetaNetworkName)) throw new Error("Error getting Zeta network name."); - - if (!addTo.includes(zetaNetworkName)) return; - - const fileNetworks = JSON.parse(readFileSync(addressesFilePath, "utf8")); - - if (Boolean(fileNetworks[newNetworkName])) throw new Error("Network already exists."); - - /** - * Use an existing network object to populate the new one - */ - const randomNetworkName = Object.keys(fileNetworks)[0]; - fileNetworks[newNetworkName] = deepCloneSerializable(fileNetworks[randomNetworkName]); - - const emptyNewNetworkAddresses = () => { - Object.keys(fileNetworks[newNetworkName]).forEach((addressName) => { - fileNetworks[newNetworkName][addressName] = ""; - }); - }; - emptyNewNetworkAddresses(); - - /** - * The types below aren't 100% correct - */ - const orderedFileNetworks = Object.keys(fileNetworks) - .sort() - .reduce((obj, key) => { - obj[key as MainnetNetworkName | TestnetNetworkName | LocalNetworkName] = fileNetworks[key]; - return obj; - }, {} as MainnetAddressGroup & TestnetAddressGroup & LocalnetAddressGroup); - - writeFileSync(addressesFilePath, JSON.stringify(orderedFileNetworks, null, 2)); - }); - - console.log(`To enable IntelliSense, add the network (${newNetworkName}) to the constants (addresses.helpers.ts).`); -}; diff --git a/packages/addresses/src/addresses/addresses.athens.json b/packages/addresses/src/addresses/addresses.athens.json deleted file mode 100644 index 60a19291..00000000 --- a/packages/addresses/src/addresses/addresses.athens.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bsc-testnet": { - "connector": "0x202aed942eb71203741eced2913a29C695a7c7F6", - "crossChainCounter": "", - "crossChainNft": "0xa9016FB99846314E0f96f657E5271cFD7919a244", - "multiChainValue": "0x8f56b3e5b0D4bC33E7E52eC55271e73ece6024c6", - "tss": "0x61141bce5352fc9b5ff648468676e356518d86ab", - "tssUpdater": "0x7274d1d5dddef36aac53dd45b93487ce01ef0a55", - "uniswapV2Router02": "0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3", - "zetaToken": "0xad7d0795ffdf21f20c89240D540487B1445c7D03", - "multiChainSwap": "0xD4fAa6BAbBb97E0BDF755D396af48CB66eBa736c" - }, - "goerli": { - "connector": "0x0B16Fc7e2D627d82255ba21e53Cf6c11B5186046", - "crossChainCounter": "", - "crossChainNft": "0xe08f1d23a68231543a595391D82c39BbaFc22470", - "multiChainValue": "0x0EaA929a2874183e2324Bb2745F812c942b00F60", - "tss": "0x61141bce5352fc9b5ff648468676e356518d86ab", - "tssUpdater": "0x7274d1d5dddef36aac53dd45b93487ce01ef0a55", - "uniswapV2Router02": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - "zetaToken": "0x011a76081989aDA18d0a16bf3fee2C6c3BD07B07", - "multiChainSwap": "0xDB6D960642ea523549Ad108F495c89cfE5E51668" - }, - "polygon-mumbai": { - "connector": "0xa5467B39Ad9f51DEb6b30Abfa9828531dCBA99A9", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "0xb3021F5603291895b0Df5fC6276cda33a0B90fa6", - "tss": "0x61141bce5352fc9b5ff648468676e356518d86ab", - "tssUpdater": "0x7274d1d5dddef36aac53dd45b93487ce01ef0a55", - "uniswapV2Router02": "", - "zetaToken": "0x84383be9B3Eda50ABD5899936D4963505d449de2" - }, - "ropsten": { - "connector": "0x91Ea4f79D39DA890B03E965111953d0494936072", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "0x4740f4051eA6D896C694303228D86Ba3141065ca", - "tss": "0x61141Bce5352fC9b5Ff648468676e356518D86AB", - "tssUpdater": "0x7274d1d5dddef36aac53dd45b93487ce01ef0a55", - "uniswapV2Router02": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - "zetaToken": "0x3357A3bd90A001282bA2152D6c0a2372c8E0e28E" - } -} \ No newline at end of file diff --git a/packages/addresses/src/addresses/addresses.mainnet.json b/packages/addresses/src/addresses/addresses.mainnet.json deleted file mode 100644 index 685644da..00000000 --- a/packages/addresses/src/addresses/addresses.mainnet.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "eth-mainnet": { - "connector": "", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "", - "tss": "", - "tssUpdater": "", - "uniswapV2Router02": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - "zetaToken": "" - } -} \ No newline at end of file diff --git a/packages/addresses/src/addresses/addresses.troy.json b/packages/addresses/src/addresses/addresses.troy.json deleted file mode 100644 index 483347af..00000000 --- a/packages/addresses/src/addresses/addresses.troy.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "hardhat": { - "connector": "0xB06c856C8eaBd1d8321b687E188204C1018BC4E5", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "", - "tss": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", - "tssUpdater": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", - "uniswapV2Router02": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - "zetaToken": "0xddE78e6202518FF4936b5302cC2891ec180E8bFf", - "multiChainSwap": "0xddE78e6202518FF4936b5302cC2891ec180E8bFf" - }, - "eth-localnet": { - "connector": "0xD7db1F9D0279876a9dcDb92e06057E0818b9B34b", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "", - "tss": "0x8C001e2204000D8ED10cAcf0F68106b68e036A26", - "tssUpdater": "0xfBec4048e09749515110c89D881EcDcA4460D377", - "uniswapV2Router02": "", - "zetaToken": "0xaEF27C0E302005dB3b442edF762EB070Dc2DB9b5" - }, - "bsc-localnet": { - "connector": "0x960bd6A9d8424455953a68c17Be7f56e0cf83A9E", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "", - "tss": "0x8C001e2204000D8ED10cAcf0F68106b68e036A26", - "tssUpdater": "0x12Dc2227AA4b98b00Ff8148fDA9Ef750929B0F68", - "uniswapV2Router02": "", - "zetaToken": "0x0CF6e5aA211A4b7da5d04e93dC40Ee18202a5f84" - }, - "polygon-localnet": { - "connector": "0xa16BD8468d10d28E6c16F03798EEb710fc84F616", - "crossChainCounter": "", - "crossChainNft": "", - "multiChainValue": "", - "tss": "0x8C001e2204000D8ED10cAcf0F68106b68e036A26", - "tssUpdater": "0x78C18E214174A08Fc32e174fb203Aba05B016789", - "uniswapV2Router02": "", - "zetaToken": "0xD443E93f689a7E1d517Fef799b1d2Fd2FA536d3A" - } -} \ No newline at end of file diff --git a/packages/addresses/src/index.ts b/packages/addresses/src/index.ts deleted file mode 100644 index 57e3950d..00000000 --- a/packages/addresses/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./addresses.helpers"; diff --git a/packages/addresses/src/log-addresses.ts b/packages/addresses/src/log-addresses.ts deleted file mode 100644 index f7defc3d..00000000 --- a/packages/addresses/src/log-addresses.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { getExplorerUrl, getTestnetList, isZetaNetworkName, ZetaTestnetNetworkName } from "./addresses.helpers"; - -const network = process.argv[2]; - -const toFilter = process.argv[3].split(",").map((w) => w.toLowerCase()); - -if (!isZetaNetworkName(network)) { - console.error(`Invalid network (${network}).`); - process.exit(1); -} - -const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1); - -const logAddresses = (zetaNetwork: ZetaTestnetNetworkName) => { - const list = getTestnetList()[zetaNetwork]; - - console.log(`${capitalizeFirstLetter(zetaNetwork)} addresses:`); - - Object.entries(list).map(([networkName, addresses], i) => { - console.log(`--- ${capitalizeFirstLetter(networkName)} ---`); - - Object.entries(addresses).map(([name, address]) => { - if (toFilter.includes(name.toLowerCase())) return; - if (!address) return; - - console.log( - `${capitalizeFirstLetter(name)}: [${address}](${getExplorerUrl({ - customNetworkName: networkName, - })}address/${address})` - ); - }); - - console.log("\n"); - }); -}; - -logAddresses("athens"); diff --git a/packages/addresses/src/misc.constants.ts b/packages/addresses/src/misc.constants.ts deleted file mode 100644 index 5f2cf2cf..00000000 --- a/packages/addresses/src/misc.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export type ValueOf = T[keyof T]; diff --git a/packages/addresses/src/misc.helpers.ts b/packages/addresses/src/misc.helpers.ts deleted file mode 100644 index 7848f0fd..00000000 --- a/packages/addresses/src/misc.helpers.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const deepCloneSerializable = (serializableObject: Obj): Obj => - JSON.parse(JSON.stringify(serializableObject)); diff --git a/packages/addresses/src/networks.ts b/packages/addresses/src/networks.ts deleted file mode 100644 index 2d231153..00000000 --- a/packages/addresses/src/networks.ts +++ /dev/null @@ -1,63 +0,0 @@ -import type { NetworksUserConfig } from "hardhat/types"; - -export const getHardhatConfigNetworks = (PRIVATE_KEYS: string[]): NetworksUserConfig => ({ - hardhat: { - chainId: 1337, - forking: { - url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY}`, - blockNumber: 14672712, - }, - }, - "eth-mainnet": { - url: "https://api.mycryptoapi.com/eth", - accounts: PRIVATE_KEYS, - }, - goerli: { - url: "https://rpc.goerli.mudit.blog", - accounts: PRIVATE_KEYS, - gas: 2100000, - gasPrice: 8000000000, - }, - "bsc-testnet": { - url: `https://data-seed-prebsc-2-s3.binance.org:8545`, - accounts: PRIVATE_KEYS, - gas: 5000000, - gasPrice: 80000000000, - }, - "polygon-mumbai": { - url: "https://polygon-mumbai.chainstacklabs.com", - accounts: PRIVATE_KEYS, - gas: 5000000, - gasPrice: 80000000000, - }, - ropsten: { - url: "https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161", - accounts: PRIVATE_KEYS, - gas: 9000000, - gasPrice: 80000000000, - }, - "eth-localnet": { - url: "http://localhost:8100", - gas: 2100000, - gasPrice: 80000000000, - }, - "bsc-localnet": { - url: "http://localhost:8120", - gas: 5000000, - gasPrice: 80000000000, - }, - "polygon-localnet": { - url: "http://localhost:8140", - gas: 5000000, - gasPrice: 80000000000, - }, -}); - -export const getHardhatConfigScanners = () => ({ - apiKey: { - bscTestnet: process.env.BSCSCAN_API_KEY, - goerli: process.env.ETHERSCAN_API_KEY, - polygonMumbai: process.env.POYLGONSCAN_API_KEY, - ropsten: process.env.ETHERSCAN_API_KEY, - }, -}); diff --git a/packages/addresses/tsconfig.json b/packages/addresses/tsconfig.json deleted file mode 100644 index 588ea357..00000000 --- a/packages/addresses/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["./src", "./src/**/*.json"], - "compilerOptions": { - "baseUrl": "./src", - "outDir": "./dist", - "rootDir": "./src", - "paths": { - "~/*": [ - "./*" - ] - } - }, -} diff --git a/packages/example-contracts/.env.example b/packages/example-contracts/.env.example deleted file mode 100644 index 1a0f5a59..00000000 --- a/packages/example-contracts/.env.example +++ /dev/null @@ -1,14 +0,0 @@ -ALCHEMY_API_KEY= - -PUBLIC_KEY_1= - -PRIVATE_KEY= - -# ETHER -ETHERSCAN_API_KEY=<...> - -# POLYGON -POYLGONSCAN_API_KEY=<...> - -# BSC -BSCSCAN_API_KEY=<...> diff --git a/packages/example-contracts/contracts/cross-chain-counter/CrossChainCounter.sol b/packages/example-contracts/contracts/cross-chain-counter/CrossChainCounter.sol deleted file mode 100644 index 5f5f0f81..00000000 --- a/packages/example-contracts/contracts/cross-chain-counter/CrossChainCounter.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaReceiver.sol"; - -contract CrossChainCounter is Ownable, ZetaReceiver { - bytes32 public constant CROSS_CHAIN_INCREMENT_MESSAGE = keccak256("CROSS_CHAIN_INCREMENT"); - - address public connectorAddress; - ZetaConnector internal connector; - - uint256 internal immutable currentChainId; - uint256 internal _crossChainId; - bytes internal _crossChainAddress; - - mapping(address => uint256) public counter; - - constructor(address connectorAddress_) { - currentChainId = block.chainid; - - connectorAddress = connectorAddress_; - connector = ZetaConnector(connectorAddress_); - } - - function setCrossChainAddress(bytes calldata ccAddress) public onlyOwner { - _crossChainAddress = ccAddress; - } - - function setCrossChainId(uint256 ccId) public onlyOwner { - _crossChainId = ccId; - } - - function crossChainCount() external { - require(_crossChainAddress.length != 0, "Cross-chain address is not set"); - require(_crossChainId != 0, "Cross-chain id is not set"); - - connector.send( - ZetaInterfaces.SendInput({ - destinationChainId: _crossChainId, - destinationAddress: _crossChainAddress, - gasLimit: 2500000, - message: abi.encode(CROSS_CHAIN_INCREMENT_MESSAGE, msg.sender), - zetaAmount: 0, - zetaParams: abi.encode("") - }) - ); - } - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) external { - require(msg.sender == connectorAddress, "This function can only be called by the Connector contract"); - require( - keccak256(zetaMessage.originSenderAddress) == keccak256(_crossChainAddress), - "Cross-chain address doesn't match" - ); - require(zetaMessage.originChainId == _crossChainId, "Cross-chain id doesn't match"); - - (bytes32 messageType, address messageFrom) = abi.decode(zetaMessage.message, (bytes32, address)); - - require(messageType == CROSS_CHAIN_INCREMENT_MESSAGE, "Invalid message type"); - - counter[messageFrom]++; - } - - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external { - require(msg.sender == connectorAddress, "This function can only be called by the Connector contract"); - require(zetaRevert.originSenderAddress == address(this), "Invalid originSenderAddress"); - require(zetaRevert.originChainId == currentChainId, "Invalid originChainId"); - - (bytes32 messageType, address messageFrom) = abi.decode(zetaRevert.message, (bytes32, address)); - - require(messageType == CROSS_CHAIN_INCREMENT_MESSAGE, "Invalid message type"); - require(counter[messageFrom] > 0, "Decrement overflow"); - - counter[messageFrom]--; - } -} diff --git a/packages/example-contracts/contracts/cross-chain-counter/test/CounterZetaConnectorMock.sol b/packages/example-contracts/contracts/cross-chain-counter/test/CounterZetaConnectorMock.sol deleted file mode 100644 index 7a2ffd66..00000000 --- a/packages/example-contracts/contracts/cross-chain-counter/test/CounterZetaConnectorMock.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -import "../CrossChainCounter.sol"; - -contract CounterZetaConnectorMock is ZetaConnector { - function callOnZetaMessage( - bytes memory originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message - ) public { - return - CrossChainCounter(destinationAddress).onZetaMessage( - ZetaInterfaces.ZetaMessage({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function callOnZetaRevert( - address originSenderAddress, - uint256 originChainId, - uint256 destinationChainId, - bytes calldata destinationAddress, - uint256 zetaAmount, - uint256, // gasLimit - bytes calldata message - ) public { - return - CrossChainCounter(originSenderAddress).onZetaRevert( - ZetaInterfaces.ZetaRevert({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - destinationChainId: destinationChainId, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function send(ZetaInterfaces.SendInput calldata sendInput) external { - uint256 originChainId = sendInput.destinationChainId == 2 ? 1 : 2; - address dest = address(uint160(bytes20(sendInput.destinationAddress))); - - return - callOnZetaMessage( - abi.encodePacked(msg.sender), - originChainId, - dest, - sendInput.zetaAmount, - sendInput.message - ); - } -} diff --git a/packages/example-contracts/contracts/cross-chain-message/CrossChainMessage.sol b/packages/example-contracts/contracts/cross-chain-message/CrossChainMessage.sol deleted file mode 100644 index a0a19ad7..00000000 --- a/packages/example-contracts/contracts/cross-chain-message/CrossChainMessage.sol +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaReceiver.sol"; - -/** - * @dev A simple contract able to send and receive Hello World messages from other chains. - * Emits a HelloWorldEvent on successful messages - * Emits a RevertedHelloWorldEvent on failed messages - */ -contract CrossChainMessage is Ownable { - bytes32 public constant HELLO_WORLD_MESSAGE_TYPE = keccak256("CROSS_CHAIN_HELLO_WORLD"); - - event HelloWorldEvent(string messageData); - event RevertedHelloWorldEvent(string messageData); - - address internal _zetaConnectorAddress; - ZetaConnector internal _zeta; - - uint256 internal immutable _currentChainId; - bytes internal _crossChainAddress; - uint256 internal _crossChainId; - - constructor(address _zetaConnectorInputAddress) { - _currentChainId = block.chainid; - - _zetaConnectorAddress = _zetaConnectorInputAddress; - _zeta = ZetaConnector(_zetaConnectorInputAddress); - } - - /** - * @dev The cross-chain address cannot be set on the constructor since it depends on the deployment of the contract on the other chain. - */ - function setCrossChainAddress(bytes calldata _ccAddress) public onlyOwner { - _crossChainAddress = _ccAddress; - } - - /** - * @dev Can be set on the constructor, but we favor this pattern for more flexibility. - */ - function setCrossChainId(uint256 _ccId) public onlyOwner { - _crossChainId = _ccId; - } - - function sendHelloWorld() external { - require(_crossChainAddress.length != 0, "Cross-chain address is not set"); - require(_crossChainId != 0, "Cross-chain id is not set"); - - _zeta.send( - ZetaInterfaces.SendInput({ - destinationChainId: _crossChainId, - destinationAddress: _crossChainAddress, - gasLimit: 2500000, - message: abi.encode(HELLO_WORLD_MESSAGE_TYPE, "Hello, Cross-Chain World!"), - zetaAmount: 0, - zetaParams: abi.encode("") - }) - ); - } - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata _zetaMessage) external { - require(msg.sender == _zetaConnectorAddress, "This function can only be called by the Zeta Connector contract"); - require( - keccak256(_zetaMessage.originSenderAddress) == keccak256(_crossChainAddress), - "Cross-chain address doesn't match" - ); - require(_zetaMessage.originChainId == _crossChainId, "Cross-chain id doesn't match"); - - /** - * @dev Decode should follow the signature of the message provided to zeta.send. - */ - (bytes32 messageType, string memory helloWorldMessage) = abi.decode(_zetaMessage.message, (bytes32, string)); - - /** - * @dev Setting a message type is a useful pattern to distinguish between different messages. - */ - require(messageType == HELLO_WORLD_MESSAGE_TYPE, "Invalid message type"); - - emit HelloWorldEvent(helloWorldMessage); - } - - /** - * @dev Called by the Zeta Connector contract when the message fails to be sent. - * Useful to cleanup and leave the application on its initial state. - * Note that the require statements and the functionality are similar to onZetaMessage. - */ - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata _zetaRevert) external { - require(msg.sender == _zetaConnectorAddress, "This function can only be called by the Zeta Connector contract"); - require(_zetaRevert.originSenderAddress == address(this), "Invalid originSenderAddress"); - require(_zetaRevert.originChainId == _currentChainId, "Invalid originChainId"); - - (bytes32 messageType, string memory helloWorldMessage) = abi.decode(_zetaRevert.message, (bytes32, string)); - - require(messageType == HELLO_WORLD_MESSAGE_TYPE, "Invalid message type"); - - emit RevertedHelloWorldEvent(helloWorldMessage); - } -} diff --git a/packages/example-contracts/contracts/cross-chain-warriors/CrossChainWarriors.sol b/packages/example-contracts/contracts/cross-chain-warriors/CrossChainWarriors.sol deleted file mode 100644 index 36b884cf..00000000 --- a/packages/example-contracts/contracts/cross-chain-warriors/CrossChainWarriors.sol +++ /dev/null @@ -1,158 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/interfaces/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; -import "@openzeppelin/contracts/utils/Counters.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaReceiver.sol"; - -contract CrossChainWarriors is ERC721("CrossChainWarriors", "CCWAR"), Ownable, ZetaReceiver { - using Counters for Counters.Counter; - using Strings for uint256; - - bytes32 public constant CROSS_CHAIN_TRANSFER_MESSAGE = keccak256("CROSS_CHAIN_TRANSFER"); - - uint256 internal immutable _currentChainId; - uint256 internal _crossChainId; - bytes internal _crossChainAddress; - - address public connectorAddress; - ZetaConnector internal connector; - - address public zetaTokenAddress; - IERC20 internal _zetaToken; - - string public baseURI; - - Counters.Counter public tokenIds; - - constructor( - address connectorAddress_, - address zetaTokenAddress_, - bool useEven - ) { - _currentChainId = block.chainid; - - connectorAddress = connectorAddress_; - connector = ZetaConnector(connectorAddress_); - - zetaTokenAddress = zetaTokenAddress_; - _zetaToken = IERC20(zetaTokenAddress_); - - /** - * @dev A simple way to prevent collisions between cross-chain token ids - * As you can see below, the mint function should increase the counter by two - */ - tokenIds.increment(); - if (useEven) tokenIds.increment(); - } - - function setCrossChainAddress(bytes calldata ccAddress) public onlyOwner { - _crossChainAddress = ccAddress; - } - - function setCrossChainId(uint256 ccId) public onlyOwner { - _crossChainId = ccId; - } - - function setBaseURI(string memory baseURIParam) public onlyOwner { - baseURI = baseURIParam; - } - - function _baseURI() internal view virtual override returns (string memory) { - return baseURI; - } - - function mint(address to) public returns (uint256) { - uint256 newWarriorId = tokenIds.current(); - _safeMint(to, newWarriorId); - - /** - * @dev Always increment by two to keep ids even/odd (depending on the chain) - * Check the constructor for further reference - */ - tokenIds.increment(); - tokenIds.increment(); - - return newWarriorId; - } - - /** - * @dev Useful for cross-chain minting - */ - function _mintId(address to, uint256 tokenId) internal { - _safeMint(to, tokenId); - } - - function _burnWarrior(uint256 burnedWarriorId) internal { - _burn(burnedWarriorId); - } - - /** - * @dev Cross-chain functions - */ - - function crossChainTransfer(address to, uint256 tokenId) external { - require(_isApprovedOrOwner(_msgSender(), tokenId), "Transfer caller is not owner nor approved"); - - uint256 zetaGasAmount = 18000000000000000000; - - { - bool success = _zetaToken.transferFrom(msg.sender, connectorAddress, zetaGasAmount); - require(success == true, "CrossChainWarriors: error approving zeta"); - } - - _burnWarrior(tokenId); - - connector.send( - ZetaInterfaces.SendInput({ - destinationChainId: _crossChainId, - destinationAddress: _crossChainAddress, - gasLimit: zetaGasAmount, - message: abi.encode(CROSS_CHAIN_TRANSFER_MESSAGE, tokenId, msg.sender, to), - zetaAmount: zetaGasAmount, - zetaParams: abi.encode("") - }) - ); - } - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) external { - require(msg.sender == connectorAddress, "This function can only be called by the Connector contract"); - require( - keccak256(zetaMessage.originSenderAddress) == keccak256(_crossChainAddress), - "Cross-chain address doesn't match" - ); - require(zetaMessage.originChainId == _crossChainId, "Cross-chain id doesn't match"); - - ( - bytes32 messageType, - uint256 tokenId, - , - /** - * @dev this extra comma corresponds to address from - */ - address to - ) = abi.decode(zetaMessage.message, (bytes32, uint256, address, address)); - - require(messageType == CROSS_CHAIN_TRANSFER_MESSAGE, "Invalid message type"); - - _mintId(to, tokenId); - } - - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external { - require(msg.sender == connectorAddress, "This function can only be called by the Connector contract"); - require(zetaRevert.originSenderAddress == address(this), "Invalid originSenderAddress"); - require(zetaRevert.originChainId == _currentChainId, "Invalid originChainId"); - - (bytes32 messageType, uint256 tokenId, address from) = abi.decode( - zetaRevert.message, - (bytes32, uint256, address) - ); - - require(messageType == CROSS_CHAIN_TRANSFER_MESSAGE, "Invalid message type"); - - _mintId(from, tokenId); - } -} diff --git a/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsMock.sol b/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsMock.sol deleted file mode 100644 index e11cc925..00000000 --- a/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsMock.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "../CrossChainWarriors.sol"; - -contract CrossChainWarriorsMock is CrossChainWarriors { - constructor( - address connectorAddress, - address zetaTokenAddress, - bool useEven - ) CrossChainWarriors(connectorAddress, zetaTokenAddress, useEven) {} - - function mintId(address to, uint256 tokenId) external { - return _mintId(to, tokenId); - } -} diff --git a/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsZetaConnectorMock.sol b/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsZetaConnectorMock.sol deleted file mode 100644 index 03ac5746..00000000 --- a/packages/example-contracts/contracts/cross-chain-warriors/test/CrossChainWarriorsZetaConnectorMock.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -import "../CrossChainWarriors.sol"; - -contract CrossChainWarriorsZetaConnectorMock is ZetaConnector { - function callOnZetaMessage( - bytes memory originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message - ) public { - return - CrossChainWarriors(destinationAddress).onZetaMessage( - ZetaInterfaces.ZetaMessage({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function callOnZetaRevert( - address originSenderAddress, - uint256 originChainId, - uint256 destinationChainId, - bytes calldata destinationAddress, - uint256 zetaAmount, - uint256, // gasLimit - bytes calldata message - ) public { - return - CrossChainWarriors(originSenderAddress).onZetaRevert( - ZetaInterfaces.ZetaRevert({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - destinationChainId: destinationChainId, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function send(ZetaInterfaces.SendInput calldata sendInput) external { - uint256 originChainId = sendInput.destinationChainId == 2 ? 1 : 2; - address dest = address(uint160(bytes20(sendInput.destinationAddress))); - - return - callOnZetaMessage( - abi.encodePacked(msg.sender), - originChainId, - dest, - sendInput.zetaAmount, - sendInput.message - ); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.base.sol b/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.base.sol deleted file mode 100644 index d1cc0b16..00000000 --- a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.base.sol +++ /dev/null @@ -1,361 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/interfaces/IERC20.sol"; -import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInteractor.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaReceiver.sol"; - -import "./MultiChainSwapErrors.sol"; - -contract MultiChainSwapBase is ZetaInteractor, ZetaReceiver, MultiChainSwapErrors { - uint16 internal constant MAX_DEADLINE = 365; - bytes32 public constant CROSS_CHAIN_SWAP_MESSAGE = keccak256("CROSS_CHAIN_SWAP"); - - address public uniswapV2RouterAddress; - address internal immutable wETH; - address public zetaToken; - - IUniswapV2Router02 internal uniswapV2Router; - - event SentTokenSwap( - address originSender, - address originInputToken, - uint256 inputTokenAmount, - address destinationOutToken, - uint256 outTokenMinAmount, - address receiverAddress - ); - - event SentEthSwap( - address originSender, - uint256 inputEthAmount, - address destinationOutToken, - uint256 outTokenMinAmount, - address receiverAddress - ); - - event Swapped( - address originSender, - address originInputToken, - uint256 inputTokenAmount, - address destinationOutToken, - uint256 outTokenFinalAmount, - address receiverAddress - ); - - event RevertedSwap( - address originSender, - address originInputToken, - uint256 inputTokenAmount, - uint256 inputTokenReturnedAmount - ); - - constructor( - address _zetaConnector, - address _zetaTokenInput, - address _uniswapV2Router - ) ZetaInteractor(_zetaConnector) { - zetaToken = _zetaTokenInput; - uniswapV2RouterAddress = _uniswapV2Router; - uniswapV2Router = IUniswapV2Router02(_uniswapV2Router); - wETH = uniswapV2Router.WETH(); - } - - function swapETHForTokensCrossChain( - bytes calldata receiverAddress, - address destinationOutToken, - bool isDestinationOutETH, - /** - * @dev The minimum amount of tokens that receiverAddress should get, - * if it's not reached, the transaction will revert on the destination chain - */ - uint256 outTokenMinAmount, - uint256 destinationChainId, - uint256 crossChainGasLimit - ) external payable { - if (!isValidChainId(destinationChainId)) revert InvalidDestinationChainId(); - - if (msg.value == 0) revert ValueShouldBeGreaterThanZero(); - if ( - (destinationOutToken != address(0) && isDestinationOutETH) || - (destinationOutToken == address(0) && !isDestinationOutETH) - ) revert OutTokenInvariant(); - - uint256 zetaAmount; - { - address[] memory path = new address[](2); - path[0] = wETH; - path[1] = zetaToken; - - uint256[] memory amounts = uniswapV2Router.swapExactETHForTokens{value: msg.value}( - 0, /// @dev Output can't be validated here, it's validated after the next swap - path, - address(this), - block.timestamp + MAX_DEADLINE - ); - - zetaAmount = amounts[path.length - 1]; - } - if (zetaAmount == 0) revert ErrorSwappingTokens(); - - { - bool success = IERC20(zetaToken).approve(address(connector), zetaAmount); - if (!success) revert ErrorApprovingTokens(zetaToken); - } - - connector.send( - ZetaInterfaces.SendInput({ - destinationChainId: destinationChainId, - destinationAddress: interactorsByChainId[destinationChainId], - gasLimit: crossChainGasLimit, - message: abi.encode( - CROSS_CHAIN_SWAP_MESSAGE, - msg.sender, - wETH, - msg.value, - receiverAddress, - destinationOutToken, - isDestinationOutETH, - outTokenMinAmount, - true // inputTokenIsETH - ), - zetaAmount: zetaAmount, - zetaParams: abi.encode("") - }) - ); - } - - function swapTokensForTokensCrossChain( - address originInputToken, - uint256 inputTokenAmount, - bytes calldata receiverAddress, - address destinationOutToken, - bool isDestinationOutETH, - /** - * @dev The minimum amount of tokens that receiverAddress should get, - * if it's not reached, the transaction will revert on the destination chain - */ - uint256 outTokenMinAmount, - uint256 destinationChainId, - uint256 crossChainGasLimit - ) external { - if (keccak256(interactorsByChainId[destinationChainId]) == keccak256(new bytes(0))) - revert InvalidDestinationChainId(); - - if (originInputToken == address(0)) revert MissingOriginInputTokenAddress(); - if ( - (destinationOutToken != address(0) && isDestinationOutETH) || - (destinationOutToken == address(0) && !isDestinationOutETH) - ) revert OutTokenInvariant(); - - uint256 zetaAmount; - - if (originInputToken == zetaToken) { - bool success1 = IERC20(zetaToken).transferFrom(msg.sender, address(this), inputTokenAmount); - bool success2 = IERC20(zetaToken).approve(address(connector), inputTokenAmount); - if (!success1 || !success2) revert ErrorTransferringTokens(zetaToken); - - zetaAmount = inputTokenAmount; - } else { - /** - * @dev If the input token is not Zeta, trade it using Uniswap - */ - { - bool success1 = IERC20(originInputToken).transferFrom(msg.sender, address(this), inputTokenAmount); - bool success2 = IERC20(originInputToken).approve(uniswapV2RouterAddress, inputTokenAmount); - if (!success1 || !success2) revert ErrorTransferringTokens(originInputToken); - } - - address[] memory path; - if (originInputToken == wETH) { - path = new address[](2); - path[0] = wETH; - path[1] = zetaToken; - } else { - path = new address[](3); - path[0] = originInputToken; - path[1] = wETH; - path[2] = zetaToken; - } - - uint256[] memory amounts = uniswapV2Router.swapExactTokensForTokens( - inputTokenAmount, - 0, /// @dev Output can't be validated here, it's validated after the next swap - path, - address(this), - block.timestamp + MAX_DEADLINE - ); - - zetaAmount = amounts[path.length - 1]; - if (zetaAmount == 0) revert ErrorSwappingTokens(); - } - - { - bool success = IERC20(zetaToken).approve(address(connector), zetaAmount); - if (!success) revert ErrorApprovingTokens(zetaToken); - } - - connector.send( - ZetaInterfaces.SendInput({ - destinationChainId: destinationChainId, - destinationAddress: interactorsByChainId[destinationChainId], - gasLimit: crossChainGasLimit, - message: abi.encode( - CROSS_CHAIN_SWAP_MESSAGE, - msg.sender, - originInputToken, - inputTokenAmount, - receiverAddress, - destinationOutToken, - isDestinationOutETH, - outTokenMinAmount, - false // inputTokenIsETH - ), - zetaAmount: zetaAmount, - zetaParams: abi.encode("") - }) - ); - } - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) external isValidMessageCall(zetaMessage) { - ( - bytes32 messageType, - address originSender, - address originInputToken, - uint256 inputTokenAmount, - bytes memory receiverAddressEncoded, - address destinationOutToken, - bool isDestinationOutETH, - uint256 outTokenMinAmount, - - ) = abi.decode(zetaMessage.message, (bytes32, address, address, uint256, bytes, address, bool, uint256, bool)); - - address receiverAddress = address(uint160(bytes20(receiverAddressEncoded))); - - if (messageType != CROSS_CHAIN_SWAP_MESSAGE) revert InvalidMessageType(); - - uint256 outTokenFinalAmount; - if (destinationOutToken == zetaToken) { - if (zetaMessage.zetaAmount < outTokenMinAmount) revert InsufficientOutToken(); - - bool success = IERC20(zetaToken).transfer(receiverAddress, zetaMessage.zetaAmount); - if (!success) revert ErrorTransferringTokens(zetaToken); - - outTokenFinalAmount = zetaMessage.zetaAmount; - } else { - /** - * @dev If the out token is not Zeta, get it using Uniswap - */ - { - bool success = IERC20(zetaToken).approve(uniswapV2RouterAddress, zetaMessage.zetaAmount); - if (!success) revert ErrorApprovingTokens(zetaToken); - } - - address[] memory path; - if (destinationOutToken == wETH || isDestinationOutETH) { - path = new address[](2); - path[0] = zetaToken; - path[1] = wETH; - } else { - path = new address[](3); - path[0] = zetaToken; - path[1] = wETH; - path[2] = destinationOutToken; - } - - uint256[] memory amounts; - if (isDestinationOutETH) { - amounts = uniswapV2Router.swapExactTokensForETH( - zetaMessage.zetaAmount, - outTokenMinAmount, - path, - receiverAddress, - block.timestamp + MAX_DEADLINE - ); - } else { - amounts = uniswapV2Router.swapExactTokensForTokens( - zetaMessage.zetaAmount, - outTokenMinAmount, - path, - receiverAddress, - block.timestamp + MAX_DEADLINE - ); - } - - outTokenFinalAmount = amounts[amounts.length - 1]; - if (outTokenFinalAmount == 0) revert ErrorSwappingTokens(); - if (outTokenFinalAmount < outTokenMinAmount) revert InsufficientOutToken(); - } - - emit Swapped( - originSender, - originInputToken, - inputTokenAmount, - destinationOutToken, - outTokenFinalAmount, - receiverAddress - ); - } - - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external isValidRevertCall(zetaRevert) { - /** - * @dev: If something goes wrong we must swap to the original token - */ - (, address originSender, address originInputToken, uint256 inputTokenAmount, , , , , bool inputTokenIsETH) = abi - .decode(zetaRevert.message, (bytes32, address, address, uint256, bytes, address, bool, uint256, bool)); - - uint256 inputTokenReturnedAmount; - if (originInputToken == zetaToken) { - bool success1 = IERC20(zetaToken).approve(address(this), zetaRevert.zetaAmount); - bool success2 = IERC20(zetaToken).transferFrom(address(this), originSender, zetaRevert.zetaAmount); - if (!success1 || !success2) revert ErrorTransferringTokens(zetaToken); - inputTokenReturnedAmount = zetaRevert.zetaAmount; - } else { - /** - * @dev If the original input token is not Zeta, trade it using Uniswap - */ - { - bool success = IERC20(zetaToken).approve(uniswapV2RouterAddress, zetaRevert.zetaAmount); - if (!success) revert ErrorTransferringTokens(zetaToken); - } - - address[] memory path; - if (originInputToken == wETH) { - path = new address[](2); - path[0] = zetaToken; - path[1] = wETH; - } else { - path = new address[](3); - path[0] = zetaToken; - path[1] = wETH; - path[2] = originInputToken; - } - { - uint256[] memory amounts; - - if (inputTokenIsETH) { - amounts = uniswapV2Router.swapExactTokensForETH( - zetaRevert.zetaAmount, - 0, /// @dev Any output is fine, otherwise the value will be stuck in the contract - path, - originSender, - block.timestamp + MAX_DEADLINE - ); - } else { - amounts = uniswapV2Router.swapExactTokensForTokens( - zetaRevert.zetaAmount, - 0, /// @dev Any output is fine, otherwise the value will be stuck in the contract - path, - originSender, - block.timestamp + MAX_DEADLINE - ); - } - inputTokenReturnedAmount = amounts[amounts.length - 1]; - } - } - - emit RevertedSwap(originSender, originInputToken, inputTokenAmount, inputTokenReturnedAmount); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.bsc.sol b/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.bsc.sol deleted file mode 100644 index 6443b286..00000000 --- a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.bsc.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaReceiver.sol"; - -abstract contract MultiChainSwapBsc is ZetaReceiver { - address public connectorAddress; - ZetaConnector internal _zetaConnector; - - constructor(address _connectorAddress) { - connectorAddress = _connectorAddress; - _zetaConnector = ZetaConnector(_connectorAddress); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.eth.sol b/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.eth.sol deleted file mode 100644 index b60fde2b..00000000 --- a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwap.eth.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -import "./MultiChainSwap.base.sol"; - -abstract contract MultiChainSwapEth is MultiChainSwapBase { - address public connectorAddress; - ZetaConnector internal _zetaConnector; - - constructor(address _connectorAddress) { - connectorAddress = _connectorAddress; - _zetaConnector = ZetaConnector(_connectorAddress); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwapErrors.sol b/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwapErrors.sol deleted file mode 100644 index 4f4279d8..00000000 --- a/packages/example-contracts/contracts/multi-chain-swap/MultiChainSwapErrors.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -interface MultiChainSwapErrors { - error ErrorTransferringTokens(address token); - - error ErrorApprovingTokens(address token); - - error ErrorSwappingTokens(); - - error ValueShouldBeGreaterThanZero(); - - error OutTokenInvariant(); - - error InsufficientOutToken(); - - error MissingOriginInputTokenAddress(); - - error InvalidMessageType(); -} diff --git a/packages/example-contracts/contracts/multi-chain-swap/test/MultiChainSwapZetaConnector.sol b/packages/example-contracts/contracts/multi-chain-swap/test/MultiChainSwapZetaConnector.sol deleted file mode 100644 index 7d0ab6d3..00000000 --- a/packages/example-contracts/contracts/multi-chain-swap/test/MultiChainSwapZetaConnector.sol +++ /dev/null @@ -1,74 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -import "../MultiChainSwap.base.sol"; - -contract MultiChainSwapZetaConnector is ZetaConnector { - address public zetaToken; - - constructor(address zetaToken_) { - zetaToken = zetaToken_; - } - - function callOnZetaMessage( - bytes memory originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message - ) public { - return - MultiChainSwapBase(payable(destinationAddress)).onZetaMessage( - ZetaInterfaces.ZetaMessage({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function callOnZetaRevert( - address originSenderAddress, - uint256 originChainId, - uint256 destinationChainId, - bytes calldata destinationAddress, - uint256 zetaAmount, - uint256, // gasLimit - bytes calldata message - ) public { - return - MultiChainSwapBase(payable(originSenderAddress)).onZetaRevert( - ZetaInterfaces.ZetaRevert({ - originSenderAddress: originSenderAddress, - originChainId: originChainId, - destinationAddress: destinationAddress, - destinationChainId: destinationChainId, - zetaAmount: zetaAmount, - message: message - }) - ); - } - - function send(ZetaInterfaces.SendInput calldata sendInput) external { - uint256 originChainId = sendInput.destinationChainId == 2 ? 1 : 2; - address dest = address(uint160(bytes20(sendInput.destinationAddress))); - - if (sendInput.zetaAmount > 0) { - bool success = IERC20(zetaToken).transferFrom(msg.sender, dest, sendInput.zetaAmount); - require(success == true, "MultiChainSwap: error transferring token"); - } - - return - callOnZetaMessage( - abi.encodePacked(msg.sender), - originChainId, - dest, - sendInput.zetaAmount, - sendInput.message - ); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-value/MultiChainValue.sol b/packages/example-contracts/contracts/multi-chain-value/MultiChainValue.sol deleted file mode 100644 index 96ec0799..00000000 --- a/packages/example-contracts/contracts/multi-chain-value/MultiChainValue.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaEth.sol"; -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -contract MultiChainValue is Ownable { - address public zetaConnector; - address public zetaToken; - ZetaConnector internal connector; - - mapping(uint256 => bool) public availableChainIds; - - constructor(address zetaConnector_, address zetaTokenInput_) { - zetaConnector = zetaConnector_; - zetaToken = zetaTokenInput_; - connector = ZetaConnector(zetaConnector_); - } - - function addAvailableChainId(uint256 destinationChainId) external onlyOwner { - require(!availableChainIds[destinationChainId], "MultiChainValue: destinationChainId already enabled"); - - availableChainIds[destinationChainId] = true; - } - - function removeAvailableChainId(uint256 destinationChainId) external onlyOwner { - require(availableChainIds[destinationChainId], "MultiChainValue: destinationChainId not available"); - - delete availableChainIds[destinationChainId]; - } - - function send( - uint256 destinationChainId, - bytes calldata destinationAddress, - uint256 zetaAmount - ) external { - require(availableChainIds[destinationChainId], "MultiChainValue: destinationChainId not available"); - require(zetaAmount != 0, "MultiChainValue: zetaAmount should be greater than 0"); - - bool success1 = ZetaEth(zetaToken).approve(zetaConnector, zetaAmount); - bool success2 = ZetaEth(zetaToken).transferFrom(msg.sender, address(this), zetaAmount); - require((success1 && success2) == true, "MultiChainValue: error transferring Zeta"); - - connector.send( - ZetaInterfaces.SendInput({ - destinationChainId: destinationChainId, - destinationAddress: destinationAddress, - gasLimit: 300000, - message: abi.encode(), - zetaAmount: zetaAmount, - zetaParams: abi.encode("") - }) - ); - } -} diff --git a/packages/example-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol b/packages/example-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol deleted file mode 100644 index 7c0bac4d..00000000 --- a/packages/example-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@zetachain/protocol-contracts/contracts/ZetaInterfaces.sol"; - -contract ZetaConnectorMockValue is ZetaConnector { - function send(ZetaInterfaces.SendInput calldata input) external {} -} diff --git a/packages/example-contracts/docs/cross-chain-counter.md b/packages/example-contracts/docs/cross-chain-counter.md deleted file mode 100644 index 13002629..00000000 --- a/packages/example-contracts/docs/cross-chain-counter.md +++ /dev/null @@ -1,5 +0,0 @@ -# Cross Chain Counter - -[![Docs](https://img.shields.io/badge/Zeta%20docs-🔗-43ad51)](https://docs.zetachain.com/develop/examples/cross-chain-counter) - -A simple cross-chain counter using [Zeta Connector](https://docs.zetachain.com/reference/connector). diff --git a/packages/example-contracts/docs/cross-chain-warriors.md b/packages/example-contracts/docs/cross-chain-warriors.md deleted file mode 100644 index 10b35202..00000000 --- a/packages/example-contracts/docs/cross-chain-warriors.md +++ /dev/null @@ -1,20 +0,0 @@ -# Cross Chain Warriors - -[![Docs](https://img.shields.io/badge/Zeta%20docs-🔗-43ad51)](https://docs.zetachain.com/develop/examples/cross-chain-nft) - -A cross-chain NFT collection using [Zeta Connector](https://docs.zetachain.com/reference/connector). - -## Try it in testnet - -The collection is currently deployed to [BSC Testnet](https://testnet.bscscan.com/address/0xa9016FB99846314E0f96f657E5271cFD7919a244) and [Goerli](https://goerli.etherscan.io/address/0xe08f1d23a68231543a595391D82c39BbaFc22470), the contracts are verified so you can use BSCScan and Etherscan to play with them. - -### Doing a cross-chain NFT transfer - -1. Go to the [BSC Testnet contract's write methods](https://testnet.bscscan.com/address/0xa9016FB99846314E0f96f657E5271cFD7919a244#writeContract). -1. Connect with your wallet. -1. Mint an NFT to your address. -1. View the transaction and copy the TokenId. -1. Call the crossChainTransfer method with the receiver address on the other chain and the TokenId you just minted. -1. After the transaction was mined, go to the contract's read methods and call ownerOf TokenId, you should get an `execution reverted` message since the NFT was burnt by the crossChainTransfer. -1. Go to the [Goerli contract's read methods](https://goerli.etherscan.io/address/0xe08f1d23a68231543a595391D82c39BbaFc22470#readContract). -1. Call the ownerOf method with your TokenId, the owner should be the receiver address you used before. *If it's not, note that the cross-chain transfer may take around 1 minute.* diff --git a/packages/example-contracts/lib/cross-chain-counter/CrossChainCounter.helpers.ts b/packages/example-contracts/lib/cross-chain-counter/CrossChainCounter.helpers.ts deleted file mode 100644 index 87b66381..00000000 --- a/packages/example-contracts/lib/cross-chain-counter/CrossChainCounter.helpers.ts +++ /dev/null @@ -1,62 +0,0 @@ -import assert from "assert"; -import { ethers, network } from "hardhat"; - -import { - CounterZetaConnectorMock, - CounterZetaConnectorMock__factory as CounterZetaConnectorMockFactory, - CrossChainCounter, - CrossChainCounter__factory as CrossChainCounterFactory, -} from "../../typechain-types"; -import { isNetworkName, networkVariables } from "../shared/network.constants"; - -/** - * @description only for testing or local environment - */ -export const deployTestCrossChainCounter = async ({ - zetaConnectorMockAddress, -}: { - zetaConnectorMockAddress: string; -}) => { - const isLocalEnvironment = network.name === "hardhat"; - - assert(isLocalEnvironment, "This function is only intended to be used in the local environment"); - - const Factory = (await ethers.getContractFactory("CrossChainCounter")) as CrossChainCounterFactory; - - const crossChainCounterContract = (await Factory.deploy(zetaConnectorMockAddress)) as CrossChainCounter; - - await crossChainCounterContract.deployed(); - - return crossChainCounterContract; -}; - -export const getCrossChainCounter = async (existingContractAddress?: string) => { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - const isGetExistingContract = typeof existingContractAddress !== "undefined"; - - const _networkVariables = networkVariables[network.name]; - - const Factory = (await ethers.getContractFactory("CrossChainCounter")) as CrossChainCounterFactory; - - if (isGetExistingContract) { - console.log("Getting existing CrossChainCounter"); - return Factory.attach(existingContractAddress) as CrossChainCounter; - } - - console.log("Deploying CrossChainCounter"); - const crossChainCounterContract = (await Factory.deploy(_networkVariables.CONNECTOR_ADDRESS)) as CrossChainCounter; - - await crossChainCounterContract.deployed(); - - return crossChainCounterContract; -}; - -export const deployZetaConnectorMock = async () => { - const Factory = (await ethers.getContractFactory("CounterZetaConnectorMock")) as CounterZetaConnectorMockFactory; - - const zetaConnectorMockContract = (await Factory.deploy()) as CounterZetaConnectorMock; - - await zetaConnectorMockContract.deployed(); - - return zetaConnectorMockContract; -}; diff --git a/packages/example-contracts/lib/cross-chain-warriors/CrossChainWarriors.helpers.ts b/packages/example-contracts/lib/cross-chain-warriors/CrossChainWarriors.helpers.ts deleted file mode 100644 index c948cb9b..00000000 --- a/packages/example-contracts/lib/cross-chain-warriors/CrossChainWarriors.helpers.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import assert from "assert"; -import { ethers, network } from "hardhat"; - -import { - CrossChainWarriors, - CrossChainWarriors__factory as CrossChainWarriorsFactory, - CrossChainWarriorsMock, - CrossChainWarriorsMock__factory as CrossChainWarriorsMockFactory, - CrossChainWarriorsZetaConnectorMock, - CrossChainWarriorsZetaConnectorMock__factory as CrossChainWarriorsZetaConnectorMockFactory, -} from "../../typechain-types"; -import { isNetworkName } from "../shared/network.constants"; - -/** - * @description only for testing or local environment - */ -export const deployCrossChainWarriorsMock = async ({ - customUseEven, - zetaConnectorMockAddress, - zetaTokenMockAddress, -}: { - customUseEven: boolean; - zetaConnectorMockAddress: string; - zetaTokenMockAddress: string; -}) => { - const isLocalEnvironment = network.name === "hardhat"; - - assert(isLocalEnvironment, "localDeployCrossChainWarriors is only intended to be used in the local environment"); - - const Factory = (await ethers.getContractFactory("CrossChainWarriorsMock")) as CrossChainWarriorsMockFactory; - - const useEven = customUseEven; - - const crossChainWarriorsContract = (await Factory.deploy( - zetaConnectorMockAddress, - zetaTokenMockAddress, - useEven - )) as CrossChainWarriorsMock; - - await crossChainWarriorsContract.deployed(); - - return crossChainWarriorsContract; -}; - -export const getCrossChainWarriorsArgs = (): [string, string, boolean] => [ - getAddress("connector"), - getAddress("zetaToken"), - network.name === "goerli", -]; - -export const getCrossChainWarriors = async (existingContractAddress?: string) => { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - const isGetExistingContract = typeof existingContractAddress !== "undefined"; - - const Factory = (await ethers.getContractFactory("CrossChainWarriors")) as CrossChainWarriorsFactory; - - if (isGetExistingContract) { - console.log("Getting existing Cross Chain Warriors"); - return Factory.attach(existingContractAddress) as CrossChainWarriors; - } - - console.log("Deploying Cross Chain Warriors"); - const crossChainWarriorsContract = (await Factory.deploy( - getCrossChainWarriorsArgs()[0], - getCrossChainWarriorsArgs()[1], - getCrossChainWarriorsArgs()[2] - )) as CrossChainWarriors; - - await crossChainWarriorsContract.deployed(); - - return crossChainWarriorsContract; -}; - -export const deployZetaConnectorMock = async () => { - const Factory = (await ethers.getContractFactory( - "CrossChainWarriorsZetaConnectorMock" - )) as CrossChainWarriorsZetaConnectorMockFactory; - - const zetaConnectorMockContract = (await Factory.deploy()) as CrossChainWarriorsZetaConnectorMock; - - await zetaConnectorMockContract.deployed(); - - return zetaConnectorMockContract; -}; diff --git a/packages/example-contracts/lib/multi-chain-swap/MultiChainSwap.helpers.ts b/packages/example-contracts/lib/multi-chain-swap/MultiChainSwap.helpers.ts deleted file mode 100644 index cb078c99..00000000 --- a/packages/example-contracts/lib/multi-chain-swap/MultiChainSwap.helpers.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { - MultiChainSwapBase, - MultiChainSwapBase__factory as MultiChainSwapBaseFactory, - MultiChainSwapZetaConnector, - MultiChainSwapZetaConnector__factory, -} from "../../typechain-types"; -import { getContract, GetContractParams } from "../shared/deploy.helpers"; - -export const getMultiChainSwapBase = async (params: GetContractParams) => - getContract({ - contractName: "MultiChainSwapBase", - ...params, - }); - -export const getMultiChainSwapZetaConnector = async (zetaToken: string) => - getContract({ - contractName: "MultiChainSwapZetaConnector", - deployParams: [zetaToken], - }); diff --git a/packages/example-contracts/lib/shared/deploy.helpers.ts b/packages/example-contracts/lib/shared/deploy.helpers.ts deleted file mode 100644 index e57bcc2c..00000000 --- a/packages/example-contracts/lib/shared/deploy.helpers.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { getAddress, getScanVariable, NetworkName, ZetaAddress, ZetaNetworkName } from "@zetachain/addresses"; -import { execSync } from "child_process"; -import { BaseContract, ContractFactory } from "ethers"; -import { ethers } from "hardhat"; - -import { - ERC20, - ERC20__factory as ERC20Factory, - UniswapV2Router02, - UniswapV2Router02__factory as UniswapV2Router02Factory, - ZetaEthMock, - ZetaEthMock__factory as ZetaEthMockFactory, -} from "../../typechain-types"; - -export type GetContractParams = - | { - deployParams: Parameters; - existingContractAddress?: null; - } - | { - deployParams?: null; - existingContractAddress: string; - }; - -export const getContract = async ({ - contractName, - deployParams, - existingContractAddress, -}: GetContractParams & { contractName: string }): Promise => { - const ContractFactory = (await ethers.getContractFactory(contractName)) as Factory; - - const isGetExistingContract = Boolean(existingContractAddress); - if (isGetExistingContract) { - console.log("Getting existing contract from address:", existingContractAddress); - return ContractFactory.attach(existingContractAddress!) as Contract; - } - - const contract = (await ContractFactory.deploy(...deployParams!)) as Contract; - await contract.deployed(); - - return contract; -}; - -export const getErc20 = async (existingContractAddress?: string) => - getContract({ - contractName: "ERC20", - ...(existingContractAddress ? { existingContractAddress } : { deployParams: ["ERC20Mock", "ERC20Mock"] }), - }); - -export const getZetaMock = async () => - getContract({ - contractName: "ZetaEthMock", - deployParams: ["10000000"], - }); - -export const getNow = async () => { - const block = await ethers.provider.getBlock("latest"); - return block.timestamp; -}; - -export const getUniswapV2Router02 = async () => - getContract({ - contractName: "UniswapV2Router02", - existingContractAddress: getAddress("uniswapV2Router02", { - customNetworkName: "eth-mainnet", - customZetaNetwork: "mainnet", - }), - }); - -export const verifyContract = ( - addressName: ZetaAddress, - { - customNetworkName, - customZetaNetwork, - }: { customNetworkName?: NetworkName; customZetaNetwork?: ZetaNetworkName } = {} -) => { - const ZETA_NETWORK = process.env.ZETA_NETWORK || customZetaNetwork; - - console.log(`Verifying ${addressName} address on ${ZETA_NETWORK}: ${customNetworkName}.`); - - const command = `ZETA_NETWORK=${ZETA_NETWORK} SCAN_API_KEY=${getScanVariable()} npx hardhat verify --network ${customNetworkName} --constructor-args lib/args/${addressName}.js ${getAddress( - addressName - )}`; - - execSync(command); -}; diff --git a/packages/example-contracts/lib/shared/network.constants.ts b/packages/example-contracts/lib/shared/network.constants.ts deleted file mode 100644 index 1e94ddd5..00000000 --- a/packages/example-contracts/lib/shared/network.constants.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { NetworkName } from "@zetachain/addresses"; - -type ChainId = 0 | 5 | 97 | 1337; - -export type NetworkVariables = { - CONNECTOR_ADDRESS: string; - chainId: ChainId; - crossChainId: ChainId; - crossChainName: NetworkName | ""; -}; - -export const networkVariables: Record = { - "bsc-testnet": { - CONNECTOR_ADDRESS: "0xE626402550fB921E4a47c11568F89dF3496fbEF0", - chainId: 97, - crossChainId: 5, - crossChainName: "goerli", - }, - goerli: { - CONNECTOR_ADDRESS: "0x68Bc806414e743D88436AEB771Be387A55B4df70", - chainId: 5, - crossChainId: 97, - crossChainName: "bsc-testnet", - }, - "polygon-mumbai": { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - "eth-mainnet": { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - hardhat: { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - ropsten: { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - "eth-localnet": { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - "bsc-localnet": { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, - "polygon-localnet": { - CONNECTOR_ADDRESS: "", - chainId: 0, - crossChainId: 0, - crossChainName: "", - }, -}; - -export const isNetworkName = (str: string): str is NetworkName => str in networkVariables; - -export type AddressConstants = Partial< - Record< - NetworkName, - { - crossChainWarriorsAddress: string; - } - > ->; diff --git a/packages/example-contracts/scripts/add-liquidity-uniswap-v2.ts b/packages/example-contracts/scripts/add-liquidity-uniswap-v2.ts deleted file mode 100644 index 0a7c6802..00000000 --- a/packages/example-contracts/scripts/add-liquidity-uniswap-v2.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { MaxUint256 } from "@ethersproject/constants"; -import { parseUnits } from "@ethersproject/units"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { getAddress } from "@zetachain/addresses"; -import { BigNumber } from "ethers"; -import { ethers } from "hardhat"; - -import { getContract } from "../lib/shared/deploy.helpers"; -import { - ERC20__factory, - IUniswapV2Factory__factory, - IUniswapV2Pair__factory, - IUniswapV2Router02, - UniswapV2Router02, - UniswapV2Router02__factory, -} from "../typechain-types"; - -const UNISWAP_FACTORY_ADDRESS = "0xb7926c0430afb07aa7defde6da862ae0bde767bc"; - -const ZETA_TO_ADD = parseUnits("19000"); -const ETH_TO_ADD = parseUnits("10"); - -interface Pair { - TokenA: string; - TokenB: string; -} - -export const getNow = async () => { - const block = await ethers.provider.getBlock("latest"); - return block.timestamp; -}; - -export const sortPair = (token1: string, token2: string): Pair => { - if (token1 < token2) { - return { TokenA: token1, TokenB: token2 }; - } - return { TokenA: token2, TokenB: token1 }; -}; - -const addZetaEthLiquidity = async ( - zetaTokenAddress: string, - zetaToAdd: BigNumber, - ETHToAdd: BigNumber, - uniswapRouter: IUniswapV2Router02, - deployer: SignerWithAddress -) => { - const ZetaTokenContract = ERC20__factory.connect(zetaTokenAddress, deployer); - - const tx1 = await ZetaTokenContract.approve(uniswapRouter.address, MaxUint256); - await tx1.wait(); - - const tx2 = await uniswapRouter.addLiquidityETH( - ZetaTokenContract.address, - zetaToAdd, - 0, - 0, - deployer.address, - (await getNow()) + 360, - { value: ETHToAdd, gasLimit: 10_000_000 } - ); - await tx2.wait(); -}; - -const estimateEthForZeta = async ( - zetaTokenAddress: string, - zetaToAdd: BigNumber, - uniswapRouter: IUniswapV2Router02, - deployer: SignerWithAddress -) => { - const WETH = await uniswapRouter.WETH(); - - const uniswapV2Factory = IUniswapV2Factory__factory.connect(UNISWAP_FACTORY_ADDRESS, deployer); - - const pair = sortPair(zetaTokenAddress, WETH); - - const poolAddress = await uniswapV2Factory.getPair(pair.TokenA, pair.TokenB); - - const pool = IUniswapV2Pair__factory.connect(poolAddress, deployer); - - const reserves = await pool.getReserves(); - const reservesZeta = WETH < zetaTokenAddress ? reserves.reserve0 : reserves.reserve1; - const reservesETH = WETH > zetaTokenAddress ? reserves.reserve0 : reserves.reserve1; - const ETHValue = await uniswapRouter.quote(zetaToAdd, reservesZeta, reservesETH); - - return ETHValue; -}; - -export const getUniswapV2Router02 = async () => - getContract({ - contractName: "UniswapV2Router02", - existingContractAddress: getAddress("uniswapV2Router02"), - }); - -async function main() { - const [deployer] = await ethers.getSigners(); - - const zetaTokenAddress = getAddress("zetaToken"); - - const uniswapRouter = await getUniswapV2Router02(); - - let ethToAdd = ETH_TO_ADD; - if (ETH_TO_ADD.isZero()) { - ethToAdd = await estimateEthForZeta(zetaTokenAddress, ZETA_TO_ADD, uniswapRouter, deployer); - } - - await addZetaEthLiquidity(zetaTokenAddress, ZETA_TO_ADD, ethToAdd, uniswapRouter, deployer); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/example-contracts/scripts/cross-chain-counter/deploy.ts b/packages/example-contracts/scripts/cross-chain-counter/deploy.ts deleted file mode 100644 index cb097d3d..00000000 --- a/packages/example-contracts/scripts/cross-chain-counter/deploy.ts +++ /dev/null @@ -1,11 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import hardhat from "hardhat"; - -async function main() { - console.log(`Deploying CrossChainCounter...`); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/example-contracts/scripts/cross-chain-warriors/deploy.ts b/packages/example-contracts/scripts/cross-chain-warriors/deploy.ts deleted file mode 100644 index cbed34ef..00000000 --- a/packages/example-contracts/scripts/cross-chain-warriors/deploy.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { isNetworkName, saveAddress } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { getCrossChainWarriors } from "../../lib/cross-chain-warriors/CrossChainWarriors.helpers"; - -async function main() { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - - const crossChainWarriorsContract = await getCrossChainWarriors(); - - console.log("Setting base URI"); - ( - await crossChainWarriorsContract.setBaseURI( - "https://gateway.pinata.cloud/ipfs/QmNRP9kZ2SJXnFnxwvhQbxQHQuXVWVive3JkCNgG6315iH/" - ) - ).wait(); - - const [deployer] = await ethers.getSigners(); - - console.log("Minting"); - await crossChainWarriorsContract.mint(deployer.address); - - saveAddress("crossChainNft", crossChainWarriorsContract.address); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/example-contracts/scripts/cross-chain-warriors/set-cross-chain-data.ts b/packages/example-contracts/scripts/cross-chain-warriors/set-cross-chain-data.ts deleted file mode 100644 index e3f9fbed..00000000 --- a/packages/example-contracts/scripts/cross-chain-warriors/set-cross-chain-data.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { getCrossChainWarriors } from "../../lib/cross-chain-warriors/CrossChainWarriors.helpers"; -import { isNetworkName, networkVariables } from "../../lib/shared/network.constants"; - -async function main() { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - - const _networkVariables = networkVariables[network.name]; - - const crossChainWarriorsAddress = getAddress("crossChainNft"); - - const crossChainWarriorsContract = await getCrossChainWarriors(crossChainWarriorsAddress); - - if (_networkVariables.crossChainName === "") throw new Error("Invalid crossChainName"); - - const crossChainAddress = getAddress("crossChainNft", { - customNetworkName: _networkVariables.crossChainName, - }); - - const encodedCrossChainAddress = ethers.utils.solidityPack(["address"], [crossChainAddress]); - - console.log("Setting cross-chain address:", encodedCrossChainAddress); - - await (await crossChainWarriorsContract.setCrossChainAddress(encodedCrossChainAddress)).wait(); - - console.log("Setting cross-chain id:", _networkVariables.crossChainId); - - await (await crossChainWarriorsContract.setCrossChainId(_networkVariables.crossChainId)).wait(); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/example-contracts/scripts/cross-chain-warriors/verify-contract.ts b/packages/example-contracts/scripts/cross-chain-warriors/verify-contract.ts deleted file mode 100644 index 9dda0f43..00000000 --- a/packages/example-contracts/scripts/cross-chain-warriors/verify-contract.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import hardhat from "hardhat"; - -import { getCrossChainWarriorsArgs } from "../../lib/cross-chain-warriors/CrossChainWarriors.helpers"; - -async function main() { - await hardhat.run("verify:verify", { - address: getAddress("crossChainNft"), - constructorArguments: getCrossChainWarriorsArgs(), - }); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/example-contracts/scripts/multi-chain-swap/deploy-multi-chain-swap.ts b/packages/example-contracts/scripts/multi-chain-swap/deploy-multi-chain-swap.ts deleted file mode 100644 index 4ff20ac5..00000000 --- a/packages/example-contracts/scripts/multi-chain-swap/deploy-multi-chain-swap.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { getAddress, isNetworkName, saveAddress } from "@zetachain/addresses"; -import { network } from "hardhat"; - -import { getMultiChainSwapBase } from "../../lib/multi-chain-swap/MultiChainSwap.helpers"; - -export async function deployMultiChainSwap() { - if (!isNetworkName(network.name) || !network.name) throw new Error("Invalid network name"); - - const multiChainSwapContract = await getMultiChainSwapBase({ - deployParams: [getAddress("connector"), getAddress("zetaToken"), getAddress("uniswapV2Router02")], - }); - - saveAddress("multiChainSwap", multiChainSwapContract.address); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - deployMultiChainSwap().catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/example-contracts/scripts/multi-chain-swap/deploy.ts b/packages/example-contracts/scripts/multi-chain-swap/deploy.ts deleted file mode 100644 index c0152840..00000000 --- a/packages/example-contracts/scripts/multi-chain-swap/deploy.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { deployMultiChainSwap } from "./deploy-multi-chain-swap"; -import { setMultiChainSwapCrossChainData } from "./set-cross-chain-data"; - -async function main() { - await deployMultiChainSwap(); - await setMultiChainSwapCrossChainData(); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/example-contracts/scripts/multi-chain-swap/do-cross-chain-swap.ts b/packages/example-contracts/scripts/multi-chain-swap/do-cross-chain-swap.ts deleted file mode 100644 index 792403ca..00000000 --- a/packages/example-contracts/scripts/multi-chain-swap/do-cross-chain-swap.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { getAddress, isNetworkName } from "@zetachain/addresses"; -import { parseUnits } from "ethers/lib/utils"; -import { ethers, network } from "hardhat"; - -import { getMultiChainSwapBase } from "../../lib/multi-chain-swap/MultiChainSwap.helpers"; -import { networkVariables } from "../../lib/shared/network.constants"; - -export async function doCrossChainSwap() { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - - const _networkVariables = networkVariables[network.name]; - - if (!_networkVariables.crossChainName) throw new Error("Invalid crossChainName"); - - const multiChainSwapContract = await getMultiChainSwapBase({ - existingContractAddress: getAddress("multiChainSwap"), - }); - - const [account1] = await ethers.getSigners(); - - await ( - await multiChainSwapContract.swapETHForTokensCrossChain( - ethers.utils.solidityPack(["address"], [account1.address]), - getAddress("zetaToken", { customNetworkName: _networkVariables.crossChainName }), - false, - 0, - _networkVariables.crossChainId, - 1_000_000, - { - value: parseUnits("1"), - } - ) - ).wait(); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - doCrossChainSwap().catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/example-contracts/scripts/multi-chain-swap/set-cross-chain-data.ts b/packages/example-contracts/scripts/multi-chain-swap/set-cross-chain-data.ts deleted file mode 100644 index 0f34912c..00000000 --- a/packages/example-contracts/scripts/multi-chain-swap/set-cross-chain-data.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { getAddress, isNetworkName } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { getMultiChainSwapBase } from "../../lib/multi-chain-swap/MultiChainSwap.helpers"; -import { networkVariables } from "../../lib/shared/network.constants"; - -export async function setMultiChainSwapCrossChainData() { - if (!isNetworkName(network.name)) throw new Error("Invalid network name"); - - const _networkVariables = networkVariables[network.name]; - - if (!_networkVariables.crossChainName) throw new Error("Invalid crossChainName"); - - const crossChainMultiChainSwapAddress = getAddress("multiChainSwap"); - - const crossChainMultiChainSwapContract = await getMultiChainSwapBase({ - existingContractAddress: crossChainMultiChainSwapAddress, - }); - - const crossChainAddress = getAddress("multiChainSwap", { - customNetworkName: _networkVariables.crossChainName, - }); - - const encodedCrossChainAddress = ethers.utils.solidityPack(["address"], [crossChainAddress]); - - console.log( - "Setting cross-chain address:", - encodedCrossChainAddress, - "cross-chain id:", - _networkVariables.crossChainId - ); - - await ( - await crossChainMultiChainSwapContract.setInteractorByChainId( - _networkVariables.crossChainId, - encodedCrossChainAddress - ) - ).wait(); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - setMultiChainSwapCrossChainData().catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/example-contracts/scripts/multi-chain-swap/verify-contract.ts b/packages/example-contracts/scripts/multi-chain-swap/verify-contract.ts deleted file mode 100644 index 0c47d60d..00000000 --- a/packages/example-contracts/scripts/multi-chain-swap/verify-contract.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import hardhat from "hardhat"; - -import { getCrossChainWarriorsArgs } from "../../lib/cross-chain-warriors/CrossChainWarriors.helpers"; - -async function main() { - await hardhat.run("verify:verify", { - address: getAddress("multiChainSwap"), - constructorArguments: [getAddress("connector"), getAddress("zetaToken"), getAddress("uniswapV2Router02")], - }); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/example-contracts/scripts/multi-chain-value/deploy.ts b/packages/example-contracts/scripts/multi-chain-value/deploy.ts deleted file mode 100644 index 37e634e5..00000000 --- a/packages/example-contracts/scripts/multi-chain-value/deploy.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { getAddress, getChainId, isNetworkName, isZetaTestnet, saveAddress } from "@zetachain/addresses"; -import { network } from "hardhat"; - -import { getMultiChainValue } from "../../lib/multi-chain-value/MultiChainValue.helpers"; - -const networkName = network.name; -const { ZETA_NETWORK } = process.env; - -async function main() { - if (!isNetworkName(networkName)) throw new Error("Invalid network name"); - - const multiChainValueContract = await getMultiChainValue(getAddress("multiChainValue")); - - if (isZetaTestnet(ZETA_NETWORK)) { - networkName !== "goerli" && - (await (await multiChainValueContract.addAvailableChainId(getChainId("goerli"))) - .wait() - .catch((e) => console.error(e))); - - networkName !== "polygon-mumbai" && - (await (await multiChainValueContract.addAvailableChainId(getChainId("polygon-mumbai"))) - .wait() - .catch((e) => console.error(e))); - - networkName !== "bsc-testnet" && - (await (await multiChainValueContract.addAvailableChainId(getChainId("bsc-testnet"))) - .wait() - .catch((e) => console.error(e))); - - networkName !== "ropsten" && - (await (await multiChainValueContract.addAvailableChainId(getChainId("ropsten"))) - .wait() - .catch((e) => console.error(e))); - } - - saveAddress("multiChainValue", multiChainValueContract.address); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/example-contracts/scripts/multi-chain-value/send-value.ts b/packages/example-contracts/scripts/multi-chain-value/send-value.ts deleted file mode 100644 index 48b5ac35..00000000 --- a/packages/example-contracts/scripts/multi-chain-value/send-value.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { getAddress, getChainId, isNetworkName, isZetaTestnet } from "@zetachain/addresses"; -import { parseEther } from "ethers/lib/utils"; -import { ethers, network } from "hardhat"; - -import { getMultiChainValue } from "../../lib/multi-chain-value/MultiChainValue.helpers"; -import { getErc20 } from "../../lib/shared/deploy.helpers"; - -const networkName = network.name; -const { ZETA_NETWORK } = process.env; - -async function main() { - if (!isNetworkName(networkName)) throw new Error("Invalid network name"); - const multiChainValueContract = await getMultiChainValue(getAddress("multiChainValue")); - - const zetaToken = await getErc20(getAddress("zetaToken")); - - const amount = parseEther("1"); - - await zetaToken.approve(multiChainValueContract.address, amount.mul(10)); - - if (isZetaTestnet(ZETA_NETWORK)) { - networkName !== "goerli" && - (await ( - await multiChainValueContract.send( - getChainId("goerli"), - ethers.utils.solidityPack(["address"], [process.env.PUBLIC_KEY_1]), - amount - ) - ).wait()); - - networkName !== "polygon-mumbai" && - (await ( - await multiChainValueContract.send( - getChainId("polygon-mumbai"), - ethers.utils.solidityPack(["address"], [process.env.PUBLIC_KEY_1]), - amount - ) - ).wait()); - - networkName !== "bsc-testnet" && - (await ( - await multiChainValueContract.send( - getChainId("bsc-testnet"), - ethers.utils.solidityPack(["address"], [process.env.PUBLIC_KEY_1]), - amount - ) - ).wait()); - - networkName !== "ropsten" && - (await ( - await multiChainValueContract.send( - getChainId("ropsten"), - ethers.utils.solidityPack(["address"], [process.env.PUBLIC_KEY_1]), - amount - ) - ).wait()); - } -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/example-contracts/scripts/multi-chain-value/verify-contract.ts b/packages/example-contracts/scripts/multi-chain-value/verify-contract.ts deleted file mode 100644 index 0accdf56..00000000 --- a/packages/example-contracts/scripts/multi-chain-value/verify-contract.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import hardhat from "hardhat"; - -async function main() { - await hardhat.run("verify:verify", { - address: getAddress("multiChainValue"), - contract: "contracts/multi-chain-value/MultiChainValue.sol:MultiChainValue", - constructorArguments: [getAddress("connector"), getAddress("zetaToken")], - }); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/example-contracts/test/CrossChainCounter.spec.ts b/packages/example-contracts/test/CrossChainCounter.spec.ts deleted file mode 100644 index d5c60124..00000000 --- a/packages/example-contracts/test/CrossChainCounter.spec.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; - -import { - deployTestCrossChainCounter, - deployZetaConnectorMock, -} from "../lib/cross-chain-counter/CrossChainCounter.helpers"; -import { CounterZetaConnectorMock, CrossChainCounter } from "../typechain-types"; - -describe("CrossChainCounter tests", () => { - let crossChainCounterContractA: CrossChainCounter; - const chainAId = 1; - - let crossChainCounterContractB: CrossChainCounter; - const chainBId = 2; - - let zetaConnectorMockContract: CounterZetaConnectorMock; - - let accounts: SignerWithAddress[]; - let deployer: SignerWithAddress; - let deployerAddress: string; - - const encoder = new ethers.utils.AbiCoder(); - - beforeEach(async () => { - zetaConnectorMockContract = await deployZetaConnectorMock(); - crossChainCounterContractA = await deployTestCrossChainCounter({ - zetaConnectorMockAddress: zetaConnectorMockContract.address, - }); - crossChainCounterContractB = await deployTestCrossChainCounter({ - zetaConnectorMockAddress: zetaConnectorMockContract.address, - }); - - await crossChainCounterContractA.setCrossChainAddress( - ethers.utils.solidityPack(["address"], [crossChainCounterContractB.address]) - ); - await crossChainCounterContractB.setCrossChainAddress( - ethers.utils.solidityPack(["address"], [crossChainCounterContractA.address]) - ); - await crossChainCounterContractA.setCrossChainId(chainBId); - await crossChainCounterContractB.setCrossChainId(chainAId); - - accounts = await ethers.getSigners(); - [deployer] = accounts; - deployerAddress = deployer.address; - }); - - describe("crossChainCount", () => { - it("Should revert if the cross chain address wasn't set", async () => { - const unsetContract = await deployTestCrossChainCounter({ - zetaConnectorMockAddress: zetaConnectorMockContract.address, - }); - - await expect(unsetContract.crossChainCount()).to.be.revertedWith("Cross-chain address is not set"); - }); - - it("Should revert if the cross chain id wasn't set", async () => { - const unsetContract = await deployTestCrossChainCounter({ - zetaConnectorMockAddress: zetaConnectorMockContract.address, - }); - - await unsetContract.setCrossChainAddress( - ethers.utils.solidityPack(["address"], [crossChainCounterContractB.address]) - ); - - await expect(unsetContract.crossChainCount()).to.be.revertedWith("Cross-chain id is not set"); - }); - }); - - describe("onZetaMessage", () => { - it("Should revert if the caller is not the Connector contract", async () => { - await expect( - crossChainCounterContractA.onZetaMessage({ - originSenderAddress: ethers.utils.solidityPack(["address"], [crossChainCounterContractA.address]), - originChainId: 1, - destinationAddress: crossChainCounterContractB.address, - zetaAmount: 0, - message: encoder.encode(["address"], [deployerAddress]), - }) - ).to.be.revertedWith("This function can only be called by the Connector contract"); - }); - - it("Should revert if the cross-chain address doesn't match with the stored one", async () => { - await expect( - zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [deployerAddress]), - 1, - crossChainCounterContractB.address, - 0, - encoder.encode(["address"], [zetaConnectorMockContract.address]) - ) - ).to.be.revertedWith("Cross-chain address doesn't match"); - }); - - describe("Given a valid message", () => { - it("Should increment the counter", async () => { - const messageType = await crossChainCounterContractA.CROSS_CHAIN_INCREMENT_MESSAGE(); - - const originalValue = await crossChainCounterContractB.counter(deployerAddress); - expect(originalValue.toNumber()).to.equal(0); - - await ( - await zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [crossChainCounterContractA.address]), - 1, - crossChainCounterContractB.address, - 0, - encoder.encode(["bytes32", "address"], [messageType, deployer.address]) - ) - ).wait(); - - const newValue = await crossChainCounterContractB.counter(deployerAddress); - expect(newValue.toNumber()).to.equal(1); - }); - }); - }); - - describe("onZetaRevert", () => { - it("Should work", async () => {}); - }); -}); diff --git a/packages/example-contracts/test/CrossChainWarriors.spec.ts b/packages/example-contracts/test/CrossChainWarriors.spec.ts deleted file mode 100644 index 3eb8f663..00000000 --- a/packages/example-contracts/test/CrossChainWarriors.spec.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; - -import { - deployCrossChainWarriorsMock, - deployZetaConnectorMock, -} from "../lib/cross-chain-warriors/CrossChainWarriors.helpers"; -import { getZetaMock } from "../lib/shared/deploy.helpers"; -import { CrossChainWarriorsMock, CrossChainWarriorsZetaConnectorMock, ZetaEthMock } from "../typechain-types"; -import { getMintTokenId } from "./test.helpers"; - -describe("CrossChainWarriors tests", () => { - let zetaConnectorMockContract: CrossChainWarriorsZetaConnectorMock; - let zetaEthTokenMockContract: ZetaEthMock; - - let crossChainWarriorsContractChainA: CrossChainWarriorsMock; - const chainAId = 1; - - let crossChainWarriorsContractChainB: CrossChainWarriorsMock; - const chainBId = 2; - - let accounts: SignerWithAddress[]; - let deployer: SignerWithAddress; - let account1: SignerWithAddress; - let deployerAddress: string; - let account1Address: string; - const encoder = new ethers.utils.AbiCoder(); - - beforeEach(async () => { - zetaConnectorMockContract = await deployZetaConnectorMock(); - zetaEthTokenMockContract = await getZetaMock(); - - crossChainWarriorsContractChainA = await deployCrossChainWarriorsMock({ - customUseEven: false, - zetaConnectorMockAddress: zetaConnectorMockContract.address, - zetaTokenMockAddress: zetaEthTokenMockContract.address, - }); - await crossChainWarriorsContractChainA.setCrossChainId(chainBId); - - crossChainWarriorsContractChainB = await deployCrossChainWarriorsMock({ - customUseEven: true, - zetaConnectorMockAddress: zetaConnectorMockContract.address, - zetaTokenMockAddress: zetaEthTokenMockContract.address, - }); - await crossChainWarriorsContractChainB.setCrossChainId(chainAId); - await crossChainWarriorsContractChainB.setCrossChainAddress( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]) - ); - - await crossChainWarriorsContractChainA.setCrossChainAddress( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainB.address]) - ); - - /** - * @description to pay for cross-chain gas - */ - await zetaEthTokenMockContract.approve(crossChainWarriorsContractChainA.address, ethers.constants.MaxUint256); - await zetaEthTokenMockContract.approve(crossChainWarriorsContractChainB.address, ethers.constants.MaxUint256); - - accounts = await ethers.getSigners(); - [deployer, account1] = accounts; - deployerAddress = deployer.address; - account1Address = account1.address; - }); - - describe("constructor", () => { - it("Should set the tokenIds counter to 1 when useEven is false", async () => { - expect(await crossChainWarriorsContractChainA.tokenIds()).to.equal(1); - }); - - it("Should set the tokenIds counter to 2 when useEven is true", async () => { - expect(await crossChainWarriorsContractChainB.tokenIds()).to.equal(2); - }); - }); - - describe("mint", () => { - it("Should increment tokenIds by two", async () => { - expect(await crossChainWarriorsContractChainA.tokenIds()).to.equal(1); - - await (await crossChainWarriorsContractChainA.mint(account1Address)).wait(); - - expect(await crossChainWarriorsContractChainA.tokenIds()).to.equal(3); - }); - - it("Should create a new NFT owned by the input address", async () => { - const result = await (await crossChainWarriorsContractChainA.mint(account1Address)).wait(); - - const tokenId = getMintTokenId(result); - - expect(await crossChainWarriorsContractChainA.ownerOf(tokenId)).to.equal(account1Address); - }); - }); - - describe("mintId", () => { - it("Should mint an NFT with the given input id owned by the input address", async () => { - const id = 10; - - await (await crossChainWarriorsContractChainA.mintId(account1Address, id)).wait(); - - expect(await crossChainWarriorsContractChainA.ownerOf(id)).to.equal(account1Address); - }); - }); - - describe("crossChainTransfer", () => { - it("Should revert if the caller is not the NFT owner nor approved", async () => { - const id = 10; - - await (await crossChainWarriorsContractChainA.mintId(account1Address, id)).wait(); - - /** - * The caller is the contract deployer and the NFT owner is account1 - */ - expect(crossChainWarriorsContractChainA.crossChainTransfer(account1Address, id)).to.be.revertedWith( - "Transfer caller is not owner nor approved" - ); - }); - - it("Should burn the tokenId", async () => { - const id = 10; - - await (await crossChainWarriorsContractChainA.mintId(deployerAddress, id)).wait(); - - expect(await crossChainWarriorsContractChainA.ownerOf(id)).to.equal(deployerAddress); - - await (await crossChainWarriorsContractChainA.crossChainTransfer(account1Address, id)).wait(); - - expect(crossChainWarriorsContractChainA.ownerOf(id)).to.be.revertedWith( - "ERC721: owner query for nonexistent token" - ); - }); - - it("Should mint tokenId in the destination chain", async () => { - const id = 10; - - await (await crossChainWarriorsContractChainA.mintId(deployerAddress, id)).wait(); - - await (await crossChainWarriorsContractChainA.crossChainTransfer(account1Address, id)).wait(); - - expect(await crossChainWarriorsContractChainB.ownerOf(id)).to.equal(account1Address); - }); - }); - - describe("onZetaMessage", () => { - it("Should revert if the caller is not the Connector contract", async () => { - await expect( - crossChainWarriorsContractChainA.onZetaMessage({ - originSenderAddress: ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]), - originChainId: 1, - destinationAddress: crossChainWarriorsContractChainB.address, - zetaAmount: 0, - message: encoder.encode(["address"], [deployerAddress]), - }) - ).to.be.revertedWith("This function can only be called by the Connector contract"); - }); - - it("Should revert if the cross-chain address doesn't match with the stored one", async () => { - await expect( - zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [deployerAddress]), - 1, - crossChainWarriorsContractChainB.address, - 0, - encoder.encode(["address"], [zetaConnectorMockContract.address]) - ) - ).to.be.revertedWith("Cross-chain address doesn't match"); - }); - - it("Should revert if the message type doesn't match with CROSS_CHAIN_TRANSFER_MESSAGE", async () => { - const messageType = await crossChainWarriorsContractChainA.CROSS_CHAIN_TRANSFER_MESSAGE(); - - const invalidMessageType = messageType.replace("9", "8"); - - await expect( - zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]), - 1, - crossChainWarriorsContractChainB.address, - 0, - encoder.encode( - ["bytes32", "uint256 ", "address", "address"], - [invalidMessageType, 1, deployerAddress, deployerAddress] - ) - ) - ).to.be.revertedWith("Invalid message type"); - }); - - it("Should revert if the token already exists", async () => { - const messageType = await crossChainWarriorsContractChainA.CROSS_CHAIN_TRANSFER_MESSAGE(); - - await crossChainWarriorsContractChainB.mintId(deployerAddress, 1); - - await expect( - zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]), - 1, - crossChainWarriorsContractChainB.address, - 0, - encoder.encode( - ["bytes32", "uint256 ", "address", "address"], - [messageType, 1, deployerAddress, deployerAddress] - ) - ) - ).to.be.revertedWith("ERC721: token already minted"); - }); - - describe("Given a valid input", () => { - it("Should mint a new token in the destination chain", async () => { - const messageType = await crossChainWarriorsContractChainA.CROSS_CHAIN_TRANSFER_MESSAGE(); - - await zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]), - 1, - crossChainWarriorsContractChainB.address, - 0, - encoder.encode( - ["bytes32", "uint256 ", "address", "address"], - [messageType, 1, deployerAddress, deployerAddress] - ) - ); - - expect(await crossChainWarriorsContractChainB.ownerOf(1)).to.equal(deployerAddress); - }); - - it("Should mint a new token in the destination chain, owned by the provided 'to' address", async () => { - const messageType = await crossChainWarriorsContractChainA.CROSS_CHAIN_TRANSFER_MESSAGE(); - - await zetaConnectorMockContract.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainA.address]), - 1, - crossChainWarriorsContractChainB.address, - 0, - encoder.encode( - ["bytes32", "uint256 ", "address", "address"], - [messageType, 1, deployerAddress, account1Address] - ) - ); - - expect(await crossChainWarriorsContractChainB.ownerOf(1)).to.equal(account1Address); - }); - }); - }); - - describe("onZetaRevert", () => { - /** - * @description note that given how this test was implemented, the NFT will exist in the two chains - * that's not the real-world behavior but it's ok for this unit test - */ - it("Should give the NFT back to the sender", async () => { - const nftId = 1; - - await (await crossChainWarriorsContractChainA.mintId(deployerAddress, nftId)).wait(); - - await (await crossChainWarriorsContractChainA.crossChainTransfer(deployerAddress, nftId)).wait(); - - // Make sure that the NFT was removed from the origin chain - await expect(crossChainWarriorsContractChainA.ownerOf(nftId)).to.be.revertedWith( - "ERC721: owner query for nonexistent token" - ); - - const messageType = await crossChainWarriorsContractChainA.CROSS_CHAIN_TRANSFER_MESSAGE(); - - await zetaConnectorMockContract.callOnZetaRevert( - crossChainWarriorsContractChainA.address, - 1337, - chainBId, - ethers.utils.solidityPack(["address"], [crossChainWarriorsContractChainB.address]), - 0, - 2500000, - encoder.encode( - ["bytes32", "uint256 ", "address", "address"], - [messageType, nftId, deployerAddress, account1Address] - ) - ); - - expect(await crossChainWarriorsContractChainB.ownerOf(nftId)).to.equal(deployerAddress); - }); - }); -}); diff --git a/packages/example-contracts/test/MultiChainSwap.constants.ts b/packages/example-contracts/test/MultiChainSwap.constants.ts deleted file mode 100644 index 34b201ac..00000000 --- a/packages/example-contracts/test/MultiChainSwap.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const USDC_ADDR = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; diff --git a/packages/example-contracts/test/MultiChainSwap.spec.ts b/packages/example-contracts/test/MultiChainSwap.spec.ts deleted file mode 100644 index b4ae326f..00000000 --- a/packages/example-contracts/test/MultiChainSwap.spec.ts +++ /dev/null @@ -1,602 +0,0 @@ -import { FakeContract, smock } from "@defi-wonderland/smock"; -import { BigNumber } from "@ethersproject/bignumber"; -import { AddressZero, MaxUint256 } from "@ethersproject/constants"; -import { parseUnits } from "@ethersproject/units"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { getAddress } from "@zetachain/addresses"; -import chai, { expect } from "chai"; -import { ethers } from "hardhat"; - -import { getMultiChainSwapBase, getMultiChainSwapZetaConnector } from "../lib/multi-chain-swap/MultiChainSwap.helpers"; -import { getNow, getZetaMock } from "../lib/shared/deploy.helpers"; -import { - ERC20__factory, - IERC20, - IUniswapV2Router02, - MultiChainSwapBase, - MultiChainSwapZetaConnector, - UniswapV2Router02__factory, -} from "../typechain-types"; -import { USDC_ADDR } from "./MultiChainSwap.constants"; -import { getCustomErrorMessage, parseUniswapLog, parseZetaLog } from "./test.helpers"; - -chai.should(); -chai.use(smock.matchers); - -const HARDHAT_CHAIN_ID = 1337; - -describe("MultiChainSwap tests", () => { - let uniswapRouterFork: IUniswapV2Router02; - let WETH: string; - let zetaTokenMock: IERC20; - let USDCTokenContract: IERC20; - let zetaConnectorMock: MultiChainSwapZetaConnector; - - let multiChainSwapContractA: MultiChainSwapBase; - const chainAId = 1; - - let multiChainSwapContractB: MultiChainSwapBase; - const chainBId = 2; - - let zetaConnectorSmock: FakeContract; - let multiChainSwapContractWithSmock: MultiChainSwapBase; - - let accounts: SignerWithAddress[]; - let deployer: SignerWithAddress; - let account1: SignerWithAddress; - - const encoder = new ethers.utils.AbiCoder(); - - const ZETA_USDC_PRICE = BigNumber.from("1455462180"); - - const addZetaEthLiquidity = async () => { - const tx1 = await zetaTokenMock.approve(uniswapRouterFork.address, MaxUint256); - await tx1.wait(); - - // 2 ZETA = 1 ETH - const tx2 = await uniswapRouterFork.addLiquidityETH( - zetaTokenMock.address, - parseUnits("2000"), - 0, - 0, - deployer.address, - (await getNow()) + 360, - { value: parseUnits("1000") } - ); - await tx2.wait(); - }; - - const clearUSDCBalance = async (account: SignerWithAddress) => { - const balance = await USDCTokenContract.balanceOf(account.address); - const w = ethers.Wallet.createRandom(); - const tx = await USDCTokenContract.connect(account).transfer(w.address, balance); - await tx.wait(); - }; - - const swapZetaToUSDC = async (signer: SignerWithAddress, zetaAmount: BigNumber) => { - const path = [zetaTokenMock.address, WETH, USDC_ADDR]; - const tx = await uniswapRouterFork - .connect(signer) - .swapExactTokensForTokens(zetaAmount, 0, path, signer.address, (await getNow()) + 360); - - await tx.wait(); - }; - - beforeEach(async () => { - const uniswapRouterAddr = getAddress("uniswapV2Router02", { - customNetworkName: "eth-mainnet", - customZetaNetwork: "mainnet", - }); - accounts = await ethers.getSigners(); - [deployer, account1] = accounts; - - const uniswapRouterFactory = new UniswapV2Router02__factory(deployer); - uniswapRouterFork = uniswapRouterFactory.attach(uniswapRouterAddr); - - WETH = await uniswapRouterFork.WETH(); - - zetaTokenMock = await getZetaMock(); - zetaConnectorMock = await getMultiChainSwapZetaConnector(zetaTokenMock.address); - - const ERC20Factory = new ERC20__factory(deployer); - USDCTokenContract = ERC20Factory.attach(USDC_ADDR); - - multiChainSwapContractA = await getMultiChainSwapBase({ - deployParams: [zetaConnectorMock.address, zetaTokenMock.address, uniswapRouterAddr], - }); - - multiChainSwapContractB = await getMultiChainSwapBase({ - deployParams: [zetaConnectorMock.address, zetaTokenMock.address, uniswapRouterAddr], - }); - - zetaConnectorSmock = await smock.fake("MultiChainSwapZetaConnector"); - multiChainSwapContractWithSmock = await getMultiChainSwapBase({ - deployParams: [zetaConnectorSmock.address, zetaTokenMock.address, uniswapRouterAddr], - }); - - const encodedCrossChainAddressB = ethers.utils.solidityPack(["address"], [multiChainSwapContractB.address]); - multiChainSwapContractA.setInteractorByChainId(chainBId, encodedCrossChainAddressB); - multiChainSwapContractWithSmock.setInteractorByChainId(chainBId, encodedCrossChainAddressB); - - const encodedCrossChainAddressA = ethers.utils.solidityPack(["address"], [multiChainSwapContractA.address]); - multiChainSwapContractB.setInteractorByChainId(chainAId, encodedCrossChainAddressA); - - await clearUSDCBalance(deployer); - await clearUSDCBalance(account1); - }); - - describe("swapTokensForTokensCrossChain", () => { - it("Should revert if the destinationChainId is not in the storage", async () => { - await expect( - multiChainSwapContractA.swapETHForTokensCrossChain( - ethers.utils.solidityPack(["address"], [account1.address]), - zetaTokenMock.address, - false, - 0, - 10, - MaxUint256, - { - value: parseUnits("1"), - } - ) - ).to.be.revertedWith(getCustomErrorMessage("InvalidDestinationChainId")); - }); - - it("Should revert if the originInputToken isn't provided", async () => { - await expect( - multiChainSwapContractA.swapTokensForTokensCrossChain( - AddressZero, - BigNumber.from(10), - ethers.utils.solidityPack(["address"], [account1.address]), - zetaTokenMock.address, - false, - 0, - chainBId, - MaxUint256 - ) - ).to.be.revertedWith(getCustomErrorMessage("MissingOriginInputTokenAddress")); - }); - - it("Should revert if the destinationOutToken isn't provided", async () => { - await expect( - multiChainSwapContractA.swapTokensForTokensCrossChain( - zetaTokenMock.address, - BigNumber.from(10), - ethers.utils.solidityPack(["address"], [account1.address]), - AddressZero, - false, - 0, - chainBId, - MaxUint256 - ) - ).to.be.revertedWith(getCustomErrorMessage("OutTokenInvariant")); - }); - - it("Should not perform any trade if the input token is Zeta", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractA.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractA.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractA.swapTokensForTokensCrossChain( - zetaTokenMock.address, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - zetaTokenMock.address, - false, - 0, - chainBId, - MaxUint256 - ); - - const result = await tx2.wait(); - const eventNames = parseUniswapLog(result.logs); - expect(eventNames.filter((e) => e === "Swap")).to.have.lengthOf(0); - }); - - it("Should trade the input token for Zeta", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractA.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractA.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractA.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - zetaTokenMock.address, - false, - 0, - chainBId, - MaxUint256 - ); - - const result = await tx2.wait(); - const eventNames = parseUniswapLog(result.logs); - expect(eventNames.filter((e) => e === "Swap")).to.have.lengthOf(2); - }); - - it("Should trade zeta for the output token", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractA.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractA.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractA.swapTokensForTokensCrossChain( - zetaTokenMock.address, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId, - MaxUint256 - ); - - const result = await tx2.wait(); - const eventNames = parseUniswapLog(result.logs); - expect(eventNames.filter((e) => e === "Swap")).to.have.lengthOf(2); - }); - - it("Should trade input token for zeta and zeta for the output token", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractA.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractA.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractA.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId, - MaxUint256 - ); - - const result = await tx2.wait(); - const eventNames = parseUniswapLog(result.logs); - expect(eventNames.filter((e) => e === "Swap")).to.have.lengthOf(4); - }); - - it("Should call connector.send", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractWithSmock.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractWithSmock.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractWithSmock.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId, - MaxUint256 - ); - - zetaConnectorSmock.send.atCall(0).should.be.called; - }); - - it("Should emit a SentTokenSwap event", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - const senderInitialZetaBalance = await zetaTokenMock.balanceOf(deployer.address); - expect(await zetaTokenMock.balanceOf(account1.address)).to.be.eq(0); - - const ZETA_TO_TRANSFER = parseUnits("1"); - - const tx1 = await zetaTokenMock.approve(multiChainSwapContractA.address, ZETA_TO_TRANSFER); - await tx1.wait(); - - const tx3 = await USDCTokenContract.approve(multiChainSwapContractA.address, ZETA_USDC_PRICE); - await tx3.wait(); - - const tx2 = await multiChainSwapContractA.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId, - MaxUint256 - ); - - const result = await tx2.wait(); - const eventNames = parseZetaLog(result.logs); - - expect(eventNames.filter((e) => e === "Swapped")).to.have.lengthOf(1); - }); - - it("Should revert if the destinationChainId is not in the storage", async () => { - const call = multiChainSwapContractA.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId + 5, - MaxUint256 - ); - - await expect(call).to.be.revertedWith(getCustomErrorMessage("InvalidDestinationChainId")); - }); - - it("Should revert if the originInputToken isn't provided", async () => { - const call = multiChainSwapContractA.swapTokensForTokensCrossChain( - AddressZero, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - USDC_ADDR, - false, - 0, - chainBId, - MaxUint256 - ); - - await expect(call).to.be.revertedWith(getCustomErrorMessage("MissingOriginInputTokenAddress")); - }); - - it("Should revert if the destinationOutToken isn't provided", async () => { - const call = multiChainSwapContractA.swapTokensForTokensCrossChain( - USDC_ADDR, - ZETA_USDC_PRICE, - ethers.utils.solidityPack(["address"], [account1.address]), - AddressZero, - false, - 0, - chainBId, - MaxUint256 - ); - - await expect(call).to.be.revertedWith(getCustomErrorMessage("OutTokenInvariant")); - }); - }); - - describe("onZetaMessage", () => { - it("Should revert if the caller is not ZetaConnector", async () => { - await expect( - multiChainSwapContractA.onZetaMessage({ - originSenderAddress: ethers.utils.solidityPack(["address"], [multiChainSwapContractA.address]), - originChainId: chainBId, - destinationAddress: multiChainSwapContractB.address, - zetaAmount: 0, - message: encoder.encode(["address"], [multiChainSwapContractA.address]), - }) - ).to.be.revertedWith(getCustomErrorMessage("InvalidCaller", [deployer.address])); - }); - - it("Should revert if the originSenderAddress it not in interactorsByChainId", async () => { - await expect( - zetaConnectorMock.callOnZetaMessage( - ethers.utils.solidityPack(["address"], [multiChainSwapContractB.address]), - chainAId, - multiChainSwapContractB.address, - 0, - encoder.encode(["address"], [multiChainSwapContractB.address]) - ) - ).to.be.revertedWith(getCustomErrorMessage("InvalidZetaMessageCall")); - }); - }); - - describe("onZetaRevert", () => { - it("Should revert if the caller is not ZetaConnector", async () => { - await expect( - multiChainSwapContractA.onZetaRevert({ - originSenderAddress: deployer.address, - originChainId: chainAId, - destinationAddress: ethers.utils.solidityPack(["address"], [multiChainSwapContractB.address]), - destinationChainId: chainBId, - zetaAmount: 0, - message: encoder.encode(["address"], [multiChainSwapContractA.address]), - }) - ).to.be.revertedWith(getCustomErrorMessage("InvalidCaller", [deployer.address])); - }); - - it("Should trade the returned Zeta back for the input zeta token", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - const tx1 = await zetaTokenMock.transfer(multiChainSwapContractA.address, parseUnits("100")); - await tx1.wait(); - - const senderInitialZetaBalance = await zetaTokenMock.balanceOf(deployer.address); - - const message = encoder.encode( - ["bytes32", "address", "address", "uint256", "bytes", "address", "bool", "uint256", "bool"], - [ - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - deployer.address, - zetaTokenMock.address, - 0, - "0xffffffff", - multiChainSwapContractA.address, - true, - 0, - false, - ] - ); - - const tx2 = await zetaConnectorMock.callOnZetaRevert( - multiChainSwapContractA.address, - HARDHAT_CHAIN_ID, - chainBId, - encoder.encode(["address"], [multiChainSwapContractB.address]), - 10, - 0, - message - ); - - await tx2.wait(); - - const senderFinalZetaBalance = await zetaTokenMock.balanceOf(deployer.address); - expect(senderFinalZetaBalance).to.be.eq(senderInitialZetaBalance.add(10)); - }); - - it("Should trade the returned Zeta back for the input token", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - const tx1 = await zetaTokenMock.transfer(multiChainSwapContractA.address, parseUnits("100")); - await tx1.wait(); - - const senderInitialUSDCBalance = await USDCTokenContract.balanceOf(deployer.address); - - const message = encoder.encode( - ["bytes32", "address", "address", "uint256", "bytes", "address", "bool", "uint256", "bool"], - [ - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - deployer.address, - USDCTokenContract.address, - 0, - "0xffffffff", - multiChainSwapContractA.address, - true, - 0, - false, - ] - ); - - const tx2 = await zetaConnectorMock.callOnZetaRevert( - multiChainSwapContractA.address, - HARDHAT_CHAIN_ID, - chainBId, - encoder.encode(["address"], [multiChainSwapContractB.address]), - parseUnits("1"), - 0, - message - ); - - await tx2.wait(); - - const senderFinalUSDCBalance = await USDCTokenContract.balanceOf(deployer.address); - expect(senderFinalUSDCBalance).to.be.lt(senderInitialUSDCBalance.add(ZETA_USDC_PRICE)); - expect(senderFinalUSDCBalance).to.be.gt(senderInitialUSDCBalance.add(ZETA_USDC_PRICE).mul(995).div(1000)); - }); - - it("Should trade the returned ETH back to the caller", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - const tx1 = await zetaTokenMock.transfer(multiChainSwapContractA.address, parseUnits("100")); - await tx1.wait(); - - const senderInitialETHBalance = await ethers.provider.getBalance(deployer.address); - - const message = encoder.encode( - ["bytes32", "address", "address", "uint256", "bytes", "address", "bool", "uint256", "bool"], - [ - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - deployer.address, - WETH, - 0, - "0xffffffff", - multiChainSwapContractA.address, - true, - 0, - true, - ] - ); - - const tx2 = await zetaConnectorMock.callOnZetaRevert( - multiChainSwapContractA.address, - HARDHAT_CHAIN_ID, - chainBId, - encoder.encode(["address"], [multiChainSwapContractB.address]), - parseUnits("2"), - 0, - message - ); - - await tx2.wait(); - - const senderFinalETHBalance = await ethers.provider.getBalance(deployer.address); - expect(senderFinalETHBalance).to.be.gt(senderInitialETHBalance.add("1")); - expect(senderFinalETHBalance).to.be.lt(senderInitialETHBalance.add("1").mul(1005).div(1000)); - }); - - it("Should emit a RevertedSwap event", async () => { - await addZetaEthLiquidity(); - await swapZetaToUSDC(deployer, parseUnits("10")); - - const tx1 = await zetaTokenMock.transfer(multiChainSwapContractA.address, parseUnits("100")); - await tx1.wait(); - - const senderInitialETHBalance = await ethers.provider.getBalance(deployer.address); - - const message = encoder.encode( - ["bytes32", "address", "address", "uint256", "bytes", "address", "bool", "uint256", "bool"], - [ - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - deployer.address, - WETH, - 0, - "0xffffffff", - multiChainSwapContractA.address, - true, - 0, - true, - ] - ); - - const tx2 = await zetaConnectorMock.callOnZetaRevert( - multiChainSwapContractA.address, - HARDHAT_CHAIN_ID, - chainBId, - encoder.encode(["address"], [multiChainSwapContractB.address]), - parseUnits("2"), - 0, - message - ); - - const result = await tx2.wait(); - const eventNames = parseZetaLog(result.logs); - expect(eventNames.filter((e) => e === "RevertedSwap")).to.have.lengthOf(1); - }); - }); -}); diff --git a/packages/example-contracts/test/test.helpers.ts b/packages/example-contracts/test/test.helpers.ts deleted file mode 100644 index ae376c3f..00000000 --- a/packages/example-contracts/test/test.helpers.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BigNumber, ContractReceipt } from "ethers"; - -import { IUniswapV2Pair__factory, MultiChainSwapBase__factory } from "../typechain-types"; - -export const getMintTokenId = (mintTx: ContractReceipt) => mintTx.events?.[0].args?.tokenId; - -export const parseUniswapLog = (logs: ContractReceipt["logs"]) => { - const iface = IUniswapV2Pair__factory.createInterface(); - - const eventNames = logs.map((log) => { - try { - const parsedLog = iface.parseLog(log); - - return parsedLog.name; - } catch (e: any) { - return "NO_UNI_LOG"; - } - }); - - return eventNames; -}; - -export const parseZetaLog = (logs: ContractReceipt["logs"]) => { - const iface = MultiChainSwapBase__factory.createInterface(); - - const eventNames = logs.map((log) => { - try { - const parsedLog = iface.parseLog(log); - - return parsedLog.name; - } catch (e: any) { - return "NO_ZETA_LOG"; - } - }); - - return eventNames; -}; - -type CustomErrorParamType = string | BigNumber | number; -export const getCustomErrorMessage = (errorMethod: string, params?: [CustomErrorParamType]) => { - const stringParams = params - ? params - .map((p: CustomErrorParamType) => { - if (typeof p === "number") { - return p; - } - - return `"${p.toString()}"`; - }) - .join(", ") - : ""; - return `VM Exception while processing transaction: reverted with custom error '${errorMethod}(${stringParams})'`; -}; diff --git a/packages/example-contracts/tsconfig.json b/packages/example-contracts/tsconfig.json deleted file mode 100644 index 31d7bc8d..00000000 --- a/packages/example-contracts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["./scripts", "./lib", "./test", "./tests", "./typechain", "./**/*.json", "typechain-types"], - "exclude": ["artifacts", "cache"], - "files": ["./hardhat.config.ts"], - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@zetachain/addresses": ["../addresses/src/index"], - "@zetachain/addresses/*": ["../addresses/src/*"] - } - } -} diff --git a/packages/protocol-contracts/.env.example b/packages/protocol-contracts/.env.example deleted file mode 100644 index 1ebf3512..00000000 --- a/packages/protocol-contracts/.env.example +++ /dev/null @@ -1,14 +0,0 @@ -ALCHEMY_API_KEY= - -PRIVATE_KEY= - -TSS_PRIVATE_KEY= - -# ETHER -ETHERSCAN_API_KEY= - -# POLYGON -POYLGONSCAN_API_KEY= - -# BSC -BSCSCAN_API_KEY= diff --git a/packages/protocol-contracts/contracts/ZetaConnector.base.sol b/packages/protocol-contracts/contracts/ZetaConnector.base.sol deleted file mode 100644 index 17e1d607..00000000 --- a/packages/protocol-contracts/contracts/ZetaConnector.base.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/security/Pausable.sol"; - -import "./ZetaReceiver.sol"; -import "./ZetaInterfaces.sol"; - -contract ZetaConnectorBase is Pausable { - address public zetaToken; - - /** - * @dev Collectively hold by Zeta blockchain validators. - */ - address public tssAddress; - address public tssAddressUpdater; - - event ZetaSent( - address indexed originSenderAddress, - uint256 destinationChainId, - bytes destinationAddress, - uint256 zetaAmount, - uint256 gasLimit, - bytes message, - bytes zetaParams - ); - event ZetaReceived( - bytes originSenderAddress, - uint256 indexed originChainId, - address indexed destinationAddress, - uint256 zetaAmount, - bytes message, - bytes32 indexed internalSendHash - ); - event ZetaReverted( - address originSenderAddress, - uint256 originChainId, - uint256 indexed destinationChainId, - bytes indexed destinationAddress, - uint256 zetaAmount, - bytes message, - bytes32 indexed internalSendHash - ); - - constructor( - address _zetaTokenAddress, - address _tssAddress, - address _tssAddressUpdater - ) { - zetaToken = _zetaTokenAddress; - tssAddress = _tssAddress; - tssAddressUpdater = _tssAddressUpdater; - } - - modifier onlyTssAddress() { - require(msg.sender == tssAddress, "ZetaConnector: only TSS address can call this function"); - _; - } - - modifier onlyTssUpdater() { - require(msg.sender == tssAddressUpdater, "ZetaConnector: only TSS updater can call this function"); - _; - } - - // update the TSS Address in case of Zeta blockchain validator nodes churn - function updateTssAddress(address _tssAddress) external onlyTssUpdater { - require(_tssAddress != address(0), "ZetaConnector: invalid tssAddress"); - - tssAddress = _tssAddress; - } - - // Change the ownership of tssAddressUpdater to the Zeta blockchain TSS nodes. - // Effectively, only Zeta blockchain validators collectively can update TSS Address afterwards. - function renounceTssAddressUpdater() external onlyTssUpdater { - require(tssAddress != address(0), "ZetaConnector: invalid tssAddress"); - - tssAddressUpdater = tssAddress; - } - - function pause() external onlyTssUpdater { - _pause(); - } - - function unpause() external onlyTssUpdater { - _unpause(); - } - - function send(ZetaInterfaces.SendInput calldata input) external virtual {} - - function onReceive( - bytes calldata originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external virtual {} - - function onRevert( - address originSenderAddress, - uint256 originChainId, - bytes calldata destinationAddress, - uint256 destinationChainId, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external virtual {} -} diff --git a/packages/protocol-contracts/contracts/ZetaConnector.eth.sol b/packages/protocol-contracts/contracts/ZetaConnector.eth.sol deleted file mode 100644 index 49c756e5..00000000 --- a/packages/protocol-contracts/contracts/ZetaConnector.eth.sol +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -import "./ZetaConnector.base.sol"; -import "./ZetaInterfaces.sol"; - -contract ZetaConnectorEth is ZetaConnectorBase { - constructor( - address _zetaTokenAddress, - address _tssAddress, - address _tssAddressUpdater - ) ZetaConnectorBase(_zetaTokenAddress, _tssAddress, _tssAddressUpdater) {} - - function getLockedAmount() public view returns (uint256) { - return IERC20(zetaToken).balanceOf(address(this)); - } - - function send(ZetaInterfaces.SendInput calldata input) external override whenNotPaused { - bool success = IERC20(zetaToken).transferFrom(msg.sender, address(this), input.zetaAmount); - require(success == true, "ZetaConnector: error transferring Zeta"); - - emit ZetaSent( - msg.sender, - input.destinationChainId, - input.destinationAddress, - input.zetaAmount, - input.gasLimit, - input.message, - input.zetaParams - ); - } - - function onReceive( - bytes calldata originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external override whenNotPaused onlyTssAddress { - bool success = IERC20(zetaToken).transfer(destinationAddress, zetaAmount); - require(success == true, "ZetaConnector: error transferring Zeta"); - - if (message.length > 0) { - ZetaReceiver(destinationAddress).onZetaMessage( - ZetaInterfaces.ZetaMessage(originSenderAddress, originChainId, destinationAddress, zetaAmount, message) - ); - } - - emit ZetaReceived( - originSenderAddress, - originChainId, - destinationAddress, - zetaAmount, - message, - internalSendHash - ); - } - - function onRevert( - address originSenderAddress, - uint256 originChainId, - bytes calldata destinationAddress, - uint256 destinationChainId, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external override whenNotPaused onlyTssAddress { - bool success = IERC20(zetaToken).transfer(originSenderAddress, zetaAmount); - require(success == true, "ZetaConnector: error transferring Zeta"); - - if (message.length > 0) { - ZetaReceiver(originSenderAddress).onZetaRevert( - ZetaInterfaces.ZetaRevert( - originSenderAddress, - originChainId, - destinationAddress, - destinationChainId, - zetaAmount, - message - ) - ); - } - - emit ZetaReverted( - originSenderAddress, - originChainId, - destinationChainId, - destinationAddress, - zetaAmount, - message, - internalSendHash - ); - } -} diff --git a/packages/protocol-contracts/contracts/ZetaConnector.non-eth.sol b/packages/protocol-contracts/contracts/ZetaConnector.non-eth.sol deleted file mode 100644 index 8ac5eb4f..00000000 --- a/packages/protocol-contracts/contracts/ZetaConnector.non-eth.sol +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -import "./ZetaConnector.base.sol"; -import "./ZetaInterfaces.sol"; - -interface ZetaToken is IERC20 { - function burnFrom(address account, uint256 amount) external; - - function mint( - address mintee, - uint256 value, - bytes32 internalSendHash - ) external; -} - -contract ZetaConnectorNonEth is ZetaConnectorBase { - constructor( - address _zetaTokenAddress, - address _tssAddress, - address _tssAddressUpdater - ) ZetaConnectorBase(_zetaTokenAddress, _tssAddress, _tssAddressUpdater) {} - - function getLockedAmount() public view returns (uint256) { - return ZetaToken(zetaToken).balanceOf(address(this)); - } - - function send(ZetaInterfaces.SendInput calldata input) external override whenNotPaused { - ZetaToken(zetaToken).burnFrom(msg.sender, input.zetaAmount); - - emit ZetaSent( - msg.sender, - input.destinationChainId, - input.destinationAddress, - input.zetaAmount, - input.gasLimit, - input.message, - input.zetaParams - ); - } - - function onReceive( - bytes calldata originSenderAddress, - uint256 originChainId, - address destinationAddress, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external override whenNotPaused onlyTssAddress { - ZetaToken(zetaToken).mint(destinationAddress, zetaAmount, internalSendHash); - - if (message.length > 0) { - ZetaReceiver(destinationAddress).onZetaMessage( - ZetaInterfaces.ZetaMessage(originSenderAddress, originChainId, destinationAddress, zetaAmount, message) - ); - } - - emit ZetaReceived( - originSenderAddress, - originChainId, - destinationAddress, - zetaAmount, - message, - internalSendHash - ); - } - - function onRevert( - address originSenderAddress, - uint256 originChainId, - bytes calldata destinationAddress, - uint256 destinationChainId, - uint256 zetaAmount, - bytes calldata message, - bytes32 internalSendHash - ) external override whenNotPaused onlyTssAddress { - ZetaToken(zetaToken).mint(originSenderAddress, zetaAmount, internalSendHash); - - if (message.length > 0) { - ZetaReceiver(originSenderAddress).onZetaRevert( - ZetaInterfaces.ZetaRevert( - originSenderAddress, - originChainId, - destinationAddress, - destinationChainId, - zetaAmount, - message - ) - ); - } - - emit ZetaReverted( - originSenderAddress, - originChainId, - destinationChainId, - destinationAddress, - zetaAmount, - message, - internalSendHash - ); - } -} diff --git a/packages/protocol-contracts/contracts/ZetaEth.sol b/packages/protocol-contracts/contracts/ZetaEth.sol deleted file mode 100644 index fcd52c13..00000000 --- a/packages/protocol-contracts/contracts/ZetaEth.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/utils/Context.sol"; - -contract ZetaEth is ERC20("Zeta", "ZETA") { - constructor(uint256 initialSupply) { - _mint(msg.sender, initialSupply * (10**uint256(decimals()))); - } -} diff --git a/packages/protocol-contracts/contracts/ZetaInteractor.sol b/packages/protocol-contracts/contracts/ZetaInteractor.sol deleted file mode 100644 index 85e53af0..00000000 --- a/packages/protocol-contracts/contracts/ZetaInteractor.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/access/Ownable.sol"; - -import "./ZetaInterfaces.sol"; -import "./ZetaInteractorErrors.sol"; - -abstract contract ZetaInteractor is Ownable, ZetaInteractorErrors { - uint256 internal immutable currentChainId; - ZetaConnector public connector; - - /** - * @dev Maps a chain id to its corresponding address of the MultiChainSwap contract - * The address is expressed in bytes to allow non-EVM chains - * This mapping is useful, mainly, for two reasons: - * - Given a chain id, the contract is able to route a transaction to its corresponding address - * - To check that the messages (onZetaMessage, onZetaRevert) come from a trusted source - */ - mapping(uint256 => bytes) public interactorsByChainId; - - modifier isValidMessageCall(ZetaInterfaces.ZetaMessage calldata zetaMessage) { - _isValidCaller(); - if (keccak256(zetaMessage.originSenderAddress) != keccak256(interactorsByChainId[zetaMessage.originChainId])) - revert InvalidZetaMessageCall(); - _; - } - - modifier isValidRevertCall(ZetaInterfaces.ZetaRevert calldata zetaRevert) { - _isValidCaller(); - if (zetaRevert.originSenderAddress != address(this)) revert InvalidZetaRevertCall(); - if (zetaRevert.originChainId != currentChainId) revert InvalidZetaRevertCall(); - _; - } - - constructor(address zetaConnectorAddress) { - currentChainId = block.chainid; - connector = ZetaConnector(zetaConnectorAddress); - } - - function _isValidCaller() private view { - if (msg.sender != address(connector)) revert InvalidCaller(msg.sender); - } - - function isValidChainId(uint256 chainId) internal view returns (bool) { - return (keccak256(interactorsByChainId[chainId]) != keccak256(new bytes(0))); - } - - function setInteractorByChainId(uint256 destinationChainId, bytes calldata contractAddress) external onlyOwner { - interactorsByChainId[destinationChainId] = contractAddress; - } -} diff --git a/packages/protocol-contracts/contracts/ZetaInteractorErrors.sol b/packages/protocol-contracts/contracts/ZetaInteractorErrors.sol deleted file mode 100644 index c8f92f4f..00000000 --- a/packages/protocol-contracts/contracts/ZetaInteractorErrors.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -interface ZetaInteractorErrors { - error InvalidDestinationChainId(); - - error InvalidCaller(address caller); - - error InvalidZetaMessageCall(); - - error InvalidZetaRevertCall(); -} diff --git a/packages/protocol-contracts/contracts/ZetaInterfaces.sol b/packages/protocol-contracts/contracts/ZetaInterfaces.sol deleted file mode 100644 index 8dfa35b9..00000000 --- a/packages/protocol-contracts/contracts/ZetaInterfaces.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -interface ZetaInterfaces { - /** - * @dev Use SendInput to interact with our Connector: connector.send(SendInput) - */ - struct SendInput { - /// @dev Chain id of the destination chain. More about chain ids https://docs.zetachain.com/learn/glossary#chain-id - uint256 destinationChainId; - /// @dev Address to send to on the destination chain (expressed in bytes since it can be non-EVM) - bytes destinationAddress; - /// @dev Gas amount limit for the destination chain's transaction - uint256 gasLimit; - /// @dev An encoded, arbitrary message to be parsed by the destination contract - bytes message; - /// @dev The amount of ZETA that you want to send cross-chain + the gas fees to be paid for the transaction - uint256 zetaAmount; - /// @dev Optional parameters for the ZetaChain protocol - bytes zetaParams; - } - - /** - * @dev Our Connector will call your contract's onZetaMessage using this interface - */ - struct ZetaMessage { - bytes originSenderAddress; - uint256 originChainId; - address destinationAddress; - uint256 zetaAmount; - bytes message; - } - - /** - * @dev Our Connector will call your contract's onZetaRevert using this interface - */ - struct ZetaRevert { - address originSenderAddress; - uint256 originChainId; - bytes destinationAddress; - uint256 destinationChainId; - uint256 zetaAmount; - bytes message; - } -} - -interface ZetaConnector { - /** - * @dev Sending value and data cross-chain is as easy as calling connector.send(SendInput) - */ - function send(ZetaInterfaces.SendInput calldata input) external; -} diff --git a/packages/protocol-contracts/contracts/ZetaNonEth.sol b/packages/protocol-contracts/contracts/ZetaNonEth.sol deleted file mode 100644 index b9116db2..00000000 --- a/packages/protocol-contracts/contracts/ZetaNonEth.sol +++ /dev/null @@ -1,69 +0,0 @@ -/* solhint-disable var-name-mixedcase */ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; - -contract ZetaNonEth is ERC20Burnable { - /** - * @dev Collectively hold by Zeta blockchain validators - */ - address public TSSAddress; - - /** - * @dev Initially a multi-sig, eventually hold by Zeta blockchain validators (via renounceTSSAddressUpdater) - */ - address public TSSAddressUpdater; - - address public connectorAddress; - - event MMinted(address indexed mintee, uint256 amount, bytes32 indexed internalSendHash); - event MBurnt(address indexed burnee, uint256 amount); - - constructor( - uint256 initialSupply, - address _TSSAddress, - address _TSSAddressUpdater - ) ERC20("Zeta", "ZETA") { - _mint(msg.sender, initialSupply * (10**uint256(decimals()))); - - TSSAddress = _TSSAddress; - TSSAddressUpdater = _TSSAddressUpdater; - } - - function updateTSSAndConnectorAddresses(address _tss, address _connectorAddress) external { - require(msg.sender == TSSAddressUpdater, "ZetaNonEth: sender is not TSSAddressUpdater"); - - TSSAddress = _tss; - connectorAddress = _connectorAddress; - } - - /** - * @dev Sets TSSAddressUpdater to be TSSAddress - */ - function renounceTSSAddressUpdater() external { - require(msg.sender == TSSAddressUpdater, "ZetaNonEth: sender is not TSSAddressUpdater"); - require(TSSAddress != address(0), "ZetaNonEth: Invalid TSSAddress"); - - TSSAddressUpdater = TSSAddress; - } - - function mint( - address mintee, - uint256 value, - bytes32 internalSendHash - ) external { - /** - * @dev Only Connector or TSS can mint since minting requires burning the equivalent in another chain - */ - require( - msg.sender == TSSAddress || msg.sender == connectorAddress, - "ZetaNonEth: only TSSAddress or connectorAddress can mint" - ); - - _mint(mintee, value); - - emit MMinted(mintee, value, internalSendHash); - } -} -/* solhint-enable var-name-mixedcase */ diff --git a/packages/protocol-contracts/contracts/ZetaReceiver.sol b/packages/protocol-contracts/contracts/ZetaReceiver.sol deleted file mode 100644 index c3d75e4b..00000000 --- a/packages/protocol-contracts/contracts/ZetaReceiver.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "./ZetaInterfaces.sol"; - -interface ZetaReceiver { - /** - * @dev onZetaMessage will be called when a cross-chain message is delivered to your contract - */ - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) external; - - /** - * @dev onZetaRevert will be called when a cross-chain message reverts - * It's useful to rollback your contract's state - */ - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external; -} diff --git a/packages/protocol-contracts/contracts/testing/ZetaInteractorMock.sol b/packages/protocol-contracts/contracts/testing/ZetaInteractorMock.sol deleted file mode 100644 index 1dd1cd1c..00000000 --- a/packages/protocol-contracts/contracts/testing/ZetaInteractorMock.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "../ZetaInteractor.sol"; - -contract ZetaInteractorMock is ZetaInteractor { - constructor(address zetaConnectorAddress) ZetaInteractor(zetaConnectorAddress) {} - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata zetaMessage) public isValidMessageCall(zetaMessage) {} - - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) public isValidRevertCall(zetaRevert) {} -} diff --git a/packages/protocol-contracts/contracts/testing/ZetaReceiverMock.sol b/packages/protocol-contracts/contracts/testing/ZetaReceiverMock.sol deleted file mode 100644 index 849eeb06..00000000 --- a/packages/protocol-contracts/contracts/testing/ZetaReceiverMock.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.9; - -import "../ZetaReceiver.sol"; - -contract ZetaReceiverMock is ZetaReceiver { - event MockOnZetaMessage(address destinationAddress); - - event MockOnZetaRevert(address originSenderAddress); - - function onZetaMessage(ZetaInterfaces.ZetaMessage calldata _zetaMessage) external override { - emit MockOnZetaMessage(_zetaMessage.destinationAddress); - } - - function onZetaRevert(ZetaInterfaces.ZetaRevert calldata _zetaRevert) external override { - emit MockOnZetaRevert(_zetaRevert.originSenderAddress); - } -} diff --git a/packages/protocol-contracts/hardhat.config.ts b/packages/protocol-contracts/hardhat.config.ts deleted file mode 100644 index db56ea4f..00000000 --- a/packages/protocol-contracts/hardhat.config.ts +++ /dev/null @@ -1,25 +0,0 @@ -import "@nomiclabs/hardhat-waffle"; -import "@nomiclabs/hardhat-etherscan"; -import "@typechain/hardhat"; -import "tsconfig-paths/register"; - -import { getHardhatConfigNetworks, getHardhatConfigScanners } from "@zetachain/addresses/networks"; -import * as dotenv from "dotenv"; -import type { HardhatUserConfig } from "hardhat/types"; - -dotenv.config(); - -const PRIVATE_KEYS = - process.env.PRIVATE_KEY !== undefined ? [`0x${process.env.PRIVATE_KEY}`, `0x${process.env.TSS_PRIVATE_KEY}`] : []; - -const config: HardhatUserConfig = { - solidity: "0.8.9", - etherscan: { - ...getHardhatConfigScanners(), - }, - networks: { - ...getHardhatConfigNetworks(PRIVATE_KEYS), - }, -}; - -export default config; diff --git a/packages/protocol-contracts/lib/contracts.constants.ts b/packages/protocol-contracts/lib/contracts.constants.ts deleted file mode 100644 index ce9e7983..00000000 --- a/packages/protocol-contracts/lib/contracts.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const ZETA_INITIAL_SUPPLY = 2_100_000_000; diff --git a/packages/protocol-contracts/lib/contracts.helpers.ts b/packages/protocol-contracts/lib/contracts.helpers.ts deleted file mode 100644 index 968dd049..00000000 --- a/packages/protocol-contracts/lib/contracts.helpers.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { BaseContract, ContractFactory } from "ethers"; -import { ethers } from "hardhat"; - -import { - ZetaConnector__factory as ZetaConnectorFactory, - ZetaConnectorBase, - ZetaConnectorBase__factory as ZetaConnectorBaseFactory, - ZetaConnectorEth, - ZetaConnectorEth__factory as ZetaConnectorEthFactory, - ZetaConnectorNonEth, - ZetaConnectorNonEth__factory as ZetaConnectorNonEthFactory, - ZetaEth, - ZetaEth__factory as ZetaEthFactory, - ZetaNonEth, - ZetaNonEth__factory as ZetaNonEthFactory, - ZetaReceiverMock, - ZetaReceiverMock__factory as ZetaReceiverMockFactory, -} from "../typechain-types"; - -export const isEthNetworkName = (networkName: string) => - networkName === "eth-localnet" || networkName === "goerli" || networkName === "eth-mainnet"; - -export const deployZetaConnectorBase = async ({ args }: { args: Parameters }) => { - const Factory = (await ethers.getContractFactory("ZetaConnectorBase")) as ZetaConnectorBaseFactory; - - const zetaConnectorContract = (await Factory.deploy(...args)) as ZetaConnectorBase; - - await zetaConnectorContract.deployed(); - - return zetaConnectorContract; -}; - -export const deployZetaConnectorEth = async ({ args }: { args: Parameters }) => { - const Factory = (await ethers.getContractFactory("ZetaConnectorEth")) as ZetaConnectorEthFactory; - - const zetaConnectorContract = (await Factory.deploy(...args)) as ZetaConnectorEth; - - await zetaConnectorContract.deployed(); - - return zetaConnectorContract; -}; - -export const deployZetaConnectorNonEth = async ({ - args, -}: { - args: Parameters; -}) => { - const Factory = (await ethers.getContractFactory("ZetaConnectorNonEth")) as ZetaConnectorNonEthFactory; - - const zetaConnectorContract = (await Factory.deploy(...args)) as ZetaConnectorNonEth; - - await zetaConnectorContract.deployed(); - - return zetaConnectorContract; -}; - -export const deployZetaReceiverMock = async () => { - const Factory = (await ethers.getContractFactory("ZetaReceiverMock")) as ZetaReceiverMockFactory; - - const zetaReceiverMock = (await Factory.deploy()) as ZetaReceiverMock; - - await zetaReceiverMock.deployed(); - - return zetaReceiverMock; -}; - -export const deployZetaEth = async ({ args }: { args: Parameters }) => { - const Factory = (await ethers.getContractFactory("ZetaEth")) as ZetaEthFactory; - - const zetaEthContract = (await Factory.deploy(...args)) as ZetaEth; - - await zetaEthContract.deployed(); - - return zetaEthContract; -}; - -export const deployZetaNonEth = async ({ args }: { args: Parameters }) => { - const Factory = (await ethers.getContractFactory("ZetaNonEth")) as ZetaNonEthFactory; - - const zetaNonEthContract = (await Factory.deploy(...args)) as ZetaNonEth; - - await zetaNonEthContract.deployed(); - - return zetaNonEthContract; -}; - -export const getZetaConnectorEth = async (params: GetContractParams) => - getContract({ - contractName: "ZetaConnectorEth", - ...params, - }); - -export const getZetaConnectorNonEth = async (params: GetContractParams) => - getContract({ - contractName: "ZetaConnectorNonEth", - ...params, - }); - -export type GetContractParams = - | { - deployParams: Parameters; - existingContractAddress?: null; - } - | { - deployParams?: null; - existingContractAddress: string; - }; - -export const getContract = async ({ - contractName, - deployParams, - existingContractAddress, -}: GetContractParams & { contractName: string }): Promise => { - const ContractFactory = (await ethers.getContractFactory(contractName)) as Factory; - - const isGetExistingContract = Boolean(existingContractAddress); - if (isGetExistingContract) { - console.log("Getting existing contract from address:", existingContractAddress); - return ContractFactory.attach(existingContractAddress!) as Contract; - } - - const contract = (await ContractFactory.deploy(...deployParams!)) as Contract; - await contract.deployed(); - - return contract; -}; diff --git a/packages/protocol-contracts/lib/zeta-interactor/ZetaInteractor.helpers.ts b/packages/protocol-contracts/lib/zeta-interactor/ZetaInteractor.helpers.ts deleted file mode 100644 index fe327384..00000000 --- a/packages/protocol-contracts/lib/zeta-interactor/ZetaInteractor.helpers.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ZetaInteractorMock, ZetaInteractorMock__factory } from "../../typechain-types"; -import { getContract } from "../contracts.helpers"; - -export const getZetaConnectorMock = async (zetaToken: string) => - getContract({ - contractName: "ZetaInteractorMock", - deployParams: [zetaToken], - }); diff --git a/packages/protocol-contracts/package.json b/packages/protocol-contracts/package.json deleted file mode 100644 index 267fb05c..00000000 --- a/packages/protocol-contracts/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "@zetachain/protocol-contracts", - "version": "0.0.1", - "license": "MIT", - "scripts": { - "clean": "npx hardhat clean", - "compile": "npx hardhat compile", - "deploy": "EXECUTE_PROGRAMMATICALLY=true npx hardhat run scripts/deploy.ts", - "deploy-local": "ZETA_NETWORK=troy EXECUTE_PROGRAMMATICALLY=true npx hardhat run scripts/deploy.ts --network hardhat", - "lint:fix": "npm run lint:js:fix && npm run lint:sol:fix", - "lint:js:fix": "eslint --ext .js,.ts . --fix", - "lint:js": "eslint --ext .js,.ts .", - "lint:sol:fix": "prettier --write \"contracts/**/*.sol\"", - "lint:sol": "solhint 'contracts/**/*.sol' && prettier -c 'contracts/**/*.sol'", - "lint": "npm run lint:js && npm run lint:sol", - "test:watch": "echo You need to install `entr` to run this command && find contracts test -iname '*.sol' -o -iname '*.spec.ts' | entr -cnr npx hardhat test", - "test": "npx hardhat test", - "tsc:watch": "npx tsc --watch", - "verify": "npx hardhat run scripts/verify-contracts.ts" - }, - "devDependencies": { - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "@openzeppelin/contracts": "^4.5.0", - "ethers": "5.6.8" - } -} diff --git a/packages/protocol-contracts/scripts/deploy-zeta-connector.ts b/packages/protocol-contracts/scripts/deploy-zeta-connector.ts deleted file mode 100644 index e7b8d2bd..00000000 --- a/packages/protocol-contracts/scripts/deploy-zeta-connector.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { getAddress, isNetworkName, saveAddress } from "@zetachain/addresses"; -import { Contract } from "ethers"; -import { network } from "hardhat"; - -import { deployZetaConnectorEth, deployZetaConnectorNonEth, isEthNetworkName } from "../lib/contracts.helpers"; - -export async function deployZetaConnector() { - if (!isNetworkName(network.name)) { - throw new Error(`network.name: ${network.name} isn't supported.`); - } - - let contract: Contract; - console.log(`Deploying ZetaConnector to ${network.name}`); - - if (isEthNetworkName(network.name)) { - contract = await deployZetaConnectorEth({ - args: [getAddress("zetaToken"), getAddress("tss"), getAddress("tssUpdater")], - }); - } else { - contract = await deployZetaConnectorNonEth({ - args: [getAddress("zetaToken"), getAddress("tss"), getAddress("tssUpdater")], - }); - } - - saveAddress("connector", contract.address); - console.log("Deployed ZetaConnector. Address:", contract.address); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - deployZetaConnector() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/protocol-contracts/scripts/deploy-zeta-token.ts b/packages/protocol-contracts/scripts/deploy-zeta-token.ts deleted file mode 100644 index 9ffed123..00000000 --- a/packages/protocol-contracts/scripts/deploy-zeta-token.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { getAddress, isNetworkName, saveAddress } from "@zetachain/addresses"; -import { Contract } from "ethers"; -import { network } from "hardhat"; - -import { ZETA_INITIAL_SUPPLY } from "../lib/contracts.constants"; -import { deployZetaEth, deployZetaNonEth, isEthNetworkName } from "../lib/contracts.helpers"; - -export async function deployZetaToken() { - if (!isNetworkName(network.name)) { - throw new Error(`network.name: ${network.name} isn't supported.`); - } - - let contract: Contract; - - if (isEthNetworkName(network.name)) { - contract = await deployZetaEth({ - args: [ZETA_INITIAL_SUPPLY], - }); - } else { - contract = await deployZetaNonEth({ - args: [0, getAddress("tss"), getAddress("tssUpdater")], - }); - } - - saveAddress("zetaToken", contract.address); - console.log("Deployed Zeta to:", contract.address); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - deployZetaToken() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/protocol-contracts/scripts/deploy.ts b/packages/protocol-contracts/scripts/deploy.ts deleted file mode 100644 index b51a0cb7..00000000 --- a/packages/protocol-contracts/scripts/deploy.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { isLocalNetworkName, saveAddress } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { isEthNetworkName } from "../lib/contracts.helpers"; -import { deployZetaConnector } from "./deploy-zeta-connector"; -import { deployZetaToken } from "./deploy-zeta-token"; -import { setZetaAddresses } from "./set-zeta-token-addresses"; - -async function main() { - if (isLocalNetworkName(network.name)) { - const [owner] = await ethers.getSigners(); - saveAddress("tssUpdater", owner.address); - } - - await deployZetaToken(); - await deployZetaConnector(); - - /** - * @description The Eth implementation of Zeta token doesn't need any address - */ - if (isEthNetworkName(network.name)) return; - - /** - * @description Avoid setting Zeta addresses for local network, - * since it must be done after starting the local Zeta node - */ - if (!isLocalNetworkName(network.name)) { - await setZetaAddresses(); - } -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/protocol-contracts/scripts/send-tss-gas.ts b/packages/protocol-contracts/scripts/send-tss-gas.ts deleted file mode 100644 index 55b61c71..00000000 --- a/packages/protocol-contracts/scripts/send-tss-gas.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { getAddress, isNetworkName } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -async function sendGas() { - if (!isNetworkName(network.name)) { - throw new Error(`network.name: ${network.name} isn't supported.`); - } - - const [signer] = await ethers.getSigners(); - const sendGasTx = { - from: signer.address, - to: getAddress("tss"), - value: ethers.utils.parseEther("1.0"), - }; - await signer.sendTransaction(sendGasTx); - console.log(`Sent 1.0 Ether from ${signer.address} to TSS address (${getAddress("tss")}).`); -} - -sendGas() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/protocol-contracts/scripts/set-zeta-token-addresses.ts b/packages/protocol-contracts/scripts/set-zeta-token-addresses.ts deleted file mode 100644 index 531b2bb9..00000000 --- a/packages/protocol-contracts/scripts/set-zeta-token-addresses.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { getAddress, isNetworkName } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { ZetaNonEth__factory as ZetaNonEthFactory } from "../typechain-types"; - -export async function setZetaAddresses() { - if (!isNetworkName(network.name)) { - throw new Error(`network.name: ${network.name} isn't supported.`); - } - - const factory = (await ethers.getContractFactory("ZetaNonEth")) as ZetaNonEthFactory; - - const [, tssSigner] = await ethers.getSigners(); - - const contract = factory.attach(getAddress("zetaToken")).connect(tssSigner); - - console.log("Updating"); - await (await contract.updateTSSAndConnectorAddresses(getAddress("tss"), getAddress("connector"))).wait(); - console.log("Updated"); -} - -if (!process.env.EXECUTE_PROGRAMMATICALLY) { - setZetaAddresses() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); -} diff --git a/packages/protocol-contracts/scripts/test-zeta-send.ts b/packages/protocol-contracts/scripts/test-zeta-send.ts deleted file mode 100644 index f3b2d00c..00000000 --- a/packages/protocol-contracts/scripts/test-zeta-send.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { getAddress, getChainId } from "@zetachain/addresses"; -import { AbiCoder } from "ethers/lib/utils"; -import { ethers } from "hardhat"; - -import { ZetaConnectorEth__factory as ZetaConnectorEthFactory } from "../typechain-types"; - -const encoder = new AbiCoder(); - -async function main() { - const factory = (await ethers.getContractFactory("ZetaConnectorEth")) as ZetaConnectorEthFactory; - - const contract = factory.attach(getAddress("connector")); - - console.log("Sending"); - await ( - await contract.send({ - destinationChainId: getChainId("bsc-testnet"), - destinationAddress: encoder.encode(["address"], ["0x09b80BEcBe709Dd354b1363727514309d1Ac3C7b"]), - gasLimit: 1_000_000, - message: encoder.encode(["address"], ["0x09b80BEcBe709Dd354b1363727514309d1Ac3C7b"]), - zetaAmount: 0, - zetaParams: [], - }) - ).wait(); - console.log("Sent"); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/protocol-contracts/scripts/update-tss-address.ts b/packages/protocol-contracts/scripts/update-tss-address.ts deleted file mode 100644 index c59a6666..00000000 --- a/packages/protocol-contracts/scripts/update-tss-address.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { getAddress, isNetworkName, saveAddress } from "@zetachain/addresses"; -import { ethers, network } from "hardhat"; - -import { getZetaConnectorEth, getZetaConnectorNonEth, isEthNetworkName } from "../lib/contracts.helpers"; - -async function sendGas() { - if (!isNetworkName(network.name)) { - throw new Error(`network.name: ${network.name} isn't supported.`); - } - - const [, tssUpdaterSigner] = await ethers.getSigners(); - - const newTssAddress = "0x0000000000000000000000000000000000000000"; - - if (isEthNetworkName(network.name)) { - const contract = ( - await getZetaConnectorEth({ deployParams: null, existingContractAddress: getAddress("connector") }) - ).connect(tssUpdaterSigner); - - await (await contract.updateTssAddress(newTssAddress)).wait(); - } else { - const contract = ( - await getZetaConnectorNonEth({ deployParams: null, existingContractAddress: getAddress("connector") }) - ).connect(tssUpdaterSigner); - - await (await contract.updateTssAddress(newTssAddress)).wait(); - } - - console.log(`Updated TSS address from ${getAddress("tss")} to ${newTssAddress}.`); - - saveAddress("tss", newTssAddress); -} - -sendGas() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/protocol-contracts/scripts/verify-contracts.ts b/packages/protocol-contracts/scripts/verify-contracts.ts deleted file mode 100644 index f056a73f..00000000 --- a/packages/protocol-contracts/scripts/verify-contracts.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { getAddress } from "@zetachain/addresses"; -import hardhat, { network } from "hardhat"; - -import { ZETA_INITIAL_SUPPLY } from "../lib/contracts.constants"; -import { isEthNetworkName } from "../lib/contracts.helpers"; - -/** - * @description Prevents breaking the execution flow when contract A is verified (so verifying again throws) - * and contract B isn't yet verified - */ -const handleCatch = (e: any) => e?.message && console.error(e.message); - -async function main() { - if (isEthNetworkName(network.name)) { - await hardhat - .run("verify:verify", { - address: getAddress("zetaToken"), - contract: "contracts/evm/ZetaEth.sol:ZetaEth", - constructorArguments: [ZETA_INITIAL_SUPPLY], - }) - .catch(handleCatch); - - await hardhat - .run("verify:verify", { - address: getAddress("connector"), - contract: "contracts/evm/ZetaConnector.eth.sol:ZetaConnectorEth", - constructorArguments: [getAddress("zetaToken"), getAddress("tss"), getAddress("tssUpdater")], - }) - .catch(handleCatch); - } else { - await hardhat - .run("verify:verify", { - address: getAddress("zetaToken"), - constructorArguments: [0, getAddress("tss"), getAddress("tssUpdater")], - }) - .catch(handleCatch); - - await hardhat - .run("verify:verify", { - address: getAddress("connector"), - contract: "contracts/evm/ZetaConnector.non-eth.sol:ZetaConnectorNonEth", - constructorArguments: [getAddress("zetaToken"), getAddress("tss"), getAddress("tssUpdater")], - }) - .catch(handleCatch); - } -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/packages/protocol-contracts/test/ZetaConnector.spec.ts b/packages/protocol-contracts/test/ZetaConnector.spec.ts deleted file mode 100644 index ff42ec88..00000000 --- a/packages/protocol-contracts/test/ZetaConnector.spec.ts +++ /dev/null @@ -1,672 +0,0 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; - -import { - deployZetaConnectorBase, - deployZetaConnectorEth, - deployZetaConnectorNonEth, - deployZetaEth, - deployZetaNonEth, - deployZetaReceiverMock, -} from "../lib/contracts.helpers"; -import { - ZetaConnectorBase, - ZetaConnectorEth, - ZetaConnectorNonEth, - ZetaEth, - ZetaNonEth, - ZetaReceiverMock, -} from "../typechain-types"; - -describe("ZetaConnector tests", () => { - let zetaTokenEthContract: ZetaEth; - let zetaTokenNonEthContract: ZetaNonEth; - let zetaConnectorBaseContract: ZetaConnectorBase; - let zetaConnectorEthContract: ZetaConnectorEth; - let zetaReceiverMockContract: ZetaReceiverMock; - let zetaConnectorNonEthContract: ZetaConnectorNonEth; - let tssUpdater: SignerWithAddress; - let tssSigner: SignerWithAddress; - let randomSigner: SignerWithAddress; - - const tssUpdaterApproveConnectorEth = async () => { - await (await zetaTokenEthContract.approve(zetaConnectorEthContract.address, 100_000)).wait(); - }; - - const tssUpdaterApproveConnectorNonEth = async () => { - await (await zetaTokenNonEthContract.approve(zetaConnectorNonEthContract.address, 100_000)).wait(); - }; - - const transfer100kZetaEth = async (transferTo: string) => { - await (await zetaTokenEthContract.transfer(transferTo, 100_000)).wait(); - }; - - const transfer100kZetaNonEth = async (transferTo: string) => { - await (await zetaTokenNonEthContract.transfer(transferTo, 100_000)).wait(); - }; - - beforeEach(async () => { - const accounts = await ethers.getSigners(); - [tssUpdater, tssSigner, randomSigner] = accounts; - - zetaTokenEthContract = await deployZetaEth({ - args: [100_000], - }); - - zetaTokenNonEthContract = await deployZetaNonEth({ - args: [100_000, tssSigner.address, tssUpdater.address], - }); - - zetaReceiverMockContract = await deployZetaReceiverMock(); - zetaConnectorBaseContract = await deployZetaConnectorBase({ - args: [zetaTokenEthContract.address, tssSigner.address, tssUpdater.address], - }); - zetaConnectorEthContract = await deployZetaConnectorEth({ - args: [zetaTokenEthContract.address, tssSigner.address, tssUpdater.address], - }); - zetaConnectorNonEthContract = await deployZetaConnectorNonEth({ - args: [zetaTokenNonEthContract.address, tssSigner.address, tssUpdater.address], - }); - - await zetaTokenNonEthContract.updateTSSAndConnectorAddresses( - tssSigner.address, - zetaConnectorNonEthContract.address - ); - }); - - describe("ZetaConnector.base", () => { - describe("updateTssAddress", () => { - it("Should revert if the caller is not the TSS updater", async () => { - await expect( - zetaConnectorBaseContract.connect(randomSigner).updateTssAddress(randomSigner.address) - ).to.revertedWith("ZetaConnector: only TSS updater can call this function"); - }); - - it("Should revert if the new TSS address is invalid", async () => { - await expect( - zetaConnectorBaseContract.updateTssAddress("0x0000000000000000000000000000000000000000") - ).to.revertedWith("ZetaConnector: invalid tssAddress"); - }); - - it("Should change the TSS address if called by TSS updater", async () => { - await (await zetaConnectorBaseContract.updateTssAddress(randomSigner.address)).wait(); - - const address = await zetaConnectorBaseContract.tssAddress(); - - expect(address).to.equal(randomSigner.address); - }); - }); - - describe("pause, unpause", () => { - it("Should revert if not called by the TSS updater", async () => { - await expect(zetaConnectorBaseContract.connect(randomSigner).pause()).to.revertedWith( - "ZetaConnector: only TSS updater can call this function" - ); - - await expect(zetaConnectorBaseContract.connect(randomSigner).unpause()).to.revertedWith( - "ZetaConnector: only TSS updater can call this function" - ); - }); - - it("Should pause if called by the TSS updater", async () => { - await (await zetaConnectorBaseContract.pause()).wait(); - const paused1 = await zetaConnectorBaseContract.paused(); - expect(paused1).to.equal(true); - - await (await zetaConnectorBaseContract.unpause()).wait(); - const paused2 = await zetaConnectorBaseContract.paused(); - expect(paused2).to.equal(false); - }); - }); - }); - - describe("ZetaConnector.eth", () => { - describe("send", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorEthContract.pause()).wait(); - const paused1 = await zetaConnectorEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if the sender has no enough zeta", async () => { - await ( - await zetaTokenEthContract.connect(randomSigner).approve(zetaConnectorEthContract.address, 100_000) - ).wait(); - - await expect( - zetaConnectorEthContract.connect(randomSigner).send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("ERC20: transfer amount exceeds balance"); - }); - - it("Should revert if the sender didn't allow ZetaConnector to spend Zeta token", async () => { - await expect( - zetaConnectorEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("ERC20: insufficient allowance"); - }); - - it("Should transfer Zeta token from the sender account to the Connector contract", async () => { - const initialBalanceDeployer = await zetaTokenEthContract.balanceOf(tssUpdater.address); - const initialBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - - expect(initialBalanceDeployer.toString()).to.equal("100000000000000000000000"); - expect(initialBalanceConnector.toString()).to.equal("0"); - - await tssUpdaterApproveConnectorEth(); - - await ( - await zetaConnectorEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).wait(); - - const finalBalanceDeployer = await zetaTokenEthContract.balanceOf(tssUpdater.address); - const finalBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - - expect(finalBalanceDeployer.toString()).to.equal("99999999999999999999000"); - expect(finalBalanceConnector.toString()).to.equal("1000"); - }); - - it("Should emit `ZetaSent` on success", async () => { - const zetaSentFilter = zetaConnectorEthContract.filters.ZetaSent(); - const e1 = await zetaConnectorEthContract.queryFilter(zetaSentFilter); - expect(e1.length).to.equal(0); - - await zetaConnectorEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 0, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }); - - const e2 = await zetaConnectorEthContract.queryFilter(zetaSentFilter); - expect(e2.length).to.equal(1); - }); - }); - - describe("onReceive", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorEthContract.pause()).wait(); - const paused1 = await zetaConnectorEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorEthContract.onReceive( - tssUpdater.address, - 1, - randomSigner.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if not called by TSS address", async () => { - await expect( - zetaConnectorEthContract.onReceive( - tssUpdater.address, - 1, - randomSigner.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ZetaConnector: only TSS address can call this function"); - }); - - it("Should revert if Zeta transfer fails", async () => { - await expect( - zetaConnectorEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - randomSigner.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ERC20: transfer amount exceeds balance"); - }); - - it("Should transfer to the receiver address", async () => { - await transfer100kZetaEth(zetaConnectorEthContract.address); - - const initialBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - const initialBalanceReceiver = await zetaTokenEthContract.balanceOf(zetaReceiverMockContract.address); - expect(initialBalanceConnector.toString()).to.equal("100000"); - expect(initialBalanceReceiver.toString()).to.equal("0"); - - await ( - await zetaConnectorEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - zetaReceiverMockContract.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const finalBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - const finalBalanceReceiver = await zetaTokenEthContract.balanceOf(zetaReceiverMockContract.address); - - expect(finalBalanceConnector.toString()).to.equal("99000"); - expect(finalBalanceReceiver.toString()).to.equal("1000"); - }); - - it("Should emit `ZetaReceived` on success", async () => { - await transfer100kZetaEth(zetaConnectorEthContract.address); - - const zetaReceivedFilter = zetaConnectorEthContract.filters.ZetaReceived(); - const e1 = await zetaConnectorEthContract.queryFilter(zetaReceivedFilter); - expect(e1.length).to.equal(0); - - await ( - await zetaConnectorEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - zetaReceiverMockContract.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const e2 = await zetaConnectorEthContract.queryFilter(zetaReceivedFilter); - expect(e2.length).to.equal(1); - }); - }); - - describe("onRevert", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorEthContract.pause()).wait(); - const paused1 = await zetaConnectorEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorEthContract.onRevert( - randomSigner.address, - 1, - randomSigner.address, - 2, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if not called by TSS address", async () => { - await expect( - zetaConnectorEthContract.onRevert( - randomSigner.address, - 1, - tssUpdater.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ZetaConnector: only TSS address can call this function"); - }); - - it("Should transfer to the origin address", async () => { - await transfer100kZetaEth(zetaConnectorEthContract.address); - - const initialBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - const initialBalanceSender = await zetaTokenEthContract.balanceOf(zetaReceiverMockContract.address); - expect(initialBalanceConnector.toString()).to.equal("100000"); - expect(initialBalanceSender.toString()).to.equal("0"); - - await ( - await zetaConnectorEthContract - .connect(tssSigner) - .onRevert( - zetaReceiverMockContract.address, - 1, - randomSigner.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const finalBalanceConnector = await zetaTokenEthContract.balanceOf(zetaConnectorEthContract.address); - const finalBalanceSender = await zetaTokenEthContract.balanceOf(zetaReceiverMockContract.address); - - expect(finalBalanceConnector.toString()).to.equal("99000"); - expect(finalBalanceSender.toString()).to.equal("1000"); - }); - - it("Should emit `ZetaReverted` on success", async () => { - await transfer100kZetaEth(zetaConnectorEthContract.address); - - const zetaRevertedFilter = zetaConnectorEthContract.filters.ZetaReverted(); - const e1 = await zetaConnectorEthContract.queryFilter(zetaRevertedFilter); - expect(e1.length).to.equal(0); - - await ( - await zetaConnectorEthContract - .connect(tssSigner) - .onRevert( - zetaReceiverMockContract.address, - 1, - randomSigner.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const e2 = await zetaConnectorEthContract.queryFilter(zetaRevertedFilter); - expect(e2.length).to.equal(1); - }); - }); - }); - - describe("ZetaConnector.non-eth", () => { - describe("send", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorNonEthContract.pause()).wait(); - const paused1 = await zetaConnectorNonEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorNonEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if the sender has no enough zeta", async () => { - await ( - await zetaTokenEthContract.connect(randomSigner).approve(zetaConnectorEthContract.address, 100_000) - ).wait(); - - await expect( - zetaConnectorNonEthContract.connect(randomSigner).send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("ERC20: insufficient allowance"); - }); - - it("Should revert if the sender didn't allow ZetaConnector to spend Zeta token", async () => { - await expect( - zetaConnectorNonEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).to.revertedWith("ERC20: insufficient allowance"); - }); - - it("Should burn Zeta token from the sender account", async () => { - const initialBalanceDeployer = await zetaTokenNonEthContract.balanceOf(tssUpdater.address); - expect(initialBalanceDeployer.toString()).to.equal("100000000000000000000000"); - - await tssUpdaterApproveConnectorNonEth(); - - await ( - await zetaConnectorNonEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 1000, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }) - ).wait(); - - const finalBalanceDeployer = await zetaTokenNonEthContract.balanceOf(tssUpdater.address); - expect(finalBalanceDeployer.toString()).to.equal("99999999999999999999000"); - }); - - it("Should emit `ZetaSent` on success", async () => { - const zetaSentFilter = zetaConnectorNonEthContract.filters.ZetaSent(); - const e1 = await zetaConnectorNonEthContract.queryFilter(zetaSentFilter); - expect(e1.length).to.equal(0); - - await zetaConnectorNonEthContract.send({ - destinationAddress: randomSigner.address, - destinationChainId: 1, - gasLimit: 2500000, - message: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - zetaAmount: 0, - zetaParams: new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - }); - - const e2 = await zetaConnectorNonEthContract.queryFilter(zetaSentFilter); - expect(e2.length).to.equal(1); - }); - }); - - describe("onReceive", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorNonEthContract.pause()).wait(); - const paused1 = await zetaConnectorNonEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorNonEthContract.onReceive( - tssUpdater.address, - 1, - randomSigner.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if not called by TSS address", async () => { - await expect( - zetaConnectorNonEthContract.onReceive( - tssUpdater.address, - 1, - randomSigner.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ZetaConnector: only TSS address can call this function"); - }); - - it("Should revert if mint fails", async () => { - await zetaTokenNonEthContract.updateTSSAndConnectorAddresses(tssSigner.address, randomSigner.address); - - await expect( - zetaConnectorNonEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - zetaReceiverMockContract.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ZetaNonEth: only TSSAddress or connectorAddress can mint"); - }); - - it("Should mint on the receiver address", async () => { - const initialBalanceReceiver = await zetaTokenNonEthContract.balanceOf(zetaReceiverMockContract.address); - expect(initialBalanceReceiver.toString()).to.equal("0"); - - await ( - await zetaConnectorNonEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - zetaReceiverMockContract.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const finalBalanceReceiver = await zetaTokenNonEthContract.balanceOf(zetaReceiverMockContract.address); - - expect(finalBalanceReceiver.toString()).to.equal("1000"); - }); - - it("Should emit `ZetaReceived` on success", async () => { - await transfer100kZetaNonEth(zetaConnectorNonEthContract.address); - - const zetaReceivedFilter = zetaConnectorNonEthContract.filters.ZetaReceived(); - const e1 = await zetaConnectorNonEthContract.queryFilter(zetaReceivedFilter); - expect(e1.length).to.equal(0); - - await ( - await zetaConnectorNonEthContract - .connect(tssSigner) - .onReceive( - randomSigner.address, - 1, - zetaReceiverMockContract.address, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const e2 = await zetaConnectorNonEthContract.queryFilter(zetaReceivedFilter); - expect(e2.length).to.equal(1); - }); - }); - - describe("onRevert", () => { - it("Should revert if the contract is paused", async () => { - await (await zetaConnectorNonEthContract.pause()).wait(); - const paused1 = await zetaConnectorNonEthContract.paused(); - expect(paused1).to.equal(true); - - await expect( - zetaConnectorNonEthContract.onRevert( - randomSigner.address, - 1, - randomSigner.address, - 2, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("Pausable: paused"); - }); - - it("Should revert if not called by TSS address", async () => { - await expect( - zetaConnectorNonEthContract.onRevert( - randomSigner.address, - 1, - tssUpdater.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).to.revertedWith("ZetaConnector: only TSS address can call this function"); - }); - - it("Should mint on the origin address", async () => { - const initialBalanceSender = await zetaTokenNonEthContract.balanceOf(zetaReceiverMockContract.address); - expect(initialBalanceSender.toString()).to.equal("0"); - - await ( - await zetaConnectorNonEthContract - .connect(tssSigner) - .onRevert( - zetaReceiverMockContract.address, - 1, - randomSigner.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const finalBalanceSender = await zetaTokenNonEthContract.balanceOf(zetaReceiverMockContract.address); - expect(finalBalanceSender.toString()).to.equal("1000"); - }); - - it("Should emit `ZetaReverted` on success", async () => { - await transfer100kZetaNonEth(zetaConnectorNonEthContract.address); - - const zetaRevertedFilter = zetaConnectorNonEthContract.filters.ZetaReverted(); - const e1 = await zetaConnectorNonEthContract.queryFilter(zetaRevertedFilter); - expect(e1.length).to.equal(0); - - await ( - await zetaConnectorNonEthContract - .connect(tssSigner) - .onRevert( - zetaReceiverMockContract.address, - 1, - randomSigner.address, - 1, - 1000, - new ethers.utils.AbiCoder().encode(["string"], ["hello"]), - "0x0000000000000000000000000000000000000000000000000000000000000000" - ) - ).wait(); - - const e2 = await zetaConnectorNonEthContract.queryFilter(zetaRevertedFilter); - expect(e2.length).to.equal(1); - }); - }); - }); -}); diff --git a/packages/protocol-contracts/test/ZetaInteractor.spec.ts b/packages/protocol-contracts/test/ZetaInteractor.spec.ts deleted file mode 100644 index fcdbccb9..00000000 --- a/packages/protocol-contracts/test/ZetaInteractor.spec.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import chai, { expect } from "chai"; -import { ethers } from "hardhat"; - -import { getZetaConnectorMock } from "../lib/zeta-interactor/ZetaInteractor.helpers"; -import { ZetaInteractorMock } from "../typechain-types"; -import { getCustomErrorMessage } from "./test.helpers"; - -chai.should(); - -describe("ZetaInteractor tests", () => { - let zetaInteractorMock: ZetaInteractorMock; - const chainAId = 1; - const chainBId = 2; - - let accounts: SignerWithAddress[]; - let deployer: SignerWithAddress; - let crossChainContractB: SignerWithAddress; - let zetaConnector: SignerWithAddress; - - const encoder = new ethers.utils.AbiCoder(); - - beforeEach(async () => { - accounts = await ethers.getSigners(); - [deployer, crossChainContractB, zetaConnector] = accounts; - - zetaInteractorMock = await getZetaConnectorMock(zetaConnector.address); - - const encodedCrossChainAddressB = ethers.utils.solidityPack(["address"], [crossChainContractB.address]); - await (await zetaInteractorMock.setInteractorByChainId(chainBId, encodedCrossChainAddressB)).wait(); - }); - - describe("onZetaMessage", () => { - it("Should revert if the caller is not ZetaConnector", async () => { - await expect( - zetaInteractorMock.onZetaMessage({ - originSenderAddress: ethers.utils.solidityPack(["address"], [zetaInteractorMock.address]), - originChainId: chainBId, - destinationAddress: crossChainContractB.address, - zetaAmount: 0, - message: encoder.encode(["address"], [zetaInteractorMock.address]), - }) - ).to.be.revertedWith(getCustomErrorMessage("InvalidCaller", [deployer.address])); - }); - - it("Should revert if the originSenderAddress it not in interactorsByChainId", async () => { - await expect( - zetaInteractorMock.connect(zetaConnector).onZetaMessage({ - originSenderAddress: ethers.utils.solidityPack(["address"], [zetaInteractorMock.address]), - originChainId: chainBId, - destinationAddress: crossChainContractB.address, - zetaAmount: 0, - message: encoder.encode(["address"], [crossChainContractB.address]), - }) - ).to.be.revertedWith(getCustomErrorMessage("InvalidZetaMessageCall")); - }); - }); - - describe("onZetaRevert", () => { - it("Should revert if the caller is not ZetaConnector", async () => { - await expect( - zetaInteractorMock.onZetaRevert({ - originSenderAddress: deployer.address, - originChainId: chainAId, - destinationAddress: ethers.utils.solidityPack(["address"], [crossChainContractB.address]), - destinationChainId: chainBId, - zetaAmount: 0, - message: encoder.encode(["address"], [zetaInteractorMock.address]), - }) - ).to.be.revertedWith(getCustomErrorMessage("InvalidCaller", [deployer.address])); - }); - }); -}); diff --git a/packages/protocol-contracts/test/test.helpers.ts b/packages/protocol-contracts/test/test.helpers.ts deleted file mode 100644 index 44cd25cf..00000000 --- a/packages/protocol-contracts/test/test.helpers.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { BigNumber, ContractReceipt } from "ethers"; - -type CustomErrorParamType = string | BigNumber | number; -export const getCustomErrorMessage = (errorMethod: string, params?: [CustomErrorParamType]) => { - const stringParams = params - ? params - .map((p: CustomErrorParamType) => { - if (typeof p === "number") { - return p; - } - - return `"${p.toString()}"`; - }) - .join(", ") - : ""; - return `VM Exception while processing transaction: reverted with custom error '${errorMethod}(${stringParams})'`; -}; diff --git a/packages/protocol-contracts/tsconfig.json b/packages/protocol-contracts/tsconfig.json deleted file mode 100644 index 19f84c0b..00000000 --- a/packages/protocol-contracts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["./scripts", "./lib", "./test", "./typechain-types", "./**/*.json", "typechain-types"], - "exclude": ["artifacts", "cache"], - "files": ["./hardhat.config.ts"], - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@zetachain/addresses/*": ["../addresses/src/*"], - "@zetachain/addresses": ["../addresses/src/index.ts"] - } - }, -} diff --git a/packages/zeta-app-contracts/.env.example b/packages/zeta-app-contracts/.env.example new file mode 100644 index 00000000..09bb3086 --- /dev/null +++ b/packages/zeta-app-contracts/.env.example @@ -0,0 +1,18 @@ +ALCHEMY_API_KEY_MAINNET= +ALCHEMY_API_KEY_GOERLI= + +PUBLIC_KEY_1= + +PRIVATE_KEY= + +# ETHER +ETHERSCAN_API_KEY=<...> + +# POLYGON +POYLGONSCAN_API_KEY=<...> + +# BSC +BSCSCAN_API_KEY=<...> + +# Deployer address. This is needed to calculate salt in deterministic deployments +DEPLOYER_ADDRESS= diff --git a/packages/protocol-contracts/.eslintrc.js b/packages/zeta-app-contracts/.eslintrc.js similarity index 100% rename from packages/protocol-contracts/.eslintrc.js rename to packages/zeta-app-contracts/.eslintrc.js index 4f9ad61e..77b8f69a 100644 --- a/packages/protocol-contracts/.eslintrc.js +++ b/packages/zeta-app-contracts/.eslintrc.js @@ -3,13 +3,16 @@ const path = require("path"); const OFF = 0; module.exports = { - extends: ["../../.eslintrc.js"], env: { browser: false, es2021: true, mocha: true, node: true, }, + extends: ["../../.eslintrc.js"], + rules: { + "no-console": OFF, + }, settings: { "import/resolver": { typescript: { @@ -17,7 +20,4 @@ module.exports = { }, }, }, - rules: { - "no-console": OFF, - }, }; diff --git a/packages/zeta-app-contracts/README.md b/packages/zeta-app-contracts/README.md new file mode 100644 index 00000000..89cb5448 --- /dev/null +++ b/packages/zeta-app-contracts/README.md @@ -0,0 +1,16 @@ +# ZetaChain App contracts + +This package include the contracts used by different ZetaChain Apps like ZetaHub + +## Environment variables + +Follow the template in `.env.example`. + +* The private key should **not** include `0x`. +* To verify your contracts, you'll need api keys both in BSCScan and Etherscan. + +## Running Tests + +```bash + yarn test +``` diff --git a/packages/zeta-app-contracts/contracts/multi-chain-value/MultiChainValue.sol b/packages/zeta-app-contracts/contracts/multi-chain-value/MultiChainValue.sol new file mode 100644 index 00000000..29a94042 --- /dev/null +++ b/packages/zeta-app-contracts/contracts/multi-chain-value/MultiChainValue.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@zetachain/protocol-contracts/contracts/evm/Zeta.eth.sol"; +import "@zetachain/protocol-contracts/contracts/evm/tools/ZetaInteractor.sol"; +import "@zetachain/protocol-contracts/contracts/evm/interfaces/ZetaInterfaces.sol"; +import "../shared/IWZeta.sol"; + +/** + * @dev Custom errors for contract MultiChainValue + */ +interface MultiChainValueErrors { + error ErrorTransferringZeta(); + + error ChainIdAlreadyEnabled(); + + error ChainIdNotAvailable(); + + error InvalidZetaValueAndGas(); +} + +/** + * @dev MultiChainValue goal is to send Zeta token from ZEVM to other chains. + * This contract cannot handle 'onRevert' events, so it should only be used in ZEVM and not on other chains. + */ +contract MultiChainValue is ZetaInteractor, MultiChainValueErrors { + address public zetaToken; + // @dev map of valid chains to send Zeta + mapping(uint256 => bool) public availableChainIds; + + // @dev Constructor calls ZetaInteractor's constructor to setup Connector address and current chain + constructor(address connectorAddress_, address zetaToken_) ZetaInteractor(connectorAddress_) { + if (zetaToken_ == address(0)) revert ZetaCommonErrors.InvalidAddress(); + zetaToken = zetaToken_; + } + + /** + * @dev Whitelist a chain to send Zeta + */ + function addAvailableChainId(uint256 destinationChainId) external onlyOwner { + if (availableChainIds[destinationChainId]) revert ChainIdAlreadyEnabled(); + + availableChainIds[destinationChainId] = true; + } + + /** + * @dev Blacklist a chain to send Zeta + */ + function removeAvailableChainId(uint256 destinationChainId) external onlyOwner { + if (!availableChainIds[destinationChainId]) revert ChainIdNotAvailable(); + + delete availableChainIds[destinationChainId]; + } + + /** + * @dev If the destination chain is a valid chain, send the Zeta tokens to that chain + */ + function sendZeta( + uint256 destinationChainId, + bytes calldata destinationAddress, + uint256 destinationGasLimit + ) public payable { + uint256 zetaValueAndGas = msg.value; + + if (!availableChainIds[destinationChainId]) revert InvalidDestinationChainId(); + if (zetaValueAndGas == 0) revert InvalidZetaValueAndGas(); + + IWZeta(zetaToken).deposit{value: zetaValueAndGas}(); + bool success1 = ZetaEth(zetaToken).approve(address(connector), zetaValueAndGas); + if (!success1) revert ErrorTransferringZeta(); + + connector.send( + ZetaInterfaces.SendInput({ + destinationChainId: destinationChainId, + destinationAddress: destinationAddress, + destinationGasLimit: destinationGasLimit, + message: abi.encode(), + zetaValueAndGas: zetaValueAndGas, + zetaParams: abi.encode("") + }) + ); + } + + /** + * @dev If the destination chain is a valid chain, send the Zeta tokens to that chain + */ + function send( + uint256 destinationChainId, + bytes calldata destinationAddress, + uint256 zetaValueAndGas, + uint256 destinationGasLimit + ) external { + if (!availableChainIds[destinationChainId]) revert InvalidDestinationChainId(); + if (zetaValueAndGas == 0) revert InvalidZetaValueAndGas(); + + bool success1 = ZetaEth(zetaToken).approve(address(connector), zetaValueAndGas); + bool success2 = ZetaEth(zetaToken).transferFrom(msg.sender, address(this), zetaValueAndGas); + if (!(success1 && success2)) revert ErrorTransferringZeta(); + + connector.send( + ZetaInterfaces.SendInput({ + destinationChainId: destinationChainId, + destinationAddress: destinationAddress, + destinationGasLimit: destinationGasLimit, + message: abi.encode(), + zetaValueAndGas: zetaValueAndGas, + zetaParams: abi.encode("") + }) + ); + } + + function onZetaRevert(ZetaInterfaces.ZetaRevert calldata zetaRevert) external isValidRevertCall(zetaRevert) { + //@dev this version do not handle revert + } +} diff --git a/packages/example-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol b/packages/zeta-app-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol similarity index 91% rename from packages/example-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol rename to packages/zeta-app-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol index 3f629163..1e7d216a 100644 --- a/packages/example-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol +++ b/packages/zeta-app-contracts/contracts/multi-chain-value/test/MultiChainValueMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.9; +pragma solidity 0.8.7; import "../MultiChainValue.sol"; diff --git a/packages/zeta-app-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol b/packages/zeta-app-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol new file mode 100644 index 00000000..31e0a356 --- /dev/null +++ b/packages/zeta-app-contracts/contracts/multi-chain-value/test/ZetaConnectorMock.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@zetachain/protocol-contracts/contracts/evm/interfaces/ZetaInterfaces.sol"; + +contract ZetaConnectorMockValue is ZetaConnector { + event Send( + uint256 destinationChainId, + bytes destinationAddress, + uint256 destinationGasLimit, + bytes message, + uint256 zetaValueAndGas, + bytes zetaParams + ); + + function send(ZetaInterfaces.SendInput calldata input) external override { + emit Send( + input.destinationChainId, + input.destinationAddress, + input.destinationGasLimit, + input.message, + input.zetaValueAndGas, + input.zetaParams + ); + } + + function onRevert( + address zetaTxSenderAddress, + uint256 sourceChainId, + bytes calldata destinationAddress, + uint256 destinationChainId, + uint256 remainingZetaValue, + bytes calldata message, + bytes32 internalSendHash + ) external { + ZetaReceiver(zetaTxSenderAddress).onZetaRevert( + ZetaInterfaces.ZetaRevert( + zetaTxSenderAddress, + sourceChainId, + destinationAddress, + destinationChainId, + remainingZetaValue, + message + ) + ); + } +} diff --git a/packages/zeta-app-contracts/contracts/shared/IWZeta.sol b/packages/zeta-app-contracts/contracts/shared/IWZeta.sol new file mode 100644 index 00000000..1a9efe91 --- /dev/null +++ b/packages/zeta-app-contracts/contracts/shared/IWZeta.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +interface IWZeta { + function deposit() external payable; + + function withdraw(uint wad) external; + + function totalSupply() external view returns (uint); + + function approve(address guy, uint wad) external returns (bool); + + function transfer(address dst, uint wad) external returns (bool); + + function transferFrom(address src, address dst, uint wad) external returns (bool); +} diff --git a/packages/zeta-app-contracts/contracts/shared/ImmutableCreate2Factory.sol b/packages/zeta-app-contracts/contracts/shared/ImmutableCreate2Factory.sol new file mode 100644 index 00000000..b97a3210 --- /dev/null +++ b/packages/zeta-app-contracts/contracts/shared/ImmutableCreate2Factory.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.5.10; + +/** + * @dev Contracts that need to be compiled for testing purposes + */ + +import "@zetachain/protocol-contracts/contracts/evm/tools/ImmutableCreate2Factory.sol"; diff --git a/packages/example-contracts/contracts/shared/ZetaEthMock.sol b/packages/zeta-app-contracts/contracts/shared/ZetaEthMock.sol similarity index 51% rename from packages/example-contracts/contracts/shared/ZetaEthMock.sol rename to packages/zeta-app-contracts/contracts/shared/ZetaEthMock.sol index ecc64113..9b2e23a3 100644 --- a/packages/example-contracts/contracts/shared/ZetaEthMock.sol +++ b/packages/zeta-app-contracts/contracts/shared/ZetaEthMock.sol @@ -1,12 +1,16 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.9; +pragma solidity 0.8.7; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/Context.sol"; contract ZetaEthMock is ERC20("Zeta", "ZETA") { - constructor(uint256 initialSupply) { - _mint(msg.sender, initialSupply * (10**uint256(decimals()))); + constructor(address creator, uint256 initialSupply) { + _mint(creator, initialSupply * (10 ** uint256(decimals()))); + } + + function deposit() external payable { + _mint(_msgSender(), msg.value); } } diff --git a/packages/zeta-app-contracts/data/addresses.json b/packages/zeta-app-contracts/data/addresses.json new file mode 100644 index 00000000..079270d2 --- /dev/null +++ b/packages/zeta-app-contracts/data/addresses.json @@ -0,0 +1,62 @@ +{ + "ccm": { + "baobab_testnet": { + "multiChainSwap": "", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "bsc_mainnet": { + "multiChainSwap": "", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "bsc_testnet": { + "multiChainSwap": "0x8BD7144Ddb59c9Fa3Dcf809998521E9cAD946fa1", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "btc_testnet": { + "multiChainSwap": "", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "eth_mainnet": { + "multiChainSwap": "", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "goerli_testnet": { + "multiChainSwap": "0x323745f16C93e56a98012970c28788498d8B3a14", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "mumbai_testnet": { + "multiChainSwap": "0xb1b812b664c28E1bA1d35De925Ae88b7Bc7cdCF5", + "multiChainValue": "", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "zeta_testnet": { + "multiChainSwap": "", + "multiChainValue": "0x73B37B8BAbAC0e846bB2C4c581e60bFF2BFBE76e", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + }, + "zeta_mainnet": { + "multiChainSwap": "", + "multiChainValue": "0xF0a3F93Ed1B126142E61423F9546bf1323Ff82DF", + "zetaTokenConsumerUniV2": "", + "zetaTokenConsumerUniV3": "" + } + }, + "zevm": { + "zeta_testnet": {}, + "zeta_mainnet": {} + } +} \ No newline at end of file diff --git a/packages/example-contracts/docs/multi-chain-value.md b/packages/zeta-app-contracts/docs/multi-chain-value.md similarity index 100% rename from packages/example-contracts/docs/multi-chain-value.md rename to packages/zeta-app-contracts/docs/multi-chain-value.md diff --git a/packages/zeta-app-contracts/hardhat.config.ts b/packages/zeta-app-contracts/hardhat.config.ts new file mode 100644 index 00000000..fe201701 --- /dev/null +++ b/packages/zeta-app-contracts/hardhat.config.ts @@ -0,0 +1,55 @@ +import "@nomicfoundation/hardhat-verify"; +import "@nomiclabs/hardhat-waffle"; +import "@typechain/hardhat"; +import "hardhat-gas-reporter"; +import "solidity-coverage"; +import "tsconfig-paths/register"; + +import { getHardhatConfigNetworks } from "@zetachain/networks"; +import * as dotenv from "dotenv"; +import type { HardhatUserConfig } from "hardhat/types"; + +dotenv.config(); + +const PRIVATE_KEYS = process.env.PRIVATE_KEY !== undefined ? [`0x${process.env.PRIVATE_KEY}`] : []; + +const config: HardhatUserConfig = { + //@ts-ignore + etherscan: { + apiKey: { + // BSC + bsc: process.env.BSCSCAN_API_KEY || "", + bscTestnet: process.env.BSCSCAN_API_KEY || "", + // ETH + goerli: process.env.ETHERSCAN_API_KEY || "", + mainnet: process.env.ETHERSCAN_API_KEY || "", + }, + }, + gasReporter: { + currency: "USD", + enabled: process.env.REPORT_GAS !== undefined, + }, + networks: { + ...getHardhatConfigNetworks(), + }, + solidity: { + compilers: [ + { version: "0.5.10" /** For create2 factory */ }, + { version: "0.6.6" /** For uniswap v2 */ }, + { version: "0.8.7" }, + { version: "0.4.18" /** For WETH / WZETA */ }, + ], + settings: { + /** + * @see {@link https://smock.readthedocs.io/en/latest/getting-started.html} + */ + outputSelection: { + "*": { + "*": ["storageLayout"], + }, + }, + }, + }, +}; + +export default config; diff --git a/packages/example-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts b/packages/zeta-app-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts similarity index 74% rename from packages/example-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts rename to packages/zeta-app-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts index bd1f9960..86802afb 100644 --- a/packages/example-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts +++ b/packages/zeta-app-contracts/lib/multi-chain-value/MultiChainValue.helpers.ts @@ -1,4 +1,5 @@ -import { getAddress } from "@zetachain/addresses"; +import { getAddress, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ZetaEth, ZetaEth__factory as ZetaEthFactory } from "@zetachain/protocol-contracts/dist/typechain-types"; import assert from "assert"; import { ethers, network } from "hardhat"; @@ -10,10 +11,9 @@ import { MultiChainValueMock__factory as MultiChainValueMockFactory, ZetaConnectorMockValue, ZetaConnectorMockValue__factory as ZetaConnectorMockValueFactory, - ZetaEth, - ZetaEth__factory as ZetaEthFactory, } from "../../typechain-types"; +const networkName = network.name; /** * @description only for testing or local environment */ @@ -40,13 +40,16 @@ export const deployMultiChainValueMock = async ({ return multiChainValueContract; }; -export const getMultiChainValue = (existingContractAddress?: string) => - getContract({ +export const getMultiChainValue = (existingContractAddress?: string) => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + return getContract({ contractName: "MultiChainValue", ...(existingContractAddress ? { existingContractAddress } - : { deployParams: [getAddress("connector"), getAddress("zetaToken")] }), + : { deployParams: [getAddress("connector", networkName), getAddress("zetaToken", networkName)] }), }); +}; export const deployZetaConnectorMock = async () => { const Factory = (await ethers.getContractFactory("ZetaConnectorMockValue")) as ZetaConnectorMockValueFactory; @@ -59,9 +62,11 @@ export const deployZetaConnectorMock = async () => { }; export const deployZetaEthMock = async () => { + const [signer] = await ethers.getSigners(); + const Factory = (await ethers.getContractFactory("ZetaEthMock")) as ZetaEthFactory; - const zetaConnectorMockContract = (await Factory.deploy(100_000)) as ZetaEth; + const zetaConnectorMockContract = (await Factory.deploy(signer.address, 100_000)) as ZetaEth; await zetaConnectorMockContract.deployed(); diff --git a/packages/zeta-app-contracts/lib/shared/ImmutableCreate2Factory.helpers.ts b/packages/zeta-app-contracts/lib/shared/ImmutableCreate2Factory.helpers.ts new file mode 100644 index 00000000..66cfc04e --- /dev/null +++ b/packages/zeta-app-contracts/lib/shared/ImmutableCreate2Factory.helpers.ts @@ -0,0 +1,75 @@ +import { Provider, TransactionReceipt } from "@ethersproject/providers"; +import { ImmutableCreate2Factory__factory } from "@zetachain/protocol-contracts/dist/typechain-types"; +import { ethers, Signer } from "ethers"; + +export const buildBytecode = (constructorTypes: any[], constructorArgs: any[], contractBytecode: string) => + `${contractBytecode}${encodeParams(constructorTypes, constructorArgs).slice(2)}`; + +export const buildCreate2Address = (saltHex: string, byteCode: string, factoryAddress: string) => { + const payload = ethers.utils.keccak256( + `0x${["ff", factoryAddress, saltHex, ethers.utils.keccak256(byteCode)].map((x) => x.replace(/0x/, "")).join("")}` + ); + + return `0x${payload.slice(-40)}`.toLowerCase(); +}; + +export const numberToUint256 = (value: number) => { + const hex = value.toString(16); + return `0x${"0".repeat(64 - hex.length)}${hex}`; +}; + +export const saltToHex = (salt: string, signerAddress: string) => { + let salthex = ethers.utils.formatBytes32String(salt); + return `${signerAddress}${salthex.slice(2)}`.substring(0, salthex.length); +}; + +export const encodeParam = (dataType: any, data: any) => { + const abiCoder = ethers.utils.defaultAbiCoder; + return abiCoder.encode([dataType], [data]); +}; + +export const encodeParams = (dataTypes: any[], data: any[]) => { + const abiCoder = ethers.utils.defaultAbiCoder; + return abiCoder.encode(dataTypes, data); +}; + +export async function deployContractToAddress({ + factoryAddress, + salt, + contractBytecode, + constructorTypes = [] as string[], + constructorArgs = [] as any[], + signer, +}: { + constructorArgs?: any[]; + constructorTypes?: string[]; + contractBytecode: string; + factoryAddress: string; + salt: string; + signer: Signer; +}) { + const factory = ImmutableCreate2Factory__factory.connect(factoryAddress, signer); + + const bytecode = buildBytecode(constructorTypes, constructorArgs, contractBytecode); + + const computedAddr = await factory.findCreate2Address(salt, bytecode); + + const tx = await factory.safeCreate2(salt, bytecode, { + gasLimit: 6000000, + }); + const result = await tx.wait(); + + return { + address: computedAddr as string, + receipt: result as TransactionReceipt, + txHash: result.transactionHash as string, + }; +} + +/** + * Determines if there's a contract deployed on the provided address. + */ +export async function isDeployed(address: string, provider: Provider) { + const code = await provider.getCode(address); + return code.slice(2).length > 0; +} diff --git a/packages/zeta-app-contracts/lib/shared/deploy.helpers.ts b/packages/zeta-app-contracts/lib/shared/deploy.helpers.ts new file mode 100644 index 00000000..98823cc5 --- /dev/null +++ b/packages/zeta-app-contracts/lib/shared/deploy.helpers.ts @@ -0,0 +1,39 @@ +import { BaseContract, ContractFactory } from "ethers"; +import { ethers } from "hardhat"; + +import { ERC20, ERC20__factory as ERC20Factory } from "../../typechain-types"; + +export type GetContractParams = + | { + deployParams: Parameters; + existingContractAddress?: null; + } + | { + deployParams?: null; + existingContractAddress: string; + }; + +export const getContract = async ({ + contractName, + deployParams, + existingContractAddress, +}: GetContractParams & { contractName: string }): Promise => { + const ContractFactory = (await ethers.getContractFactory(contractName)) as Factory; + + const isGetExistingContract = Boolean(existingContractAddress); + if (isGetExistingContract) { + console.log("Getting existing contract from address:", existingContractAddress); + return ContractFactory.attach(existingContractAddress!) as Contract; + } + + const contract = (await ContractFactory.deploy(...deployParams!)) as Contract; + await contract.deployed(); + + return contract; +}; + +export const getErc20 = async (existingContractAddress?: string) => + getContract({ + contractName: "ERC20", + ...(existingContractAddress ? { existingContractAddress } : { deployParams: ["ERC20Mock", "ERC20Mock"] }), + }); diff --git a/packages/zeta-app-contracts/package.json b/packages/zeta-app-contracts/package.json new file mode 100644 index 00000000..234f534b --- /dev/null +++ b/packages/zeta-app-contracts/package.json @@ -0,0 +1,44 @@ +{ + "name": "@zetachain/zeta-app-contracts", + "version": "0.0.2", + "license": "MIT", + "private": false, + "author": "zetachain", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "files": [ + "contracts", + "data", + "lib", + "scripts", + "typechain-types" + ], + "scripts": { + "clean": "npx hardhat clean", + "compile": "npx hardhat compile", + "prepublishOnly": "echo 'This package has no prepublishOnly tasks.'", + "lint:fix": "npm run lint:js:fix && npm run lint:sol:fix", + "lint:js:fix": "eslint --ext .js,.ts . --fix", + "lint:js": "eslint --ext .js,.ts .", + "lint:sol:fix": "prettier --write \"contracts/**/*.sol\"", + "lint:sol": "solhint 'contracts/**/*.sol' && prettier -c 'contracts/**/*.sol'", + "lint": "npm run lint:js && npm run lint:sol", + "test:watch": "echo You need to install `entr` to run this command && find contracts/**/** lib/**/** test/**/** -iname '*.sol' -o -iname '*.ts' | entr -cnr npx hardhat test", + "test": "npx hardhat test", + "tsc:watch": "npx tsc --watch" + }, + "devDependencies": { + "@defi-wonderland/smock": "^2.3.4", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.7.20", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@zetachain/networks": "^4.0.0", + "@zetachain/protocol-contracts": "^4.0.1", + "ethers": "5.6.8" + } +} \ No newline at end of file diff --git a/packages/zeta-app-contracts/scripts/address.helpers.ts b/packages/zeta-app-contracts/scripts/address.helpers.ts new file mode 100644 index 00000000..8aa86ff9 --- /dev/null +++ b/packages/zeta-app-contracts/scripts/address.helpers.ts @@ -0,0 +1,33 @@ +import { networks } from "@zetachain/networks"; +import { isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { readFileSync, writeFileSync } from "fs"; +import { network } from "hardhat"; +import { join } from "path"; + +import addresses from "../data/addresses.json"; + +export type AppAddress = "multiChainSwap" | "multiChainValue" | "zetaTokenConsumerUniV2" | "zetaTokenConsumerUniV3"; + +export const getAppAddress = (address: AppAddress, network: ZetaProtocolNetwork): string => { + return (addresses["ccm"] as any)[network][address]; +}; + +export const getChainId = (network: ZetaProtocolNetwork): number => { + //@ts-ignore + return networks[network].chain_id; +}; + +export const saveAddress = (name: string, address: string) => { + const networkName = network.name; + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + console.log(`Updating ${name} address on ${networkName}.`); + + const filename = join(__dirname, `../data/addresses.json`); + + const newAddresses = JSON.parse(readFileSync(filename, "utf8")); + + newAddresses["ccm"][networkName][name] = address; + + writeFileSync(filename, JSON.stringify(newAddresses, null, 2)); +}; diff --git a/packages/zeta-app-contracts/scripts/multi-chain-value/deploy.ts b/packages/zeta-app-contracts/scripts/multi-chain-value/deploy.ts new file mode 100644 index 00000000..907ac328 --- /dev/null +++ b/packages/zeta-app-contracts/scripts/multi-chain-value/deploy.ts @@ -0,0 +1,44 @@ +import { getAddress, isProtocolNetworkName, isTestnetNetwork } from "@zetachain/protocol-contracts/dist/lib"; +import { ethers, network } from "hardhat"; + +import { MultiChainValue, MultiChainValue__factory } from "../../typechain-types"; +import { getChainId, saveAddress } from "../address.helpers"; + +const networkName = network.name; + +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const connectorAddress = getAddress("connector", networkName); + const zetaTokenAddress = getAddress("zetaToken", networkName); + + const Factory = (await ethers.getContractFactory("MultiChainValue")) as MultiChainValue__factory; + const contract = (await Factory.deploy(connectorAddress, zetaTokenAddress)) as MultiChainValue; + await contract.deployed(); + + console.log("MultiChainValue deployed to:", contract.address); + saveAddress("multiChainValue", contract.address); + + console.log("MultiChainValue post rutine..."); + + //@ts-ignore + const isTestnet = isTestnetNetwork(networkName); + + if (isTestnet) { + await (await contract.addAvailableChainId(getChainId("goerli_testnet"))).wait().catch((e: any) => console.error(e)); + await (await contract.addAvailableChainId(getChainId("bsc_testnet"))).wait().catch((e: any) => console.error(e)); + await (await contract.addAvailableChainId(getChainId("zeta_testnet"))).wait().catch((e: any) => console.error(e)); + await (await contract.addAvailableChainId(getChainId("mumbai_testnet"))).wait().catch((e: any) => console.error(e)); + } else { + await (await contract.addAvailableChainId(getChainId("bsc_mainnet"))).wait().catch((e: any) => console.error(e)); + await (await contract.addAvailableChainId(getChainId("zeta_mainnet"))).wait().catch((e: any) => console.error(e)); + await (await contract.addAvailableChainId(getChainId("eth_mainnet"))).wait().catch((e: any) => console.error(e)); + } + + console.log("MultiChainValue post rutine finish"); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zeta-app-contracts/scripts/multi-chain-value/deterministic-deploy.ts b/packages/zeta-app-contracts/scripts/multi-chain-value/deterministic-deploy.ts new file mode 100644 index 00000000..1676be3c --- /dev/null +++ b/packages/zeta-app-contracts/scripts/multi-chain-value/deterministic-deploy.ts @@ -0,0 +1,55 @@ +import { getAddress, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { ethers, network } from "hardhat"; + +import { deployContractToAddress, saltToHex } from "../../lib/shared/ImmutableCreate2Factory.helpers"; +import { MultiChainValue__factory } from "../../typechain-types"; +import { saveAddress } from "../address.helpers"; + +const DEPLOYER_ADDRESS = process.env.DEPLOYER_ADDRESS ?? ""; +const SALT_NUMBER = "0"; + +const networkName = network.name; + +export async function deterministicDeployMultiChainValue() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const accounts = await ethers.getSigners(); + const [signer] = accounts; + + const saltNumber = SALT_NUMBER; + const saltStr = BigNumber.from(saltNumber).toHexString(); + + const connector = getAddress("connector", networkName); + const zetaToken = getAddress("zetaToken", networkName); + + const immutableCreate2Factory = getAddress("immutableCreate2Factory", networkName); + + const salthex = saltToHex(saltStr, DEPLOYER_ADDRESS); + + const constructorTypes = ["address", "address"]; + const constructorArgs = [connector, zetaToken]; + + const contractBytecode = MultiChainValue__factory.bytecode; + + const { address } = await deployContractToAddress({ + constructorArgs, + constructorTypes, + contractBytecode, + factoryAddress: immutableCreate2Factory, + salt: salthex, + signer, + }); + + saveAddress("multiChainValue", address); + console.log("Deployed multiChainValue. Address:", address); +} + +if (!process.env.EXECUTE_PROGRAMMATICALLY) { + deterministicDeployMultiChainValue() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); +} diff --git a/packages/zeta-app-contracts/scripts/multi-chain-value/search-reverted-tx.ts b/packages/zeta-app-contracts/scripts/multi-chain-value/search-reverted-tx.ts new file mode 100644 index 00000000..21faa5f2 --- /dev/null +++ b/packages/zeta-app-contracts/scripts/multi-chain-value/search-reverted-tx.ts @@ -0,0 +1,75 @@ +import { ContractReceipt, ContractTransaction, Transaction } from "ethers"; +import { ethers, network } from "hardhat"; + +// Specify the address you're interested in +const ADDRESS = "0x70e967acFcC17c3941E87562161406d41676FD83"; +let API_KEY = ""; +let API_ENDPOINT = ""; +let START_BLOCK = 0; +let END_BLOCK = 0; + +if (network.name === "bsc_mainnet") { + API_KEY = process.env.BSCSCAN_API_KEY || ""; + API_ENDPOINT = "api.bscscan.com"; + START_BLOCK = 35741686; + END_BLOCK = 35844713; +} else if (network.name === "eth_mainnet") { + API_KEY = process.env.ETHERSCAN_API_KEY || ""; + API_ENDPOINT = "api.etherscan.io"; + START_BLOCK = 19080591; + END_BLOCK = 19157698; +} else { + throw new Error("Unsupported network"); +} + +// Function to check if a transaction involves the specified address +const isTransactionOfInterest = (tx: any, address: string) => { + return tx.from.toLowerCase() === address.toLowerCase() || tx.to.toLowerCase() === address.toLowerCase(); +}; + +// Main function to iterate over the block range and find transactions +const findTransactionsInRange = async () => { + let totalTx = 0; + let totalErrorTx = 0; + for (let i = START_BLOCK; i < END_BLOCK; i++) { + // console.log(`Fetching block ${i} to ${END_BLOCK}...`); + const API_URL = `https://${API_ENDPOINT}/api?module=account&action=txlist&address=${ADDRESS}&startblock=${i}&endblock=${END_BLOCK}&sort=asc&apikey=${API_KEY}`; + + try { + const call = await fetch(API_URL); + const response = await call.json(); + const result = response.result; + const firstBlock = result[0].blockNumber; + const lastBlock = result[result.length - 1].blockNumber; + console.log(`Fetched block ${firstBlock} to ${lastBlock}...`); + + const filteredTx = result.filter((tx: any) => isTransactionOfInterest(tx, ADDRESS)); + const nonSuccesssfulTx = filteredTx.filter((tx: any) => tx.isError === "1" || tx.txreceipt_status !== "1"); + + totalTx += filteredTx.length; + totalErrorTx += nonSuccesssfulTx.length; + for (const tx of nonSuccesssfulTx) { + console.log(tx.hash); + } + if (result.length > 9000) { + i = parseInt(result[result.length - 1].blockNumber) - 1; + } + if (lastBlock >= END_BLOCK) { + break; + } + } catch (e) { + console.log(`Error fetching block ${i}`, e); + } + } + console.log(`total tx: ${totalTx} / Errors: ${totalErrorTx}`); +}; + +// Call the main function +const main = async () => { + await findTransactionsInRange(); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zeta-app-contracts/scripts/multi-chain-value/send-value.ts b/packages/zeta-app-contracts/scripts/multi-chain-value/send-value.ts new file mode 100644 index 00000000..f8ecfcd5 --- /dev/null +++ b/packages/zeta-app-contracts/scripts/multi-chain-value/send-value.ts @@ -0,0 +1,58 @@ +import { getAddress, isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { getMultiChainValue } from "../../lib/multi-chain-value/MultiChainValue.helpers"; +import { getErc20 } from "../../lib/shared/deploy.helpers"; +import { MultiChainValue } from "../../typechain-types"; +import { getAppAddress, getChainId } from "../address.helpers"; + +const networkName = network.name; + +const doTranfer = async ( + sourceChain: ZetaProtocolNetwork, + multiChainValueContract: MultiChainValue, + chainId: number, + amount: BigNumber, + destinationAddress: string +) => { + //@ts-ignore + if (getChainId(sourceChain) == chainId) return; + + if (sourceChain === "zeta_testnet") { + const tx = await multiChainValueContract.sendZeta(chainId, destinationAddress, { value: amount }); + await tx.wait(); + return; + } + + const tx = await multiChainValueContract.send(chainId, destinationAddress, amount); + await tx.wait(); +}; + +const main = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const multiChainValueContract = await getMultiChainValue(getAppAddress("multiChainValue", networkName)); + + const [signer] = await ethers.getSigners(); + + const amount = parseEther("1"); + + if (networkName !== "zeta_testnet") { + const zetaToken = await getErc20(getAddress("zetaToken", networkName)); + const tx = await zetaToken.approve(multiChainValueContract.address, amount.mul(10)); + await tx.wait(); + } + + const destinationAddress = ethers.utils.solidityPack(["address"], [process.env.PUBLIC_KEY_1 ?? signer.address]); + + await doTranfer(networkName, multiChainValueContract, getChainId("goerli_testnet"), amount, destinationAddress); + await doTranfer(networkName, multiChainValueContract, getChainId("mumbai_testnet"), amount, destinationAddress); + await doTranfer(networkName, multiChainValueContract, getChainId("bsc_testnet"), amount, destinationAddress); + await doTranfer(networkName, multiChainValueContract, getChainId("zeta_testnet"), amount, destinationAddress); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zeta-app-contracts/scripts/multi-chain-value/verify-contract.ts b/packages/zeta-app-contracts/scripts/multi-chain-value/verify-contract.ts new file mode 100644 index 00000000..4589e329 --- /dev/null +++ b/packages/zeta-app-contracts/scripts/multi-chain-value/verify-contract.ts @@ -0,0 +1,24 @@ +import { getAddress, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import hardhat from "hardhat"; +import { network } from "hardhat"; + +import { getAppAddress } from "../address.helpers"; + +const networkName = network.name; + +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + await hardhat.run("verify:verify", { + address: getAppAddress("multiChainValue", networkName), + constructorArguments: [getAddress("connector", networkName), getAddress("zetaToken", networkName)], + contract: "contracts/multi-chain-value/MultiChainValue.sol:MultiChainValue", + }); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/example-contracts/test/MultiChainValue.spec.ts b/packages/zeta-app-contracts/test/MultiChainValue.spec.ts similarity index 57% rename from packages/example-contracts/test/MultiChainValue.spec.ts rename to packages/zeta-app-contracts/test/MultiChainValue.spec.ts index e47f2a80..2df4f5d8 100644 --- a/packages/example-contracts/test/MultiChainValue.spec.ts +++ b/packages/zeta-app-contracts/test/MultiChainValue.spec.ts @@ -1,5 +1,7 @@ import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ZetaEth } from "@zetachain/protocol-contracts/dist/typechain-types"; import { expect } from "chai"; +import { defaultAbiCoder, parseEther } from "ethers/lib/utils"; import { ethers } from "hardhat"; import { @@ -7,7 +9,7 @@ import { deployZetaConnectorMock, deployZetaEthMock, } from "../lib/multi-chain-value/MultiChainValue.helpers"; -import { MultiChainValueMock, ZetaConnectorMockValue, ZetaEth } from "../typechain-types"; +import { MultiChainValueMock, ZetaConnectorMockValue } from "../typechain-types"; describe("MultiChainValue tests", () => { let multiChainValueContractA: MultiChainValueMock; @@ -23,6 +25,8 @@ describe("MultiChainValue tests", () => { let deployerAddress: string; let account1Address: string; + const encoder = new ethers.utils.AbiCoder(); + beforeEach(async () => { zetaConnectorMockContract = await deployZetaConnectorMock(); zetaEthMockContract = await deployZetaEthMock(); @@ -43,9 +47,7 @@ describe("MultiChainValue tests", () => { it("Should prevent enabling a chainId that's already enabled", async () => { await (await multiChainValueContractA.addAvailableChainId(1)).wait(); - await expect(multiChainValueContractA.addAvailableChainId(1)).to.be.revertedWith( - "MultiChainValue: destinationChainId already enabled" - ); + await expect(multiChainValueContractA.addAvailableChainId(1)).to.be.revertedWith("ChainIdAlreadyEnabled"); }); it("Should enable the provided chainId", async () => { @@ -57,9 +59,7 @@ describe("MultiChainValue tests", () => { describe("removeAvailableChainId", () => { it("Should prevent disabling a chainId that's already disabled", async () => { - await expect(multiChainValueContractA.removeAvailableChainId(1)).to.be.revertedWith( - "MultiChainValue: destinationChainId not available" - ); + await expect(multiChainValueContractA.removeAvailableChainId(1)).to.be.revertedWith("ChainIdNotAvailable"); }); it("Should disable the provided chainId", async () => { @@ -72,18 +72,31 @@ describe("MultiChainValue tests", () => { }); describe("send", () => { + it("Should send msg", async () => { + await zetaEthMockContract.approve(multiChainValueContractA.address, parseEther("1000")); + const tx = multiChainValueContractA.send(chainBId, account1Address, 10, 300000); + + await expect(tx) + .to.be.emit(zetaConnectorMockContract, "Send") + .withArgs(chainBId, account1Address.toLowerCase(), 300000, "0x", 10, defaultAbiCoder.encode(["string"], [""])); + }); + + it("Should send native token", async () => { + const tx = multiChainValueContractA.sendZeta(chainBId, account1Address, 100000, { value: 10 }); + await expect(tx) + .to.be.emit(zetaConnectorMockContract, "Send") + .withArgs(chainBId, account1Address.toLowerCase(), 100000, "0x", 10, defaultAbiCoder.encode(["string"], [""])); + }); + it("Should prevent sending value to a disabled chainId", async () => { - await expect(multiChainValueContractA.send(1, account1Address, 100_000)).to.be.revertedWith( - "MultiChainValue: destinationChainId not available" - ); + const tx = multiChainValueContractA.send(1, account1Address, 100_000, 300000); + await expect(tx).to.be.revertedWith("InvalidDestinationChainId"); }); it("Should prevent sending 0 value", async () => { await (await multiChainValueContractA.addAvailableChainId(1)).wait(); - - await expect(multiChainValueContractA.send(1, account1Address, 0)).to.be.revertedWith( - "MultiChainValue: zetaAmount should be greater than 0" - ); + const tx = multiChainValueContractA.send(1, account1Address, 0, 300000); + await expect(tx).to.be.revertedWith("InvalidZetaValueAndGas"); }); it("Should prevent sending if the account has no Zeta balance", async () => { @@ -94,6 +107,27 @@ describe("MultiChainValue tests", () => { await (await multiChainValueContractA.addAvailableChainId(1)).wait(); }); + it("Should send the tokens back to the sender", async () => { + await (await multiChainValueContractA.addAvailableChainId(chainAId)).wait(); + const chainId = await deployer.getChainId(); + + const remainingZetaValue = parseEther("15"); + await zetaEthMockContract.transfer(multiChainValueContractA.address, remainingZetaValue); + + await zetaConnectorMockContract.onRevert( + multiChainValueContractA.address, + chainId, + ethers.utils.solidityPack(["address"], [multiChainValueContractA.address]), + chainBId, + remainingZetaValue, + encoder.encode(["address"], [account1.address]), + ethers.utils.hexZeroPad("0x0", 32) + ); + + const balance = await zetaEthMockContract.balanceOf(multiChainValueContractA.address); + await expect(balance).to.be.eq(remainingZetaValue); + }); + describe("Given a valid input", () => { it("Should send value", async () => { await (await multiChainValueContractA.addAvailableChainId(1)).wait(); diff --git a/packages/zeta-app-contracts/tsconfig.json b/packages/zeta-app-contracts/tsconfig.json new file mode 100644 index 00000000..ab9bc043 --- /dev/null +++ b/packages/zeta-app-contracts/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "./scripts", + "./lib", + "./test", + "./tests", + "./typechain", + "./**/*.json", + "typechain-types" + ], + "exclude": [ + "artifacts", + "cache", + "hardhat.config.ts", + ], + "compilerOptions": { + "baseUrl": "." + } +} \ No newline at end of file diff --git a/packages/zevm-app-contracts/.env.example b/packages/zevm-app-contracts/.env.example new file mode 100644 index 00000000..d53e3d1a --- /dev/null +++ b/packages/zevm-app-contracts/.env.example @@ -0,0 +1,2 @@ +ALCHEMY_API_KEY_MAINNET= +ALCHEMY_API_KEY_GOERLI= \ No newline at end of file diff --git a/packages/example-contracts/.eslintrc.js b/packages/zevm-app-contracts/.eslintrc.js similarity index 100% rename from packages/example-contracts/.eslintrc.js rename to packages/zevm-app-contracts/.eslintrc.js index 4f9ad61e..77b8f69a 100644 --- a/packages/example-contracts/.eslintrc.js +++ b/packages/zevm-app-contracts/.eslintrc.js @@ -3,13 +3,16 @@ const path = require("path"); const OFF = 0; module.exports = { - extends: ["../../.eslintrc.js"], env: { browser: false, es2021: true, mocha: true, node: true, }, + extends: ["../../.eslintrc.js"], + rules: { + "no-console": OFF, + }, settings: { "import/resolver": { typescript: { @@ -17,7 +20,4 @@ module.exports = { }, }, }, - rules: { - "no-console": OFF, - }, }; diff --git a/packages/example-contracts/README.md b/packages/zevm-app-contracts/README.md similarity index 71% rename from packages/example-contracts/README.md rename to packages/zevm-app-contracts/README.md index 50ced2fe..af7d3c4b 100644 --- a/packages/example-contracts/README.md +++ b/packages/zevm-app-contracts/README.md @@ -1,4 +1,6 @@ -# ZetaChain example contracts +# ZetaEVM App contracts + +> ⚠️ The contracts **are not audited yet**, use at your own risk. ## Environment variables diff --git a/packages/zevm-app-contracts/contracts/disperse/Disperse.sol b/packages/zevm-app-contracts/contracts/disperse/Disperse.sol new file mode 100644 index 00000000..943ce30c --- /dev/null +++ b/packages/zevm-app-contracts/contracts/disperse/Disperse.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/interfaces/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +contract Disperse { + using SafeERC20 for IERC20; + + bool private locked; + + event FundsDispersed(address indexed token, address indexed from, address indexed recipient, uint256 value); + + modifier noReentrancy() { + require(!locked, "No reentrancy"); + locked = true; + _; + locked = false; + } + + function disperseEther(address[] calldata recipients, uint256[] calldata values) external payable noReentrancy { + require(recipients.length == values.length, "Recipients and values length mismatch"); + + for (uint256 i = 0; i < recipients.length; i++) { + (bool sent, ) = payable(recipients[i]).call{value: values[i]}(""); + require(sent, "Failed to send Ether"); + emit FundsDispersed(address(0), msg.sender, recipients[i], values[i]); + } + + uint256 balance = address(this).balance; + if (balance > 0) { + (bool sent, ) = payable(msg.sender).call{value: balance}(""); + require(sent, "Failed to refund remaining Ether"); + } + } + + function disperseToken( + IERC20 token, + address[] calldata recipients, + uint256[] calldata values + ) external noReentrancy { + uint256 total = 0; + for (uint256 i = 0; i < recipients.length; i++) total += values[i]; + token.safeTransferFrom(msg.sender, address(this), total); + for (uint256 i = 0; i < recipients.length; i++) { + token.safeTransfer(recipients[i], values[i]); + emit FundsDispersed(address(token), msg.sender, recipients[i], values[i]); + } + } + + function disperseTokenSimple( + IERC20 token, + address[] calldata recipients, + uint256[] calldata values + ) external noReentrancy { + for (uint256 i = 0; i < recipients.length; i++) { + token.safeTransferFrom(msg.sender, recipients[i], values[i]); + emit FundsDispersed(address(token), msg.sender, recipients[i], values[i]); + } + } +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributor.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributor.sol new file mode 100644 index 00000000..d971843e --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributor.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/interfaces/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; +import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol"; + +import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; + +import "./Synthetixio/StakingRewards.sol"; + +contract RewardDistributor is StakingRewards { + uint16 internal constant MAX_DEADLINE = 200; + + IERC20 public immutable stakingTokenA; + IERC20 public immutable stakingTokenB; + SystemContract private immutable systemContract; + uint256 public minCoolDown; + uint256 public minStakingPeriod; + mapping(address => uint256) public lastDeposit; + mapping(address => uint256) public unlockTokensAt; + + error ZeroStakeAmount(); + error InvalidTokenAddress(); + error MinimumStakingPeriodNotMet(); + error ApproveFailed(); + error TransferFailed(); + + event MinCoolDownUpdated(address callerAddress, uint256 minCoolDown); + event MinStakingPeriodUpdated(address callerAddress, uint256 minStakingPeriod); + + constructor( + address owner, + address rewardsDistribution, + address rewardsToken, + address stakingToken, + address stakingTokenA_, + address stakingTokenB_, + address systemContract_ + ) StakingRewards(owner, rewardsDistribution, rewardsToken, stakingToken) { + stakingTokenA = IERC20(stakingTokenA_); + stakingTokenB = IERC20(stakingTokenB_); + systemContract = SystemContract(systemContract_); + } + + function _addLiquidity(uint256 tokenAmountA, uint256 tokenAmountB) internal returns (uint256) { + bool transfer = stakingTokenA.transferFrom(msg.sender, address(this), tokenAmountA); + if (!transfer) revert TransferFailed(); + bool approve = stakingTokenA.approve(systemContract.uniswapv2Router02Address(), 0); + if (!approve) revert ApproveFailed(); + approve = stakingTokenA.approve(systemContract.uniswapv2Router02Address(), tokenAmountA); + if (!approve) revert ApproveFailed(); + + transfer = stakingTokenB.transferFrom(msg.sender, address(this), tokenAmountB); + if (!transfer) revert TransferFailed(); + approve = stakingTokenB.approve(systemContract.uniswapv2Router02Address(), tokenAmountB); + if (!approve) revert ApproveFailed(); + + (, , uint LPTokenAmount) = IUniswapV2Router02(systemContract.uniswapv2Router02Address()).addLiquidity( + address(stakingTokenA), + address(stakingTokenB), + tokenAmountA, + tokenAmountB, + 0, + 0, + address(this), + block.timestamp + MAX_DEADLINE + ); + + return LPTokenAmount; + } + + /// @param tokenAddress Token you already know the amount you want to deposit + /// @param amount Amount of token you want to deposit + /// @return Amount of the other token you will need to execute addLiquidityAndStake + function otherTokenByAmount(address tokenAddress, uint256 amount) public view returns (uint256) { + address otherTokenAddress = address(stakingTokenA) == tokenAddress + ? address(stakingTokenB) + : address(stakingTokenA); + address poolAddress = systemContract.uniswapv2PairFor( + systemContract.uniswapv2FactoryAddress(), + tokenAddress, + otherTokenAddress + ); + (uint256 tokenReserve, uint256 otherTokenReserve, ) = IUniswapV2Pair(poolAddress).getReserves(); + + if (IUniswapV2Pair(poolAddress).token0() == otherTokenAddress) + (otherTokenReserve, tokenReserve) = (tokenReserve, otherTokenReserve); + + return (otherTokenReserve * amount) / tokenReserve; + } + + function addLiquidityAndStake(address tokenAddress, uint256 amount) external nonReentrant { + if (amount == 0) revert ZeroStakeAmount(); + address otherTokenAddress = address(stakingTokenA) == tokenAddress + ? address(stakingTokenB) + : address(stakingTokenA); + address poolAddress = systemContract.uniswapv2PairFor( + systemContract.uniswapv2FactoryAddress(), + tokenAddress, + otherTokenAddress + ); + if (poolAddress != address(stakingToken)) revert InvalidTokenAddress(); + uint256 otherTokenAmount = otherTokenByAmount(tokenAddress, amount); + + if (tokenAddress == address(stakingTokenB)) { + (amount, otherTokenAmount) = (otherTokenAmount, amount); + } + + lastDeposit[msg.sender] = block.timestamp; + unlockTokensAt[msg.sender] = type(uint256).max; + uint256 LPTokenAmount = _addLiquidity(amount, otherTokenAmount); + _stakeFromContract(LPTokenAmount); + } + + function setMinCoolDown(uint256 minCoolDown_) external onlyOwner { + minCoolDown = minCoolDown_; + emit MinCoolDownUpdated(msg.sender, minCoolDown_); + } + + function setMinStakingPeriod(uint256 minStakingPeriod_) external onlyOwner { + minStakingPeriod = minStakingPeriod_; + emit MinStakingPeriodUpdated(msg.sender, minStakingPeriod_); + } + + function stake(uint256 amount) public override { + if (amount == 0) revert ZeroStakeAmount(); + lastDeposit[msg.sender] = block.timestamp; + unlockTokensAt[msg.sender] = type(uint256).max; + super.stake(amount); + } + + function beginCoolDown() external { + if (lastDeposit[msg.sender] + minStakingPeriod > block.timestamp) revert MinimumStakingPeriodNotMet(); + unlockTokensAt[msg.sender] = block.timestamp + minCoolDown; + } + + function withdraw(uint256 amount) public override { + if (unlockTokensAt[msg.sender] > block.timestamp) revert MinimumStakingPeriodNotMet(); + super.withdraw(amount); + } +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributorFactory.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributorFactory.sol new file mode 100644 index 00000000..992622a1 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/RewardDistributorFactory.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/interfaces/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; + +import "./RewardDistributor.sol"; + +contract RewardDistributorFactory { + address public immutable zetaTokenAddress; + SystemContract private immutable _systemContract; + + mapping(uint256 => address) public incentivesContracts; + uint256 public incentivesContractsLen; + + event RewardDistributorCreated( + address rewardDistributorContract, + address stakingTokenA, + address stakingTokenB, + address LPStakingToken, + address rewardsToken, + address owner + ); + + constructor(address _zetaTokenAddress, address systemContract) { + zetaTokenAddress = _zetaTokenAddress; + _systemContract = SystemContract(systemContract); + } + + function createTokenIncentive( + address owner, + ///@dev _rewardsDistribution is one who can set the amount of token to reward + address rewardsDistribution, + address rewardsToken, + address stakingTokenA, + address stakingTokenB + ) external { + if (stakingTokenB == address(0)) { + stakingTokenB = zetaTokenAddress; + } + if (rewardsToken == address(0)) { + rewardsToken = zetaTokenAddress; + } + address LPTokenAddress = _systemContract.uniswapv2PairFor( + _systemContract.uniswapv2FactoryAddress(), + stakingTokenA, + stakingTokenB + ); + RewardDistributor incentiveContract = new RewardDistributor( + owner, + rewardsDistribution, + rewardsToken, + LPTokenAddress, + stakingTokenA, + stakingTokenB, + address(_systemContract) + ); + incentivesContracts[incentivesContractsLen++] = address(incentiveContract); + + emit RewardDistributorCreated( + address(incentiveContract), + stakingTokenA, + stakingTokenB, + LPTokenAddress, + rewardsToken, + owner + ); + } + + function getIncentiveContracts() public view returns (address[] memory) { + address[] memory result = new address[](incentivesContractsLen); + for (uint256 i = 0; i < incentivesContractsLen; i++) { + result[i] = incentivesContracts[i]; + } + return result; + } +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Owned.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Owned.sol new file mode 100644 index 00000000..e56155f3 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Owned.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +// https://docs.synthetix.io/contracts/source/contracts/owned +contract Owned { + address public owner; + address public nominatedOwner; + + constructor(address _owner) public { + require(_owner != address(0), "Owner address cannot be 0"); + owner = _owner; + emit OwnerChanged(address(0), _owner); + } + + function nominateNewOwner(address _owner) external onlyOwner { + nominatedOwner = _owner; + emit OwnerNominated(_owner); + } + + function acceptOwnership() external { + require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership"); + emit OwnerChanged(owner, nominatedOwner); + owner = nominatedOwner; + nominatedOwner = address(0); + } + + modifier onlyOwner() { + _onlyOwner(); + _; + } + + function _onlyOwner() private view { + require(msg.sender == owner, "Only the contract owner may perform this action"); + } + + event OwnerNominated(address newOwner); + event OwnerChanged(address oldOwner, address newOwner); +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Pausable.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Pausable.sol new file mode 100644 index 00000000..496af3b9 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/Pausable.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +// Inheritance +import "./Owned.sol"; + +// https://docs.synthetix.io/contracts/source/contracts/pausable +abstract contract Pausable is Owned { + uint public lastPauseTime; + bool public paused; + + constructor() { + // This contract is abstract, and thus cannot be instantiated directly + require(owner != address(0), "Owner must be set"); + // Paused will be false, and lastPauseTime will be 0 upon initialisation + } + + /** + * @notice Change the paused state of the contract + * @dev Only the contract owner may call this. + */ + function setPaused(bool _paused) external onlyOwner { + // Ensure we're actually changing the state before we do anything + if (_paused == paused) { + return; + } + + // Set our paused state. + paused = _paused; + + // If applicable, set the last pause time. + if (paused) { + lastPauseTime = block.timestamp; + } + + // Let everyone know that our pause state has changed. + emit PauseChanged(paused); + } + + event PauseChanged(bool isPaused); + + modifier notPaused() { + require(!paused, "This action cannot be performed while the contract is paused"); + _; + } +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/RewardsDistributionRecipient.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/RewardsDistributionRecipient.sol new file mode 100644 index 00000000..c0efa456 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/RewardsDistributionRecipient.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +// Inheritance +import "./Owned.sol"; + +// https://docs.synthetix.io/contracts/source/contracts/rewardsdistributionrecipient +abstract contract RewardsDistributionRecipient is Owned { + address public rewardsDistribution; + + function notifyRewardAmount(uint256 reward) external virtual; + + modifier onlyRewardsDistribution() { + require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract"); + _; + } + + function setRewardsDistribution(address _rewardsDistribution) external onlyOwner { + rewardsDistribution = _rewardsDistribution; + } +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/StakingRewards.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/StakingRewards.sol new file mode 100644 index 00000000..38c57867 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/StakingRewards.sol @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/utils/math/SafeMath.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; + +// Inheritance +import "./interfaces/IStakingRewards.sol"; +import "./RewardsDistributionRecipient.sol"; +import "./Pausable.sol"; + +// https://docs.synthetix.io/contracts/source/contracts/stakingrewards +contract StakingRewards is RewardsDistributionRecipient, ReentrancyGuard, Pausable { + using SafeMath for uint256; + using SafeERC20 for IERC20; + + /* ========== STATE VARIABLES ========== */ + + IERC20 public immutable rewardsToken; + IERC20 public immutable stakingToken; + uint256 public periodFinish = 0; + uint256 public rewardRate = 0; + uint256 public rewardsDuration = 7 days; + uint256 public lastUpdateTime; + uint256 public rewardPerTokenStored; + + mapping(address => uint256) public userRewardPerTokenPaid; + mapping(address => uint256) public rewards; + + uint256 internal _totalSupply; + mapping(address => uint256) internal _balances; + + /* ========== CONSTRUCTOR ========== */ + + constructor( + address _owner, + address _rewardsDistribution, + address _rewardsToken, + address _stakingToken + ) public Owned(_owner) { + rewardsToken = IERC20(_rewardsToken); + stakingToken = IERC20(_stakingToken); + rewardsDistribution = _rewardsDistribution; + } + + /* ========== VIEWS ========== */ + + function totalSupply() external view returns (uint256) { + return _totalSupply; + } + + function balanceOf(address account) external view returns (uint256) { + return _balances[account]; + } + + function lastTimeRewardApplicable() public view returns (uint256) { + return block.timestamp < periodFinish ? block.timestamp : periodFinish; + } + + function rewardPerToken() public view returns (uint256) { + if (_totalSupply == 0) { + return rewardPerTokenStored; + } + return + rewardPerTokenStored.add( + lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate).mul(1e18).div(_totalSupply) + ); + } + + function earned(address account) public view returns (uint256) { + return + _balances[account].mul(rewardPerToken().sub(userRewardPerTokenPaid[account])).div(1e18).add( + rewards[account] + ); + } + + function getRewardForDuration() external view returns (uint256) { + return rewardRate.mul(rewardsDuration); + } + + /* ========== MUTATIVE FUNCTIONS ========== */ + + function stake(uint256 amount) public virtual nonReentrant notPaused updateReward(msg.sender) { + require(amount > 0, "Cannot stake 0"); + _totalSupply = _totalSupply.add(amount); + _balances[msg.sender] = _balances[msg.sender].add(amount); + stakingToken.safeTransferFrom(msg.sender, address(this), amount); + emit Staked(msg.sender, amount); + } + + ///@dev This function is added to support staking from the same contract without the need of an extra transfer + function _stakeFromContract(uint256 amount) internal notPaused updateReward(msg.sender) { + require(amount > 0, "Cannot stake 0"); + _totalSupply = _totalSupply.add(amount); + _balances[msg.sender] = _balances[msg.sender].add(amount); + emit Staked(msg.sender, amount); + } + + function withdraw(uint256 amount) public virtual nonReentrant updateReward(msg.sender) { + require(amount > 0, "Cannot withdraw 0"); + _totalSupply = _totalSupply.sub(amount); + _balances[msg.sender] = _balances[msg.sender].sub(amount); + stakingToken.safeTransfer(msg.sender, amount); + emit Withdrawn(msg.sender, amount); + } + + function getReward(bool unwrap) public nonReentrant updateReward(msg.sender) { + uint256 reward = rewards[msg.sender]; + if (reward > 0) { + rewards[msg.sender] = 0; + if (unwrap) { + // The 4-byte signature of the function "withdraw(uint256)" + // This is calculated as: bytes4(keccak256("withdraw(uint256)")) + bytes4 functionSignature = 0x2e1a7d4d; + + // Construct the call data + // Here, 'wad' is set to reward + bytes memory data = abi.encodeWithSelector(functionSignature, reward); + + // Make the low-level call + (bool success, ) = address(rewardsToken).call(data); + require(success, "Reward is not a wrapped asset"); + + (success, ) = msg.sender.call{value: reward}(""); + require(success, "Transfer failed"); + } else rewardsToken.safeTransfer(msg.sender, reward); + emit RewardPaid(msg.sender, reward); + } + } + + function exit(bool unwrap) external { + withdraw(_balances[msg.sender]); + getReward(unwrap); + } + + /* ========== RESTRICTED FUNCTIONS ========== */ + + function notifyRewardAmount(uint256 reward) external override onlyRewardsDistribution updateReward(address(0)) { + if (block.timestamp >= periodFinish) { + rewardRate = reward.div(rewardsDuration); + } else { + uint256 remaining = periodFinish.sub(block.timestamp); + uint256 leftover = remaining.mul(rewardRate); + rewardRate = reward.add(leftover).div(rewardsDuration); + } + + // Ensure the provided reward amount is not more than the balance in the contract. + // This keeps the reward rate in the right range, preventing overflows due to + // very high values of rewardRate in the earned and rewardsPerToken functions; + // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. + uint balance = rewardsToken.balanceOf(address(this)); + require(rewardRate <= balance.div(rewardsDuration), "Provided reward too high"); + + lastUpdateTime = block.timestamp; + periodFinish = block.timestamp.add(rewardsDuration); + emit RewardAdded(reward); + } + + // Added to support recovering LP Rewards from other systems such as BAL to be distributed to holders + function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { + require(tokenAddress != address(stakingToken), "Cannot withdraw the staking token"); + IERC20(tokenAddress).safeTransfer(owner, tokenAmount); + emit Recovered(tokenAddress, tokenAmount); + } + + function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner { + require( + block.timestamp > periodFinish, + "Previous rewards period must be complete before changing the duration for the new period" + ); + rewardsDuration = _rewardsDuration; + emit RewardsDurationUpdated(rewardsDuration); + } + + /* ========== MODIFIERS ========== */ + + modifier updateReward(address account) { + rewardPerTokenStored = rewardPerToken(); + lastUpdateTime = lastTimeRewardApplicable(); + if (account != address(0)) { + rewards[account] = earned(account); + userRewardPerTokenPaid[account] = rewardPerTokenStored; + } + _; + } + + /* ========== EVENTS ========== */ + + event RewardAdded(uint256 reward); + event Staked(address indexed user, uint256 amount); + event Withdrawn(address indexed user, uint256 amount); + event RewardPaid(address indexed user, uint256 reward); + event RewardsDurationUpdated(uint256 newDuration); + event Recovered(address token, uint256 amount); + + // Function to accept Ether + receive() external payable {} +} diff --git a/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/interfaces/IStakingRewards.sol b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/interfaces/IStakingRewards.sol new file mode 100644 index 00000000..23afa2c4 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/liquidity-incentives/Synthetixio/interfaces/IStakingRewards.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +// https://docs.synthetix.io/contracts/source/interfaces/istakingrewards +interface IStakingRewards { + // Views + + function balanceOf(address account) external view returns (uint256); + + function earned(address account) external view returns (uint256); + + function getRewardForDuration() external view returns (uint256); + + function lastTimeRewardApplicable() external view returns (uint256); + + function rewardPerToken() external view returns (uint256); + + function rewardsDistribution() external view returns (address); + + function rewardsToken() external view returns (address); + + function totalSupply() external view returns (uint256); + + // Mutative + + function exit() external; + + function getReward() external; + + function stake(uint256 amount) external; + + function withdraw(uint256 amount) external; +} diff --git a/packages/zevm-app-contracts/contracts/multi-output/ZetaMultiOutput.sol b/packages/zevm-app-contracts/contracts/multi-output/ZetaMultiOutput.sol new file mode 100644 index 00000000..ec1cede1 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/multi-output/ZetaMultiOutput.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; +import "../shared/BytesHelperLib.sol"; +import "../shared/SwapHelperLib.sol"; + +interface ZetaMultiOutputErrors { + error NoAvailableTransfers(); +} + +contract ZetaMultiOutput is zContract, Ownable, ZetaMultiOutputErrors { + SystemContract public immutable systemContract; + address[] public destinationTokens; + + event DestinationRegistered(address); + event Withdrawal(address, uint256, address); + + constructor(address systemContractAddress) { + systemContract = SystemContract(systemContractAddress); + } + + modifier onlySystem() { + require(msg.sender == address(systemContract), "Only system contract can call this function"); + _; + } + + function registerDestinationToken(address destinationToken) external onlyOwner { + destinationTokens.push(destinationToken); + emit DestinationRegistered(destinationToken); + } + + function _getTotalTransfers(address zrc20) internal view returns (uint256) { + uint256 total = 0; + for (uint256 i; i < destinationTokens.length; i++) { + if (destinationTokens[i] == zrc20) continue; + total++; + } + + return total; + } + + function onCrossChainCall( + zContext calldata context, + address zrc20, + uint256 amount, + bytes calldata message + ) external virtual override onlySystem { + if (_getTotalTransfers(zrc20) == 0) revert NoAvailableTransfers(); + + address receipient = BytesHelperLib.bytesToAddress(message, 0); + uint256 amountToTransfer = amount / _getTotalTransfers(zrc20); + uint256 leftOver = amount - amountToTransfer * _getTotalTransfers(zrc20); + + uint256 lastTransferIndex = destinationTokens[destinationTokens.length - 1] == zrc20 + ? destinationTokens.length - 2 + : destinationTokens.length - 1; + + for (uint256 i; i < destinationTokens.length; i++) { + address targetZRC20 = destinationTokens[i]; + if (targetZRC20 == zrc20) continue; + + if (lastTransferIndex == i) { + amountToTransfer += leftOver; + } + + uint256 outputAmount = SwapHelperLib._doSwap( + systemContract.wZetaContractAddress(), + systemContract.uniswapv2FactoryAddress(), + systemContract.uniswapv2Router02Address(), + zrc20, + amountToTransfer, + targetZRC20, + 0 + ); + SwapHelperLib._doWithdrawal(targetZRC20, outputAmount, BytesHelperLib.addressToBytes(receipient)); + emit Withdrawal(targetZRC20, outputAmount, receipient); + } + } +} diff --git a/packages/zevm-app-contracts/contracts/shared/BytesHelperLib.sol b/packages/zevm-app-contracts/contracts/shared/BytesHelperLib.sol new file mode 100644 index 00000000..122de889 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/shared/BytesHelperLib.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.7; + +library BytesHelperLib { + function bytesToAddress(bytes calldata data, uint256 offset) internal pure returns (address output) { + bytes memory b = data[offset:offset + 20]; + assembly { + output := mload(add(b, 20)) + } + } + + function bytesToUint32(bytes calldata data, uint256 offset) internal pure returns (uint32 output) { + bytes memory b = data[offset:offset + 4]; + assembly { + output := mload(add(b, 4)) + } + } + + function addressToBytes(address someAddress) internal pure returns (bytes32) { + return bytes32(uint256(uint160(someAddress))); + } +} diff --git a/packages/zevm-app-contracts/contracts/shared/MockSystemContract.sol b/packages/zevm-app-contracts/contracts/shared/MockSystemContract.sol new file mode 100644 index 00000000..679e064b --- /dev/null +++ b/packages/zevm-app-contracts/contracts/shared/MockSystemContract.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol"; + +interface SystemContractErrors { + error CallerIsNotFungibleModule(); + + error InvalidTarget(); + + error CantBeIdenticalAddresses(); + + error CantBeZeroAddress(); +} + +contract MockSystemContract is SystemContractErrors { + error TransferFailed(); + + mapping(uint256 => uint256) public gasPriceByChainId; + mapping(uint256 => address) public gasCoinZRC20ByChainId; + mapping(uint256 => address) public gasZetaPoolByChainId; + + address public wZetaContractAddress; + address public immutable uniswapv2FactoryAddress; + address public immutable uniswapv2Router02Address; + + event SystemContractDeployed(); + event SetGasPrice(uint256, uint256); + event SetGasCoin(uint256, address); + event SetGasZetaPool(uint256, address); + event SetWZeta(address); + + constructor(address wzeta_, address uniswapv2Factory_, address uniswapv2Router02_) { + wZetaContractAddress = wzeta_; + uniswapv2FactoryAddress = uniswapv2Factory_; + uniswapv2Router02Address = uniswapv2Router02_; + emit SystemContractDeployed(); + } + + // fungible module updates the gas price oracle periodically + function setGasPrice(uint256 chainID, uint256 price) external { + gasPriceByChainId[chainID] = price; + emit SetGasPrice(chainID, price); + } + + function setGasCoinZRC20(uint256 chainID, address zrc20) external { + gasCoinZRC20ByChainId[chainID] = zrc20; + emit SetGasCoin(chainID, zrc20); + } + + function setWZETAContractAddress(address addr) external { + wZetaContractAddress = addr; + emit SetWZeta(wZetaContractAddress); + } + + // returns sorted token addresses, used to handle return values from pairs sorted in this order + function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { + if (tokenA == tokenB) revert CantBeIdenticalAddresses(); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + if (token0 == address(0)) revert CantBeZeroAddress(); + } + + function uniswapv2PairFor(address factory, address tokenA, address tokenB) public pure returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + hex"ff", + factory, + keccak256(abi.encodePacked(token0, token1)), + hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f" // init code hash + ) + ) + ) + ) + ); + } + + function onCrossChainCall(address target, address zrc20, uint256 amount, bytes calldata message) external { + zContext memory context = zContext({sender: msg.sender, origin: "", chainID: block.chainid}); + bool transfer = IZRC20(zrc20).transfer(target, amount); + if (!transfer) revert TransferFailed(); + zContract(target).onCrossChainCall(context, zrc20, amount, message); + } +} diff --git a/packages/zevm-app-contracts/contracts/shared/MockZRC20.sol b/packages/zevm-app-contracts/contracts/shared/MockZRC20.sol new file mode 100644 index 00000000..49f5f334 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/shared/MockZRC20.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity =0.8.7; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import "./BytesHelperLib.sol"; + +contract MockZRC20 is ERC20 { + constructor(uint256 initialSupply, string memory name, string memory symbol) ERC20(name, symbol) { + _mint(msg.sender, initialSupply * (10 ** uint256(decimals()))); + } + + function deposit(address to, uint256 amount) external returns (bool) { + return true; + } + + function bytesToAddress(bytes calldata data, uint256 offset, uint256 size) public pure returns (address output) { + bytes memory b = data[offset:offset + size]; + assembly { + output := mload(add(b, size)) + } + } + + function withdraw(bytes calldata to, uint256 amount) external returns (bool) { + address toAddress = BytesHelperLib.bytesToAddress(to, 12); + return transfer(toAddress, amount); + } + + function withdrawGasFee() external view returns (address, uint256) { + return (address(this), 0); + } +} diff --git a/packages/zevm-app-contracts/contracts/shared/SwapHelperLib.sol b/packages/zevm-app-contracts/contracts/shared/SwapHelperLib.sol new file mode 100644 index 00000000..59f18880 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/shared/SwapHelperLib.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.7; + +import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; +import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol"; + +library SwapHelperLib { + uint16 internal constant MAX_DEADLINE = 200; + + error WrongGasContract(); + + error NotEnoughToPayGasFee(); + + error CantBeIdenticalAddresses(); + + error CantBeZeroAddress(); + + // returns sorted token addresses, used to handle return values from pairs sorted in this order + function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { + if (tokenA == tokenB) revert CantBeIdenticalAddresses(); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + if (token0 == address(0)) revert CantBeZeroAddress(); + } + + // calculates the CREATE2 address for a pair without making any external calls + function uniswapv2PairFor(address factory, address tokenA, address tokenB) public pure returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + hex"ff", + factory, + keccak256(abi.encodePacked(token0, token1)), + hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f" // init code hash + ) + ) + ) + ) + ); + } + + function _doWithdrawal(address targetZRC20, uint256 amount, bytes32 receipient) internal { + (address gasZRC20, uint256 gasFee) = IZRC20(targetZRC20).withdrawGasFee(); + + if (gasZRC20 != targetZRC20) revert WrongGasContract(); + if (gasFee >= amount) revert NotEnoughToPayGasFee(); + + IZRC20(targetZRC20).approve(targetZRC20, gasFee); + IZRC20(targetZRC20).withdraw(abi.encodePacked(receipient), amount - gasFee); + } + + function _existsPairPool(address uniswapV2Factory, address zrc20A, address zrc20B) internal view returns (bool) { + address uniswapPool = uniswapv2PairFor(uniswapV2Factory, zrc20A, zrc20B); + return IZRC20(zrc20A).balanceOf(uniswapPool) > 0 && IZRC20(zrc20B).balanceOf(uniswapPool) > 0; + } + + function _doSwap( + address zetaToken, + address uniswapV2Factory, + address uniswapV2Router, + address zrc20, + uint256 amount, + address targetZRC20, + uint256 minAmountOut + ) internal returns (uint256) { + bool existsPairPool = _existsPairPool(uniswapV2Factory, zrc20, targetZRC20); + + address[] memory path; + if (existsPairPool) { + path = new address[](2); + path[0] = zrc20; + path[1] = targetZRC20; + } else { + path = new address[](3); + path[0] = zrc20; + path[1] = zetaToken; + path[2] = targetZRC20; + } + + IZRC20(zrc20).approve(address(uniswapV2Router), amount); + uint256[] memory amounts = IUniswapV2Router01(uniswapV2Router).swapExactTokensForTokens( + amount, + minAmountOut, + path, + address(this), + block.timestamp + MAX_DEADLINE + ); + return amounts[path.length - 1]; + } +} diff --git a/packages/zevm-app-contracts/contracts/shared/TestContracts.sol b/packages/zevm-app-contracts/contracts/shared/TestContracts.sol new file mode 100644 index 00000000..2c222aa8 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/shared/TestContracts.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +/** + * @dev Contracts that need to be compiled for testing purposes + */ + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/packages/example-contracts/contracts/shared/TestContracts.sol b/packages/zevm-app-contracts/contracts/shared/TestUniswapContracts.sol similarity index 100% rename from packages/example-contracts/contracts/shared/TestContracts.sol rename to packages/zevm-app-contracts/contracts/shared/TestUniswapContracts.sol diff --git a/packages/zevm-app-contracts/contracts/zeta-points/InvitationManager.sol b/packages/zevm-app-contracts/contracts/zeta-points/InvitationManager.sol new file mode 100644 index 00000000..aad0d270 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/zeta-points/InvitationManager.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +contract InvitationManager { + /* An ECDSA signature. */ + struct Signature { + uint8 v; + bytes32 r; + bytes32 s; + } + + // Indicate if invitation is still available. The default value is true. + mapping(address => bool) public invitationEnabled; + + // Records the timestamp when a particular user gets verified. + mapping(address => uint256) public userVerificationTimestamps; + + // Records the timestamp when a particular user accepted an invitation from an inviter. + mapping(address => mapping(address => uint256)) public acceptedInvitationsTimestamp; + + // Store invitees for each inviter + mapping(address => address[]) public inviteeLists; + + // Total invites accepted by day (using the start timestamp of each day as key) + mapping(uint256 => uint256) public totalInvitesByDay; + + // Total invites accepted by inviter by day (using the start timestamp of each day as key) + mapping(address => mapping(uint256 => uint256)) public totalInvitesByInviterByDay; + + error UserAlreadyVerified(); + error UserNotVerified(); + error UnrecognizedInvitation(); + error IndexOutOfBounds(); + error CanNotInviteYourself(); + + event UserVerified(address indexed userAddress, uint256 verifiedAt, uint256 unix_timestamp); + event InvitationAccepted( + address indexed inviter, + address indexed invitee, + uint256 index, + uint256 expiration, + uint256 acceptedAt, + uint256 unix_timestamp + ); + + function _markAsVerified(address user) internal { + // Check if the user is already verified + if (userVerificationTimestamps[user] > 0) revert UserAlreadyVerified(); + + userVerificationTimestamps[user] = block.timestamp; + emit UserVerified(user, block.timestamp, block.timestamp); + } + + function markAsVerified() external { + _markAsVerified(msg.sender); + invitationEnabled[msg.sender] = true; + } + + function updateInvitationStatus(bool value) external { + if (userVerificationTimestamps[msg.sender] == 0) revert UserNotVerified(); + invitationEnabled[msg.sender] = value; + } + + function hasBeenVerified(address userAddress) external view returns (bool) { + return userVerificationTimestamps[userAddress] > 0; + } + + function getVerifiedTimestamp(address userAddress) external view returns (uint256) { + return userVerificationTimestamps[userAddress]; + } + + function _verifySignature(address inviter, uint256 expiration, Signature calldata signature) private pure { + bytes32 payloadHash = keccak256(abi.encode(inviter, expiration)); + bytes32 messageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", payloadHash)); + + address messageSigner = ecrecover(messageHash, signature.v, signature.r, signature.s); + if (inviter != messageSigner) revert UnrecognizedInvitation(); + } + + function confirmAndAcceptInvitation(address inviter, uint256 expiration, Signature calldata signature) external { + if (inviter == msg.sender) revert CanNotInviteYourself(); + if (!invitationEnabled[inviter]) revert UnrecognizedInvitation(); + + _verifySignature(inviter, expiration, signature); + + if (expiration < block.timestamp) revert UnrecognizedInvitation(); + + acceptedInvitationsTimestamp[inviter][msg.sender] = block.timestamp; + _markAsVerified(msg.sender); + + // Add the invitee to the inviter's list + inviteeLists[inviter].push(msg.sender); + + uint256 dayStartTimestamp = (block.timestamp / 86400) * 86400; // Normalize to the start of the day + + totalInvitesByDay[dayStartTimestamp]++; + totalInvitesByInviterByDay[inviter][dayStartTimestamp]++; + + emit InvitationAccepted( + inviter, + msg.sender, + inviteeLists[inviter].length - 1, + expiration, + block.timestamp, + block.timestamp + ); + } + + function getInviteeCount(address inviter) external view returns (uint256) { + return inviteeLists[inviter].length; + } + + function getInviteeAtIndex(address inviter, uint256 index) external view returns (address) { + if (index >= inviteeLists[inviter].length) revert IndexOutOfBounds(); + return inviteeLists[inviter][index]; + } + + function getTotalInvitesOnDay(uint256 dayStartTimestamp) external view returns (uint256) { + return totalInvitesByDay[dayStartTimestamp]; + } + + function getInvitesByInviterOnDay(address inviter, uint256 dayStartTimestamp) external view returns (uint256) { + return totalInvitesByInviterByDay[inviter][dayStartTimestamp]; + } +} diff --git a/packages/zevm-app-contracts/contracts/zeta-swap/ZetaCurveSwapDemo.sol b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaCurveSwapDemo.sol new file mode 100644 index 00000000..856bc216 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaCurveSwapDemo.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol"; + +interface ICRV3 { + function exchange(uint256 i, uint256 j, uint256 dx, uint256 min_dy, bool use_eth) external returns (uint256); +} + +interface ZetaCurveSwapErrors { + error WrongGasContract(); + + error NotEnoughToPayGasFee(); + + error InvalidAddress(); +} + +contract ZetaCurveSwapDemo is zContract, ZetaCurveSwapErrors { + address public crv3pool; // gETH/tBNB/tMATIC pool + address[3] public crvZRC20s; + + constructor(address crv3pool_, address[3] memory ZRC20s_) { + if (crv3pool_ == address(0) || ZRC20s_[0] == address(0) || ZRC20s_[1] == address(0) || ZRC20s_[2] == address(0)) + revert InvalidAddress(); + crv3pool = crv3pool_; + crvZRC20s = ZRC20s_; + } + + function encode(address zrc20, address recipient, uint256 minAmountOut) public pure returns (bytes memory) { + return abi.encode(zrc20, recipient, minAmountOut); + } + + function addr2idx(address zrc20) public view returns (uint256) { + for (uint256 i = 0; i < 3; i++) { + if (crvZRC20s[i] == zrc20) { + return i; + } + } + return 18; + } + + function _doWithdrawal(address targetZRC20, uint256 amount, bytes32 receipient) private { + (address gasZRC20, uint256 gasFee) = IZRC20(targetZRC20).withdrawGasFee(); + + if (gasZRC20 != targetZRC20) revert WrongGasContract(); + if (gasFee >= amount) revert NotEnoughToPayGasFee(); + + IZRC20(targetZRC20).approve(targetZRC20, gasFee); + IZRC20(targetZRC20).withdraw(abi.encodePacked(receipient), amount - gasFee); + } + + function onCrossChainCall( + zContext calldata context, + address zrc20, + uint256 amount, + bytes calldata message + ) external override { + (address targetZRC20, bytes32 receipient, ) = abi.decode(message, (address, bytes32, uint256)); + + address[] memory path = new address[](2); + path[0] = zrc20; + path[1] = targetZRC20; + IZRC20(zrc20).approve(address(crv3pool), amount); + + uint256 i = addr2idx(zrc20); + uint256 j = addr2idx(targetZRC20); + require(i >= 0 && i < 3 && j >= 0 && j < 3 && i != j, "i,j error"); + + uint256 outAmount = ICRV3(crv3pool).exchange(i, j, amount, 0, false); + + _doWithdrawal(targetZRC20, outAmount, receipient); + } +} diff --git a/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwap.sol b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwap.sol new file mode 100644 index 00000000..35eacc04 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwap.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; + +import "../shared/SwapHelperLib.sol"; + +contract ZetaSwap is zContract { + SystemContract public immutable systemContract; + + constructor(address systemContractAddress) { + systemContract = SystemContract(systemContractAddress); + } + + modifier onlySystem() { + require(msg.sender == address(systemContract), "Only system contract can call this function"); + _; + } + + function onCrossChainCall( + zContext calldata context, + address zrc20, + uint256 amount, + bytes calldata message + ) external virtual override onlySystem { + (address targetZRC20, bytes32 receipient, uint256 minAmountOut) = abi.decode( + message, + (address, bytes32, uint256) + ); + uint256 outputAmount = SwapHelperLib._doSwap( + systemContract.wZetaContractAddress(), + systemContract.uniswapv2FactoryAddress(), + systemContract.uniswapv2Router02Address(), + zrc20, + amount, + targetZRC20, + minAmountOut + ); + SwapHelperLib._doWithdrawal(targetZRC20, outputAmount, receipient); + } +} diff --git a/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwapBtcInbound.sol b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwapBtcInbound.sol new file mode 100644 index 00000000..cd85dd00 --- /dev/null +++ b/packages/zevm-app-contracts/contracts/zeta-swap/ZetaSwapBtcInbound.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.7; + +import "@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol"; +import "@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol"; + +import "../shared/BytesHelperLib.sol"; +import "../shared/SwapHelperLib.sol"; + +contract ZetaSwapBtcInbound is zContract { + SystemContract public immutable systemContract; + + constructor(address systemContractAddress) { + systemContract = SystemContract(systemContractAddress); + } + + modifier onlySystem() { + require(msg.sender == address(systemContract), "Only system contract can call this function"); + _; + } + + function onCrossChainCall( + zContext calldata context, + address zrc20, + uint256 amount, + bytes calldata message + ) external virtual override onlySystem { + address receipient = BytesHelperLib.bytesToAddress(message, 0); + uint32 targetZRC20ChainId = BytesHelperLib.bytesToUint32(message, 20); + address targetZRC20 = systemContract.gasCoinZRC20ByChainId(targetZRC20ChainId); + + uint256 outputAmount = SwapHelperLib._doSwap( + systemContract.wZetaContractAddress(), + systemContract.uniswapv2FactoryAddress(), + systemContract.uniswapv2Router02Address(), + zrc20, + amount, + targetZRC20, + 0 + ); + SwapHelperLib._doWithdrawal(targetZRC20, outputAmount, BytesHelperLib.addressToBytes(receipient)); + } +} diff --git a/packages/zevm-app-contracts/data/addresses.json b/packages/zevm-app-contracts/data/addresses.json new file mode 100644 index 00000000..bd53a842 --- /dev/null +++ b/packages/zevm-app-contracts/data/addresses.json @@ -0,0 +1,11 @@ +{ + "zevm": { + "zeta_testnet": { + "disperse": "0x23ce409Ea60c3d75827d04D9db3d52F3af62e44d", + "rewardDistributorFactory": "0xB9dc665610CF5109cE23aBBdaAc315B41FA094c1", + "zetaSwap": "0xA8168Dc495Ed61E70f5c1941e2860050AB902cEF", + "zetaSwapBtcInbound": "0x358E2cfC0E16444Ba7D3164Bbeeb6bEA7472c559", + "invitationManager": "0x3649C03C472B698213926543456E9c21081e529d" + } + } +} \ No newline at end of file diff --git a/packages/example-contracts/hardhat.config.ts b/packages/zevm-app-contracts/hardhat.config.ts similarity index 60% rename from packages/example-contracts/hardhat.config.ts rename to packages/zevm-app-contracts/hardhat.config.ts index c39adfd8..3ac46d5e 100644 --- a/packages/example-contracts/hardhat.config.ts +++ b/packages/zevm-app-contracts/hardhat.config.ts @@ -1,11 +1,11 @@ -import "@nomiclabs/hardhat-etherscan"; +import "@nomicfoundation/hardhat-verify"; import "@nomiclabs/hardhat-waffle"; import "@typechain/hardhat"; import "hardhat-gas-reporter"; import "solidity-coverage"; import "tsconfig-paths/register"; -import { getHardhatConfigNetworks, getHardhatConfigScanners } from "@zetachain/addresses/networks"; +import { getHardhatConfigNetworks } from "@zetachain/networks"; import * as dotenv from "dotenv"; import type { HardhatUserConfig } from "hardhat/types"; @@ -14,8 +14,29 @@ dotenv.config(); const PRIVATE_KEYS = process.env.PRIVATE_KEY !== undefined ? [`0x${process.env.PRIVATE_KEY}`] : []; const config: HardhatUserConfig = { + //@ts-ignore + etherscan: { + apiKey: { + // BSC + bscTestnet: process.env.BSCSCAN_API_KEY || "", + // ETH + goerli: process.env.ETHERSCAN_API_KEY || "", + mainnet: process.env.ETHERSCAN_API_KEY || "", + }, + }, + gasReporter: { + currency: "USD", + enabled: process.env.REPORT_GAS !== undefined, + }, + networks: { + ...getHardhatConfigNetworks(), + }, solidity: { - compilers: [{ version: "0.6.6" /** For uniswap v2 */ }, { version: "0.8.9" }], + compilers: [ + { version: "0.5.10" /** For create2 factory */ }, + { version: "0.6.6" /** For uniswap v2 */ }, + { version: "0.8.7" }, + ], settings: { /** * @see {@link https://smock.readthedocs.io/en/latest/getting-started.html} @@ -27,16 +48,6 @@ const config: HardhatUserConfig = { }, }, }, - etherscan: { - ...getHardhatConfigScanners(), - }, - networks: { - ...getHardhatConfigNetworks(PRIVATE_KEYS), - }, - gasReporter: { - enabled: process.env.REPORT_GAS !== undefined, - currency: "USD", - }, }; export default config; diff --git a/packages/example-contracts/package.json b/packages/zevm-app-contracts/package.json similarity index 74% rename from packages/example-contracts/package.json rename to packages/zevm-app-contracts/package.json index 7d12cee0..53114bea 100644 --- a/packages/example-contracts/package.json +++ b/packages/zevm-app-contracts/package.json @@ -1,7 +1,19 @@ { - "name": "@zetachain/example-contracts", - "version": "0.0.1", + "name": "@zetachain/zevm-app-contracts", + "version": "0.0.2", "license": "MIT", + "private": false, + "author": "zetachain", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "files": [ + "contracts", + "data", + "scripts", + "typechain-types" + ], "scripts": { "clean": "npx hardhat clean", "compile": "npx hardhat compile", @@ -18,16 +30,15 @@ "tsc:watch": "npx tsc --watch" }, "devDependencies": { - "@defi-wonderland/smock": "^2.0.7", "hardhat-gas-reporter": "^1.0.8", "solidity-coverage": "^0.7.20", "tsconfig-paths": "^3.14.1" }, "dependencies": { - "@openzeppelin/contracts": "^4.5.0", + "@openzeppelin/contracts": "4.9.3", "@uniswap/v2-periphery": "1.1.0-beta.0", - "@zetachain/addresses": "workspace:^", - "@zetachain/protocol-contracts": "workspace:^", + "@zetachain/networks": "^4.0.0", + "@zetachain/protocol-contracts": "^4.0.1", "ethers": "5.6.8" } -} +} \ No newline at end of file diff --git a/packages/zevm-app-contracts/scripts/address.helpers.ts b/packages/zevm-app-contracts/scripts/address.helpers.ts new file mode 100644 index 00000000..6b19fac2 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/address.helpers.ts @@ -0,0 +1,39 @@ +import { networks } from "@zetachain/networks"; +import { ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import protocolAddresses from "@zetachain/protocol-contracts/dist/data/addresses.json"; +import { readFileSync, writeFileSync } from "fs"; +import { join } from "path"; + +import addresses from "../data/addresses.json"; + +export const getZEVMAppAddress = (address: string): string => { + return (addresses["zevm"] as any)["zeta_testnet"][address]; +}; + +export const getChainId = (network: ZetaProtocolNetwork): number => { + //@ts-ignore + return networks[network].chain_id; +}; + +export const getGasSymbolByNetwork = (network: ZetaProtocolNetwork): number => { + //@ts-ignore + return networks[network].gas_symbol; +}; + +export const getSystemContractAddress = () => { + return protocolAddresses["zevm"]["zeta_testnet"].systemContract; +}; + +export const saveAddress = (name: string, address: string) => { + const networkName = "zeta_testnet"; + + console.log(`Updating ${name} address on ${networkName}.`); + + const filename = join(__dirname, `../data/addresses.json`); + + const newAddresses = JSON.parse(readFileSync(filename, "utf8")); + + newAddresses["zevm"]["zeta_testnet"][name] = address; + + writeFileSync(filename, JSON.stringify(newAddresses, null, 2)); +}; diff --git a/packages/zevm-app-contracts/scripts/disperse/deploy.ts b/packages/zevm-app-contracts/scripts/disperse/deploy.ts new file mode 100644 index 00000000..28622643 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/disperse/deploy.ts @@ -0,0 +1,23 @@ +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { Disperse__factory } from "../../typechain-types"; +import { saveAddress } from "../address.helpers"; + +const networkName = network.name; + +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const DisperseFactory = (await ethers.getContractFactory("Disperse")) as Disperse__factory; + + const disperseFactory = await DisperseFactory.deploy(); + await disperseFactory.deployed(); + console.log("Disperse deployed to:", disperseFactory.address); + saveAddress("disperse", disperseFactory.address); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/add-reward.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/add-reward.ts new file mode 100644 index 00000000..aee56866 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/add-reward.ts @@ -0,0 +1,29 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { SystemContract__factory } from "../../typechain-types"; +import { getSystemContractAddress } from "../address.helpers"; +import { addReward } from "./helpers"; + +const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8 +const REWARDS_AMOUNT = parseEther("500"); +const REWARD_CONTRACT_ADDRESS = "0x0dee8b6e2d2035a798b67c68d47f941718a62263"; //@dev: change this to the address of the reward contract + +const main = async () => { + const [deployer] = await ethers.getSigners(); + const networkName = network.name; + + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const systemContractAddress = getSystemContractAddress(); + const systemContract = await SystemContract__factory.connect(systemContractAddress, deployer); + + await addReward(deployer, systemContract, REWARD_CONTRACT_ADDRESS, REWARD_DURATION, REWARDS_AMOUNT); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-default-rewards.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-default-rewards.ts new file mode 100644 index 00000000..2b4feb22 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-default-rewards.ts @@ -0,0 +1,61 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { RewardDistributorFactory__factory, SystemContract__factory } from "../../typechain-types"; +import { getSystemContractAddress, getZEVMAppAddress } from "../address.helpers"; +import { addReward, deployRewardByNetwork } from "./helpers"; + +const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8 +const REWARDS_AMOUNT = parseEther("500"); + +const main = async () => { + const [deployer] = await ethers.getSigners(); + const networkName = network.name; + + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const systemContractAddress = getSystemContractAddress(); + const systemContract = await SystemContract__factory.connect(systemContractAddress, deployer); + + const factoryContractAddress = getZEVMAppAddress("rewardDistributorFactory"); + + const rewardDistributorFactory = RewardDistributorFactory__factory.connect(factoryContractAddress, deployer); + let rewardContractAddress = ""; + // @dev: you can write your own address here to add reward to an existing contract + // rewardContractAddress = "0x0dee8b6e2d2035a798b67c68d47f941718a62263"; + rewardContractAddress = await deployRewardByNetwork( + deployer, + systemContract, + "goerli_testnet", + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); + + rewardContractAddress = await deployRewardByNetwork( + deployer, + systemContract, + "bsc_testnet", + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); + rewardContractAddress = await deployRewardByNetwork( + deployer, + systemContract, + "btc_testnet", + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); + rewardContractAddress = await deployRewardByNetwork( + deployer, + systemContract, + "mumbai_testnet", + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-token-reward.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-token-reward.ts new file mode 100644 index 00000000..2c777db4 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-token-reward.ts @@ -0,0 +1,39 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { RewardDistributorFactory__factory, SystemContract__factory } from "../../typechain-types"; +import { getSystemContractAddress, getZEVMAppAddress } from "../address.helpers"; +import { addReward, deployRewardByToken } from "./helpers"; + +const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8 +const REWARDS_AMOUNT = parseEther("500"); +const TOKEN_ADDRESS = "0x0dee8b6e2d2035a798b67c68d47f941718a62263"; + +const main = async () => { + const [deployer] = await ethers.getSigners(); + const networkName = network.name; + + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const systemContractAddress = getSystemContractAddress(); + const systemContract = await SystemContract__factory.connect(systemContractAddress, deployer); + + const factoryContractAddress = getZEVMAppAddress("rewardDistributorFactory"); + + const rewardDistributorFactory = RewardDistributorFactory__factory.connect(factoryContractAddress, deployer); + + const rewardContractAddress = await deployRewardByToken( + deployer, + systemContract, + TOKEN_ADDRESS, + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-zrc20-reward.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-zrc20-reward.ts new file mode 100644 index 00000000..ef8ff3db --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy-zrc20-reward.ts @@ -0,0 +1,39 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { RewardDistributorFactory__factory, SystemContract__factory } from "../../typechain-types"; +import { getSystemContractAddress, getZEVMAppAddress } from "../address.helpers"; +import { addReward, deployRewardByNetwork } from "./helpers"; + +const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8 +const REWARDS_AMOUNT = parseEther("500"); +const NETWORK_NAME = "goerli_testnet"; // @dev: change to your network name + +const main = async () => { + const [deployer] = await ethers.getSigners(); + const networkName = network.name; + + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const systemContractAddress = getSystemContractAddress(); + const systemContract = await SystemContract__factory.connect(systemContractAddress, deployer); + + const factoryContractAddress = getZEVMAppAddress("rewardDistributorFactory"); + + const rewardDistributorFactory = RewardDistributorFactory__factory.connect(factoryContractAddress, deployer); + + const rewardContractAddress = await deployRewardByNetwork( + deployer, + systemContract, + NETWORK_NAME, + rewardDistributorFactory + ); + await addReward(deployer, systemContract, rewardContractAddress, REWARD_DURATION, REWARDS_AMOUNT); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy.ts new file mode 100644 index 00000000..c9d33ee4 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/deploy.ts @@ -0,0 +1,30 @@ +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { RewardDistributorFactory__factory, SystemContract__factory } from "../../typechain-types"; +import { getSystemContractAddress, saveAddress } from "../address.helpers"; + +const networkName = network.name; + +const SYSTEM_CONTRACT = getSystemContractAddress(); + +async function main() { + const [deployer] = await ethers.getSigners(); + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const zetaTokenAddress = await systemContract.wZetaContractAddress(); + + const RewardDistributorFactoryFactory = (await ethers.getContractFactory( + "RewardDistributorFactory" + )) as RewardDistributorFactory__factory; + + const rewardDistributorFactory = await RewardDistributorFactoryFactory.deploy(zetaTokenAddress, SYSTEM_CONTRACT); + await rewardDistributorFactory.deployed(); + console.log("RewardDistributorFactory deployed to:", rewardDistributorFactory.address); + saveAddress("rewardDistributorFactory", rewardDistributorFactory.address); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/helpers.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/helpers.ts new file mode 100644 index 00000000..29c0748f --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/helpers.ts @@ -0,0 +1,84 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { parseEther } from "ethers/lib/utils"; + +import { + ERC20__factory, + RewardDistributor__factory, + RewardDistributorFactory, + SystemContract, +} from "../../typechain-types"; +import { getChainId } from "../address.helpers"; + +export const deployRewardByToken = async ( + deployer: SignerWithAddress, + systemContract: SystemContract, + tokenAddress: string, + rewardDistributorFactory: RewardDistributorFactory +) => { + const zetaTokenAddress = await systemContract.wZetaContractAddress(); + + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + zetaTokenAddress, + // @dev: now we send both tokens so contract calculate internaly LP address + zetaTokenAddress, + tokenAddress + ); + + const receipt = await tx.wait(); + + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + + const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any; + + console.log("RewardDistributor deployed to:", rewardDistributorContractAddress); + + return rewardDistributorContractAddress; +}; + +const getZRC20Address = async (systemContract: SystemContract, network: ZetaProtocolNetwork) => { + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + return tokenAddress; +}; + +export const deployRewardByNetwork = async ( + deployer: SignerWithAddress, + systemContract: SystemContract, + networkName: ZetaProtocolNetwork, + rewardDistributorFactory: RewardDistributorFactory +) => { + const tokenAddress = await getZRC20Address(systemContract, networkName); + const rewardContractAddress = await deployRewardByToken( + deployer, + systemContract, + tokenAddress, + rewardDistributorFactory + ); + return rewardContractAddress; +}; + +export const addReward = async ( + deployer: SignerWithAddress, + systemContract: SystemContract, + rewardDistributorContractAddress: string, + rewardAmount: BigNumber = parseEther("500"), + rewardDuration: BigNumber = BigNumber.from("604800").mul(8) // 1 week * 8 +) => { + const zetaTokenAddress = await systemContract.wZetaContractAddress(); + + const rewardDistributorContract = await RewardDistributor__factory.connect( + rewardDistributorContractAddress, + deployer + ); + + const ZETA = ERC20__factory.connect(zetaTokenAddress, deployer); + const tx = await ZETA.transfer(rewardDistributorContract.address, rewardAmount.mul(1)); + await tx.wait(); + await rewardDistributorContract.setRewardsDuration(rewardDuration); + await rewardDistributorContract.notifyRewardAmount(rewardAmount); + + console.log("Reward added to:", rewardDistributorContract.address); +}; diff --git a/packages/zevm-app-contracts/scripts/liquidity-incentives/read-rewards-data.ts b/packages/zevm-app-contracts/scripts/liquidity-incentives/read-rewards-data.ts new file mode 100644 index 00000000..78fccf1f --- /dev/null +++ b/packages/zevm-app-contracts/scripts/liquidity-incentives/read-rewards-data.ts @@ -0,0 +1,62 @@ +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { RewardDistributor__factory, RewardDistributorFactory__factory } from "../../typechain-types"; +import { getZEVMAppAddress } from "../address.helpers"; + +const networkName = network.name; + +const readRewardData = async (rewardContractAddress: string) => { + const [deployer] = await ethers.getSigners(); + const rewardDistributorContract = await RewardDistributor__factory.connect(rewardContractAddress, deployer); + + const stakingTokenA = await rewardDistributorContract.stakingTokenA(); + const stakingTokenB = await rewardDistributorContract.stakingTokenB(); + + const rewardsToken = await rewardDistributorContract.rewardsToken(); + const stakingToken = await rewardDistributorContract.stakingToken(); + const periodFinish = await rewardDistributorContract.periodFinish(); + const rewardRate = await rewardDistributorContract.rewardRate(); + const rewardsDuration = await rewardDistributorContract.rewardsDuration(); + const lastUpdateTime = await rewardDistributorContract.lastUpdateTime(); + const rewardPerTokenStored = await rewardDistributorContract.rewardPerTokenStored(); + if (rewardRate.isZero()) return; + console.table({ + contract: rewardContractAddress, + lastUpdateTime: `${lastUpdateTime.toString()}-${new Date(lastUpdateTime.toNumber() * 1000).toISOString()}`, + periodFinish: `${periodFinish.toString()}-${new Date(periodFinish.toNumber() * 1000).toISOString()}`, + rewardPerTokenStored: rewardPerTokenStored.toString(), + rewardRate: rewardRate.toString(), + rewardsDuration: rewardsDuration.toString(), + rewardsToken: rewardsToken, + stakingToken: stakingToken, + stakingTokenA, + stakingTokenB, + }); +}; + +async function main() { + const [deployer] = await ethers.getSigners(); + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const factoryContractAddress = getZEVMAppAddress("rewardDistributorFactory"); + + const rewardDistributorFactory = RewardDistributorFactory__factory.connect(factoryContractAddress, deployer); + const incentivesContractsLen = await rewardDistributorFactory.incentivesContractsLen(); + + const incentiveContracts: string[] = []; + for (let i = 0; i < incentivesContractsLen.toNumber(); i++) { + const incentiveContract = await rewardDistributorFactory.incentivesContracts(i); + incentiveContracts.push(incentiveContract); + } + + console.log("incentiveContracts", incentiveContracts); + incentiveContracts.forEach(async (incentiveContract) => { + await readRewardData(incentiveContract); + }); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/uniswap/add-liquidity-zeta-uniswap.ts b/packages/zevm-app-contracts/scripts/uniswap/add-liquidity-zeta-uniswap.ts new file mode 100644 index 00000000..ecc9cfee --- /dev/null +++ b/packages/zevm-app-contracts/scripts/uniswap/add-liquidity-zeta-uniswap.ts @@ -0,0 +1,133 @@ +import { MaxUint256 } from "@ethersproject/constants"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress, isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { ethers, network } from "hardhat"; + +import { + ERC20, + ERC20__factory, + IUniswapV2Factory__factory, + IUniswapV2Pair__factory, + IUniswapV2Router02, + SystemContract__factory, + UniswapV2Router02__factory, +} from "../../typechain-types"; +import { getChainId, getSystemContractAddress } from "../address.helpers"; +import { getNow, printReserves, sortPair } from "./uniswap.helpers"; + +const networkName = network.name; + +const SYSTEM_CONTRACT = getSystemContractAddress(); + +const BTC_TO_ADD = parseUnits("0", 8); +const ETH_TO_ADD = parseUnits("0"); +const MATIC_TO_ADD = parseUnits("0"); +const BNB_TO_ADD = parseUnits("0"); + +const ZETA_TO_ADD = parseUnits("0"); + +const addTokenEthLiquidity = async ( + tokenContract: ERC20, + tokenAmountToAdd: BigNumber, + ETHToAdd: BigNumber, + uniswapRouter: IUniswapV2Router02, + deployer: SignerWithAddress +) => { + const tx1 = await tokenContract.approve(uniswapRouter.address, MaxUint256); + await tx1.wait(); + + console.log("Uniswap approved to consume token..."); + + const tx2 = await uniswapRouter.addLiquidityETH( + tokenContract.address, + tokenAmountToAdd, + 0, + 0, + deployer.address, + (await getNow()) + 360, + { gasLimit: 10_000_000, value: ETHToAdd } + ); + await tx2.wait(); +}; + +const estimateZetaForToken = async ( + WZETAAddress: string, + uniswapFactoryAddress: string, + tokenContract: ERC20, + tokenAmountToAdd: BigNumber, + deployer: SignerWithAddress +) => { + const uniswapV2Factory = IUniswapV2Factory__factory.connect(uniswapFactoryAddress, deployer); + + const pair = sortPair(tokenContract.address, WZETAAddress); + + const poolAddress = await uniswapV2Factory.getPair(pair.TokenA, pair.TokenB); + + const pool = IUniswapV2Pair__factory.connect(poolAddress, deployer); + + const reserves = await pool.getReserves(); + + const reservesZETA = WZETAAddress < tokenContract.address ? reserves.reserve0 : reserves.reserve1; + const reservesToken = WZETAAddress > tokenContract.address ? reserves.reserve0 : reserves.reserve1; + + const ZETAValue = reservesZETA.mul(tokenAmountToAdd).div(reservesToken); + + return ZETAValue; +}; + +async function addLiquidity( + network: ZetaProtocolNetwork, + tokenAmountToAdd: BigNumber, + WZETAAddress: string, + uniswapFactoryAddress: string, + uniswapRouterAddress: string +) { + console.log(`Adding liquidity for: ${network}`); + const initLiquidityPool = !ZETA_TO_ADD.isZero(); + + const [deployer] = await ethers.getSigners(); + + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const uniswapRouter = await UniswapV2Router02__factory.connect(uniswapRouterAddress, deployer); + + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + const tokenContract = ERC20__factory.connect(tokenAddress, deployer); + + const zetaToAdd = initLiquidityPool + ? ZETA_TO_ADD + : await estimateZetaForToken(WZETAAddress, uniswapFactoryAddress, tokenContract, tokenAmountToAdd, deployer); + + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); + // await addTokenEthLiquidity(tokenContract, tokenAmountToAdd, zetaToAdd, uniswapRouter, deployer); + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); +} +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const WZETA_ADDRESS = getNonZetaAddress("weth9", networkName); + + const UNISWAP_FACTORY_ADDRESS = getNonZetaAddress("uniswapV2Factory", networkName); + + const UNISWAP_ROUTER_ADDRESS = getNonZetaAddress("uniswapV2Router02", networkName); + + if (!ETH_TO_ADD.isZero()) { + await addLiquidity("goerli_testnet", ETH_TO_ADD, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!MATIC_TO_ADD.isZero()) { + await addLiquidity("mumbai_testnet", MATIC_TO_ADD, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!BNB_TO_ADD.isZero()) { + await addLiquidity("bsc_testnet", BNB_TO_ADD, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!BTC_TO_ADD.isZero()) { + await addLiquidity("btc_testnet", BTC_TO_ADD, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/zevm-app-contracts/scripts/uniswap/remove-liquidity-zeta-uniswap.ts b/packages/zevm-app-contracts/scripts/uniswap/remove-liquidity-zeta-uniswap.ts new file mode 100644 index 00000000..3aa378c6 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/uniswap/remove-liquidity-zeta-uniswap.ts @@ -0,0 +1,99 @@ +import { MaxUint256 } from "@ethersproject/constants"; +import { formatUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress, isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { ethers, network } from "hardhat"; + +import { + ERC20, + ERC20__factory, + IUniswapV2Factory__factory, + IUniswapV2Pair, + IUniswapV2Pair__factory, + IUniswapV2Router02, + SystemContract__factory, + UniswapV2Router02__factory, +} from "../../typechain-types"; +import { getChainId, getSystemContractAddress } from "../address.helpers"; +import { getNow, printReserves, sortPair } from "./uniswap.helpers"; + +const networkName = network.name; +const SYSTEM_CONTRACT = getSystemContractAddress(); + +const removeTokenEthLiquidity = async ( + tokenContract: ERC20, + LPContract: IUniswapV2Pair, + LPAmountToRemove: BigNumber, + uniswapRouter: IUniswapV2Router02, + deployer: SignerWithAddress +) => { + const tx1 = await LPContract.approve(uniswapRouter.address, MaxUint256); + await tx1.wait(); + + console.log("Uniswap approved to consume LP..."); + + const tx2 = await uniswapRouter.removeLiquidityETH( + tokenContract.address, + LPAmountToRemove, + 0, + 0, + deployer.address, + (await getNow()) + 360, + { gasLimit: 10_000_000 } + ); + await tx2.wait(); +}; + +async function removeLiquidity( + network: ZetaProtocolNetwork, + WZETAAddress: string, + uniswapFactoryAddress: string, + uniswapRouterAddress: string +) { + console.log(`Removing liquidity for: ${network}`); + + const [deployer] = await ethers.getSigners(); + + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const uniswapV2Factory = IUniswapV2Factory__factory.connect(uniswapFactoryAddress, deployer); + const uniswapRouter = await UniswapV2Router02__factory.connect(uniswapRouterAddress, deployer); + + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + const tokenContract = ERC20__factory.connect(tokenAddress, deployer); + + const pair = sortPair(tokenAddress, WZETAAddress); + + const poolAddress = await uniswapV2Factory.getPair(pair.TokenA, pair.TokenB); + + const pool = IUniswapV2Pair__factory.connect(poolAddress, deployer); + + const LPBalance = await pool.balanceOf(deployer.address); + + console.log(`LP Balance: ${formatUnits(LPBalance, 18)} for ${poolAddress}`); + + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); + // await removeTokenEthLiquidity(tokenContract, pool, LPBalance, uniswapRouter, deployer); + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); +} +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const WZETA_ADDRESS = getNonZetaAddress("weth9", networkName); + + const UNISWAP_FACTORY_ADDRESS = getNonZetaAddress("uniswapV2Factory", networkName); + + const UNISWAP_ROUTER_ADDRESS = getNonZetaAddress("uniswapV2Router02", networkName); + + await removeLiquidity("goerli_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await removeLiquidity("mumbai_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await removeLiquidity("bsc_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await removeLiquidity("btc_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/zevm-app-contracts/scripts/uniswap/sell-token.ts b/packages/zevm-app-contracts/scripts/uniswap/sell-token.ts new file mode 100644 index 00000000..17097847 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/uniswap/sell-token.ts @@ -0,0 +1,100 @@ +import { MaxUint256 } from "@ethersproject/constants"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress, isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { ethers, network } from "hardhat"; + +import { + ERC20, + ERC20__factory, + IUniswapV2Router02, + SystemContract__factory, + UniswapV2Router02__factory, +} from "../../typechain-types"; +import { getChainId, getSystemContractAddress } from "../address.helpers"; +import { getNow, printReserves } from "./uniswap.helpers"; + +const networkName = network.name; +const SYSTEM_CONTRACT = getSystemContractAddress(); + +const BTC_TO_SELL = parseUnits("0", 8); +const ETH_TO_SELL = parseUnits("0"); +const MATIC_TO_SELL = parseUnits("0"); +const BNB_TO_SELL = parseUnits("0"); + +const swapZeta = async ( + tokenContract: ERC20, + WZETAAddress: string, + amountIn: BigNumber, + uniswapRouter: IUniswapV2Router02, + deployer: SignerWithAddress +) => { + const tx1 = await tokenContract.approve(uniswapRouter.address, MaxUint256); + await tx1.wait(); + + console.log("Uniswap approved to consume token..."); + + const tx2 = await uniswapRouter.swapExactTokensForETH( + amountIn, + 0, + [tokenContract.address, WZETAAddress], + deployer.address, + (await getNow()) + 360, + { gasLimit: 10_000_000 } + ); + await tx2.wait(); + + console.log(`Tx hash: ${tx2.hash}`); +}; + +async function sellToken( + network: ZetaProtocolNetwork, + tokenAmountToSell: BigNumber, + WZETAAddress: string, + uniswapFactoryAddress: string, + uniswapRouterAddress: string +) { + console.log(`Selling token on: ${network}`); + + const [deployer] = await ethers.getSigners(); + + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const uniswapRouter = await UniswapV2Router02__factory.connect(uniswapRouterAddress, deployer); + + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + const tokenContract = ERC20__factory.connect(tokenAddress, deployer); + + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); + // await swapZeta(tokenContract, WZETAAddress, tokenAmountToSell, uniswapRouter, deployer); + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); +} +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const WZETA_ADDRESS = getNonZetaAddress("weth9", networkName); + + const UNISWAP_FACTORY_ADDRESS = getNonZetaAddress("uniswapV2Factory", networkName); + + const UNISWAP_ROUTER_ADDRESS = getNonZetaAddress("uniswapV2Router02", networkName); + + if (!ETH_TO_SELL.isZero()) { + await sellToken("goerli_testnet", ETH_TO_SELL, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!MATIC_TO_SELL.isZero()) { + await sellToken("mumbai_testnet", MATIC_TO_SELL, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!BNB_TO_SELL.isZero()) { + await sellToken("bsc_testnet", BNB_TO_SELL, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } + if (!BTC_TO_SELL.isZero()) { + await sellToken("btc_testnet", BTC_TO_SELL, WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/zevm-app-contracts/scripts/uniswap/sell-zeta.ts b/packages/zevm-app-contracts/scripts/uniswap/sell-zeta.ts new file mode 100644 index 00000000..0a3b4a52 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/uniswap/sell-zeta.ts @@ -0,0 +1,81 @@ +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress, isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { BigNumber } from "ethers"; +import { ethers, network } from "hardhat"; + +import { + ERC20, + ERC20__factory, + IUniswapV2Router02, + SystemContract__factory, + UniswapV2Router02__factory, +} from "../../typechain-types"; +import { getChainId, getSystemContractAddress } from "../address.helpers"; +import { getNow, printReserves } from "./uniswap.helpers"; + +const networkName = network.name; +const SYSTEM_CONTRACT = getSystemContractAddress(); + +const ZETA_TO_SELL = parseUnits("0.001"); + +const swapZeta = async ( + tokenContract: ERC20, + WZETAAddress: string, + ZETAAmountToSell: BigNumber, + uniswapRouter: IUniswapV2Router02, + deployer: SignerWithAddress +) => { + const tx = await uniswapRouter.swapExactETHForTokens( + 0, + [WZETAAddress, tokenContract.address], + deployer.address, + (await getNow()) + 360, + { gasLimit: 10_000_000, value: ZETAAmountToSell } + ); + await tx.wait(); + + console.log(`Sell tx hash: ${tx.hash}`); +}; + +async function sellZeta( + network: ZetaProtocolNetwork, + WZETAAddress: string, + uniswapFactoryAddress: string, + uniswapRouterAddress: string +) { + console.log(`Sell ZETA on: ${network}`); + + const [deployer] = await ethers.getSigners(); + + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const uniswapRouter = await UniswapV2Router02__factory.connect(uniswapRouterAddress, deployer); + + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + const tokenContract = ERC20__factory.connect(tokenAddress, deployer); + + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); + // await swapZeta(tokenContract, WZETAAddress, ZETA_TO_SELL, uniswapRouter, deployer); + await printReserves(tokenContract, WZETAAddress, uniswapFactoryAddress, deployer); +} +async function main() { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const WZETA_ADDRESS = getNonZetaAddress("weth9", networkName); + + const UNISWAP_FACTORY_ADDRESS = getNonZetaAddress("uniswapV2Factory", networkName); + + const UNISWAP_ROUTER_ADDRESS = getNonZetaAddress("uniswapV2Router02", networkName); + + await sellZeta("goerli_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await sellZeta("mumbai_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await sellZeta("bsc_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); + await sellZeta("btc_testnet", WZETA_ADDRESS, UNISWAP_FACTORY_ADDRESS, UNISWAP_ROUTER_ADDRESS); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/zevm-app-contracts/scripts/uniswap/uniswap.helpers.ts b/packages/zevm-app-contracts/scripts/uniswap/uniswap.helpers.ts new file mode 100644 index 00000000..85724b7a --- /dev/null +++ b/packages/zevm-app-contracts/scripts/uniswap/uniswap.helpers.ts @@ -0,0 +1,55 @@ +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { formatUnits, parseUnits } from "ethers/lib/utils"; +import { ethers } from "hardhat"; + +import { IUniswapV2Factory__factory } from "../../typechain-types"; +import { ERC20, IUniswapV2Pair__factory } from "../../typechain-types"; + +export interface Pair { + TokenA: string; + TokenB: string; +} + +export const getNow = async () => { + const block = await ethers.provider.getBlock("latest"); + return block.timestamp; +}; + +export const sortPair = (token1: string, token2: string): Pair => { + if (token1 < token2) { + return { TokenA: token1, TokenB: token2 }; + } + return { TokenA: token2, TokenB: token1 }; +}; + +export const printReserves = async ( + tokenContract: ERC20, + WZETAAddress: string, + uniswapFactoryAddress: string, + deployer: SignerWithAddress +) => { + const uniswapV2Factory = IUniswapV2Factory__factory.connect(uniswapFactoryAddress, deployer); + + const pair = sortPair(tokenContract.address, WZETAAddress); + + const poolAddress = await uniswapV2Factory.getPair(pair.TokenA, pair.TokenB); + + const pool = IUniswapV2Pair__factory.connect(poolAddress, deployer); + + const reserves = await pool.getReserves(); + + const reservesZETA = WZETAAddress < tokenContract.address ? reserves.reserve0 : reserves.reserve1; + const reservesToken = WZETAAddress > tokenContract.address ? reserves.reserve0 : reserves.reserve1; + + const tokenDecimals = await tokenContract.decimals(); + const reservesToken18Decimals = + 18 === tokenDecimals ? reservesToken : reservesToken.mul(parseUnits("1", 18 - tokenDecimals)); + + const ratio = reservesToken18Decimals.mul(parseUnits("1")).div(reservesZETA); + + console.log( + `Reserves ZETA: ${formatUnits(reservesZETA)} / TOKEN: ${formatUnits(reservesToken18Decimals)} / Ratio ${formatUnits( + ratio + )}` + ); +}; diff --git a/packages/zevm-app-contracts/scripts/zeta-points/deploy.ts b/packages/zevm-app-contracts/scripts/zeta-points/deploy.ts new file mode 100644 index 00000000..091c5ec2 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-points/deploy.ts @@ -0,0 +1,25 @@ +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { InvitationManager__factory } from "../../typechain-types"; +import { saveAddress } from "../address.helpers"; + +const networkName = network.name; + +const invitationManager = async () => { + const InvitationManagerFactory = (await ethers.getContractFactory("InvitationManager")) as InvitationManager__factory; + const invitationManager = await InvitationManagerFactory.deploy(); + await invitationManager.deployed(); + console.log("InvitationManager deployed to:", invitationManager.address); + saveAddress("invitationManager", invitationManager.address); +}; + +const main = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + await invitationManager(); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/deploy.ts b/packages/zevm-app-contracts/scripts/zeta-swap/deploy.ts new file mode 100644 index 00000000..b0ea8ad9 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/deploy.ts @@ -0,0 +1,28 @@ +import { ethers } from "hardhat"; + +import { ZetaSwap, ZetaSwap__factory, ZetaSwapBtcInbound, ZetaSwapBtcInbound__factory } from "../../typechain-types"; +import { getSystemContractAddress, saveAddress } from "../address.helpers"; + +const main = async () => { + console.log(`Deploying ZetaSwap...`); + const SYSTEM_CONTRACT = getSystemContractAddress(); + + const Factory = (await ethers.getContractFactory("ZetaSwap")) as ZetaSwap__factory; + const contract = (await Factory.deploy(SYSTEM_CONTRACT)) as ZetaSwap; + await contract.deployed(); + + console.log("Deployed ZetaSwap. Address:", contract.address); + saveAddress("zetaSwap", contract.address); + + const FactoryBTC = (await ethers.getContractFactory("ZetaSwapBtcInbound")) as ZetaSwapBtcInbound__factory; + const contractBTC = (await FactoryBTC.deploy(SYSTEM_CONTRACT)) as ZetaSwapBtcInbound; + await contractBTC.deployed(); + + console.log("Deployed zetaSwapBtcInbound. Address:", contractBTC.address); + saveAddress("zetaSwapBtcInbound", contractBTC.address); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/get-system-data.ts b/packages/zevm-app-contracts/scripts/zeta-swap/get-system-data.ts new file mode 100644 index 00000000..ccc303cc --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/get-system-data.ts @@ -0,0 +1,38 @@ +import { ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; +import { ethers } from "hardhat"; + +import { SystemContract, SystemContract__factory } from "../../typechain-types"; +import { getChainId, getGasSymbolByNetwork, getSystemContractAddress } from "../address.helpers"; + +const getZRC20Address = async (systemContract: SystemContract, network: ZetaProtocolNetwork) => { + const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); + console.log(`${getGasSymbolByNetwork(network)}`, tokenAddress); + const tokenAddressLP = await systemContract.gasZetaPoolByChainId(getChainId(network)); + console.log(`${getGasSymbolByNetwork(network)} LP`, tokenAddressLP); +}; + +async function main() { + const [deployer] = await ethers.getSigners(); + const SYSTEM_CONTRACT = getSystemContractAddress(); + console.log(`SYSTEM CONTRACT:`, SYSTEM_CONTRACT); + + const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); + const uniswapFactoryAddress = await systemContract.uniswapv2FactoryAddress(); + console.log(`uniswapv2Factory:`, uniswapFactoryAddress); + const uniswapRouterAddress = await systemContract.uniswapv2Router02Address(); + console.log(`uniswapv2Router02:`, uniswapRouterAddress); + + const WZETAAddress = await systemContract.wZetaContractAddress(); + console.log(`WZETA:`, WZETAAddress); + await getZRC20Address(systemContract, "btc_testnet"); + await getZRC20Address(systemContract, "goerli_testnet"); + await getZRC20Address(systemContract, "bsc_testnet"); + await getZRC20Address(systemContract, "mumbai_testnet"); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/helpers.ts b/packages/zevm-app-contracts/scripts/zeta-swap/helpers.ts new file mode 100644 index 00000000..1699b08f --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/helpers.ts @@ -0,0 +1,42 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { HashZero } from "@ethersproject/constants"; +import { ethers } from "hardhat"; + +export const encodeParams = (dataTypes: any[], data: any[]) => { + const abiCoder = ethers.utils.defaultAbiCoder; + return abiCoder.encode(dataTypes, data); +}; + +export const getSwapParams = (destination: string, destinationToken: string, minOutput: BigNumber) => { + const paddedDestination = ethers.utils.hexlify(ethers.utils.zeroPad(destination, 32)); + const params = encodeParams(["address", "bytes32", "uint256"], [destinationToken, paddedDestination, minOutput]); + + return params; +}; + +export const getSwapData = (zetaSwap: string, destination: string, destinationToken: string, minOutput: BigNumber) => { + const params = getSwapParams(destination, destinationToken, minOutput); + + return `${zetaSwap}${params.slice(2)}`; +}; + +export const getBitcoinTxMemo = (zetaSwapAddress: string, destinationAddress: string, chainId: string) => { + const paddedHexChainId = ethers.utils.hexlify(Number(chainId)).slice(2).padStart(8, "0"); + const rawMemo = `${zetaSwapAddress}${destinationAddress.slice(2)}${paddedHexChainId}`; + return ethers.utils.base64.encode(rawMemo); +}; + +export const getBitcoinTxMemoForTest = (destinationAddress: string, chainId: string) => { + const paddedHexChainId = ethers.utils.hexlify(Number(chainId)).slice(2).padStart(8, "0"); + const rawMemo = `${destinationAddress.slice(2)}${paddedHexChainId}`; + + const paddedMemo = rawMemo.padEnd(HashZero.length - 2, "0"); + return `0x${paddedMemo}`; +}; + +export const getMultiOutputForTest = (destinationAddress: string) => { + const rawMemo = `${destinationAddress.slice(2)}`; + + const paddedMemo = rawMemo.padEnd(HashZero.length - 2, "0"); + return `0x${paddedMemo}`; +}; diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/send.ts b/packages/zevm-app-contracts/scripts/zeta-swap/send.ts new file mode 100644 index 00000000..55e3d45c --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/send.ts @@ -0,0 +1,25 @@ +import { parseEther } from "@ethersproject/units"; +import { getAddress, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers } from "hardhat"; +import { network } from "hardhat"; + +const main = async () => { + if (!isProtocolNetworkName(network.name)) throw new Error("Invalid network name"); + console.log(`Sending native token...`); + + const [signer] = await ethers.getSigners(); + + const tssAddress = getAddress("tss", network.name); + + const tx = await signer.sendTransaction({ + to: tssAddress, + value: parseEther("30"), + }); + + console.log("Token sent. tx:", tx.hash); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/stress-swap.ts b/packages/zevm-app-contracts/scripts/zeta-swap/stress-swap.ts new file mode 100644 index 00000000..6ea9127b --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/stress-swap.ts @@ -0,0 +1,101 @@ +/* ********************************* */ +/* How to run this script +/* To run this script you have to setup the enviroment (yarn and setup .env) and run this command +/* ZETA_NETWORK=athens npx hardhat run scripts/zeta-swap/stress-swap.ts --network "polygon-mumbai" +/* In the example we use "polygon-mumbai", that's the source network. Can be any valid source network +/* Be sure to have enough gas tokens to pay all the tx +/* This script is to stress the node but it's not optimize for real use. May fail to enquee some tx sometimes but will enquee enough to test +/* ********************************* */ + +import { BigNumber } from "@ethersproject/bignumber"; +import { formatEther, parseEther } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { + getAddress, + getZRC20Address, + isProtocolNetworkName, + ZetaProtocolNetwork, + zetaProtocolNetworks, +} from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { getZEVMAppAddress } from "../address.helpers"; +import { getSwapData } from "./helpers"; + +const networkName = network.name; + +interface SwapToChainParams { + destinationNetwork: ZetaProtocolNetwork; + nonce: number; + signer: SignerWithAddress; + tssAddress: string; + value: BigNumber; + zetaSwapAddress: string; +} + +const swapToChain = async ({ + zetaSwapAddress, + tssAddress, + signer, + destinationNetwork, + value, + nonce, +}: SwapToChainParams) => { + const data = getSwapData(zetaSwapAddress, signer.address, getZRC20Address(destinationNetwork), BigNumber.from("0")); + const tx = await signer.sendTransaction({ + data, + nonce, + to: tssAddress, + value, + }); + console.log(`tx: ${tx.hash}, nonce: ${nonce}, destinationToken: ${destinationNetwork}, value: ${formatEther(value)}`); +}; + +const main = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const swappableNetwork: ZetaProtocolNetwork = networkName; + + // @dev: bitcoin is invalid as destination + const invalidDestinations: ZetaProtocolNetwork[] = [swappableNetwork, "btc_testnet"]; + const networks = zetaProtocolNetworks.map((c) => c as ZetaProtocolNetwork); + + const destinationNetworks = networks.filter((e) => !invalidDestinations.includes(e)); + + console.log(`Swapping native token...`); + + const [signer] = await ethers.getSigners(); + + const zetaSwapAddress = getZEVMAppAddress("zetaSwap"); + + const tssAddress = getAddress("tss", swappableNetwork); + + const nonce = await signer.getTransactionCount(); + + const swapsPerNetwork = destinationNetworks.map((destinationNetwork, index) => { + const baseNonce = nonce + index * 5; + const param: SwapToChainParams = { + destinationNetwork, + nonce: baseNonce, + signer, + tssAddress, + value: parseEther("0.002"), + zetaSwapAddress, + }; + return [ + swapToChain(param), + swapToChain({ ...param, nonce: baseNonce + 1, value: parseEther("0.002") }), + swapToChain({ ...param, nonce: baseNonce + 2, value: parseEther("0.003") }), + swapToChain({ ...param, nonce: baseNonce + 3, value: parseEther("0.004") }), + swapToChain({ ...param, nonce: baseNonce + 4, value: parseEther("0.005") }), + ]; + }); + + const swaps = swapsPerNetwork.reduce((p, c) => [...p, ...c], []); + + await Promise.all(swaps); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/swap-on-zevm.ts b/packages/zevm-app-contracts/scripts/zeta-swap/swap-on-zevm.ts new file mode 100644 index 00000000..82e9ed29 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/swap-on-zevm.ts @@ -0,0 +1,54 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { parseUnits } from "@ethersproject/units"; +import { getZRC20Address, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers } from "hardhat"; +import { network } from "hardhat"; + +import { ERC20__factory, ZetaSwap__factory, ZetaSwapBtcInbound__factory } from "../../typechain-types"; +import { getZEVMAppAddress } from "../address.helpers"; +import { getSwapParams } from "./helpers"; +const networkName = network.name; + +const USE_BTC_SWAP = true; +const SAMPLE_MEMO = "0x25A92a5853702F199bb2d805Bba05d67025214A800000005"; // 0xADDRESS + FFFF chain id (05 for goerli) + +const main = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + const [signer] = await ethers.getSigners(); + + const zetaSwap = getZEVMAppAddress(USE_BTC_SWAP ? "zetaSwapBtcInbound" : "zetaSwap"); + + const amount = parseUnits("0.00001", 8); + const sourceToken = getZRC20Address("btc_testnet"); + + const zrc20Contract = ERC20__factory.connect(sourceToken, signer); + const tx0 = await zrc20Contract.transfer(zetaSwap, amount); + await tx0.wait(); + + console.log(`Swapping native token from zEVM...`); + + let params; + let zetaSwapContract; + + if (USE_BTC_SWAP) { + params = ethers.utils.arrayify(SAMPLE_MEMO); + zetaSwapContract = ZetaSwapBtcInbound__factory.connect(zetaSwap, signer); + } else { + params = getSwapParams(signer.address, getZRC20Address("goerli_testnet"), BigNumber.from("0")); + zetaSwapContract = ZetaSwap__factory.connect(zetaSwap, signer); + } + const zContextStruct = { + chainID: ethers.BigNumber.from("0"), + origin: ethers.constants.HashZero, + sender: ethers.constants.AddressZero, + }; + const tx1 = await zetaSwapContract.onCrossChainCall(zContextStruct, sourceToken, amount, params); + await tx1.wait(); + + console.log("tx:", tx1.hash); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/zeta-swap/swap.ts b/packages/zevm-app-contracts/scripts/zeta-swap/swap.ts new file mode 100644 index 00000000..2a5ced1b --- /dev/null +++ b/packages/zevm-app-contracts/scripts/zeta-swap/swap.ts @@ -0,0 +1,37 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { parseEther } from "@ethersproject/units"; +import { getAddress, getZRC20Address, isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { getZEVMAppAddress } from "../address.helpers"; +import { getSwapData } from "./helpers"; + +const main = async () => { + if (!isProtocolNetworkName(network.name)) throw new Error("Invalid network name"); + + const destinationToken = + network.name == "goerli_testnet" ? getZRC20Address("mumbai_testnet") : getZRC20Address("goerli_testnet"); + + console.log(`Swapping native token...`); + + const [signer] = await ethers.getSigners(); + + const zetaSwapAddress = getZEVMAppAddress("zetaSwap"); + + const tssAddress = getAddress("tss", network.name); + + const data = getSwapData(zetaSwapAddress, signer.address, destinationToken, BigNumber.from("0")); + + const tx = await signer.sendTransaction({ + data, + to: tssAddress, + value: parseEther("0.005"), + }); + + console.log("tx:", tx.hash); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/test/Disperse.spec.ts b/packages/zevm-app-contracts/test/Disperse.spec.ts new file mode 100644 index 00000000..3002619b --- /dev/null +++ b/packages/zevm-app-contracts/test/Disperse.spec.ts @@ -0,0 +1,105 @@ +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { expect } from "chai"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { Disperse, Disperse__factory, MockZRC20, MockZRC20__factory } from "../typechain-types"; + +describe("Disperse tests", () => { + let disperseContract: Disperse; + + let accounts: SignerWithAddress[]; + let deployer: SignerWithAddress; + + beforeEach(async () => { + [deployer, ...accounts] = await ethers.getSigners(); + + await network.provider.send("hardhat_setBalance", [deployer.address, parseUnits("1000000").toHexString()]); + + const DisperseFactory = (await ethers.getContractFactory("Disperse")) as Disperse__factory; + disperseContract = (await DisperseFactory.deploy()) as Disperse; + await disperseContract.deployed(); + }); + + describe("Disperse", () => { + it("Should disperse ETH", async () => { + const count = 500; + const amount = parseEther("0.01"); + const balance0 = await ethers.provider.getBalance(accounts[0].address); + const balance1 = await ethers.provider.getBalance(accounts[1].address); + + const bigArrayAddress = new Array(count).fill(accounts[0].address); + const bigArrayAmount = new Array(count).fill(amount); + + await disperseContract.disperseEther(bigArrayAddress, bigArrayAmount, { + value: amount.mul(count), + }); + + const balance0After = await ethers.provider.getBalance(accounts[0].address); + const balance1After = await ethers.provider.getBalance(accounts[1].address); + + expect(balance0After.sub(balance0)).to.be.eq(amount.mul(count)); + expect(balance1After.sub(balance1)).to.be.eq(0); + }); + + it("Should disperse ETH with surplus", async () => { + const amount = parseUnits("10"); + const balance0 = await ethers.provider.getBalance(accounts[0].address); + const balance1 = await ethers.provider.getBalance(accounts[1].address); + await disperseContract.disperseEther([accounts[0].address, accounts[1].address], [amount, amount.mul(2)], { + value: amount.mul(4), + }); + + const balance0After = await ethers.provider.getBalance(accounts[0].address); + const balance1After = await ethers.provider.getBalance(accounts[1].address); + + expect(balance0After.sub(balance0)).to.be.eq(amount); + expect(balance1After.sub(balance1)).to.be.eq(amount.mul(2)); + }); + + it("Should disperse token", async () => { + const MockTokenFactory = (await ethers.getContractFactory("MockZRC20")) as MockZRC20__factory; + const mockTokenContract = (await MockTokenFactory.deploy(1_000_000, "MOCK", "MOCK")) as MockZRC20; + await mockTokenContract.deployed(); + await mockTokenContract.approve(disperseContract.address, parseUnits("1000000")); + + const amount = parseUnits("10"); + const balance0 = await mockTokenContract.balanceOf(accounts[0].address); + const balance1 = await mockTokenContract.balanceOf(accounts[1].address); + await disperseContract.disperseToken( + mockTokenContract.address, + [accounts[0].address, accounts[1].address], + [amount, amount.mul(2)] + ); + + const balance0After = await mockTokenContract.balanceOf(accounts[0].address); + const balance1After = await mockTokenContract.balanceOf(accounts[1].address); + + expect(balance0After.sub(balance0)).to.be.eq(amount); + expect(balance1After.sub(balance1)).to.be.eq(amount.mul(2)); + }); + + it("Should disperse token simple", async () => { + const MockTokenFactory = (await ethers.getContractFactory("MockZRC20")) as MockZRC20__factory; + const mockTokenContract = (await MockTokenFactory.deploy(1_000_000, "MOCK", "MOCK")) as MockZRC20; + await mockTokenContract.deployed(); + await mockTokenContract.approve(disperseContract.address, parseUnits("1000000")); + + const amount = parseUnits("10"); + const balance0 = await mockTokenContract.balanceOf(accounts[0].address); + const balance1 = await mockTokenContract.balanceOf(accounts[1].address); + await disperseContract.disperseTokenSimple( + mockTokenContract.address, + [accounts[0].address, accounts[1].address], + [amount, amount.mul(2)] + ); + + const balance0After = await mockTokenContract.balanceOf(accounts[0].address); + const balance1After = await mockTokenContract.balanceOf(accounts[1].address); + + expect(balance0After.sub(balance0)).to.be.eq(amount); + expect(balance1After.sub(balance1)).to.be.eq(amount.mul(2)); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/LiquidityIncentives.spec.ts b/packages/zevm-app-contracts/test/LiquidityIncentives.spec.ts new file mode 100644 index 00000000..e4922b71 --- /dev/null +++ b/packages/zevm-app-contracts/test/LiquidityIncentives.spec.ts @@ -0,0 +1,644 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { AddressZero } from "@ethersproject/constants"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress } from "@zetachain/protocol-contracts"; +import { expect } from "chai"; +import { parseEther } from "ethers/lib/utils"; +import { ethers, network } from "hardhat"; + +import { + ERC20, + IWETH, + MockSystemContract, + MockZRC20, + RewardDistributor, + RewardDistributorFactory, + RewardDistributorFactory__factory, +} from "../typechain-types"; +import { evmSetup } from "./test.helpers"; + +const REWARD_DURATION = BigNumber.from("604800"); // 1 week +const REWARDS_AMOUNT = parseEther("1000"); +const ERROR_TOLERANCE = parseEther("0.1"); + +describe("LiquidityIncentives tests", () => { + let ZETA: IWETH; + let ZETA_ERC20: ERC20; + let ZRC20Contracts: MockZRC20[]; + let ZRC20Contract: MockZRC20; + let systemContract: MockSystemContract; + + let accounts: SignerWithAddress[]; + let deployer: SignerWithAddress; + + let rewardDistributorFactory: RewardDistributorFactory; + let rewardDistributorContract: RewardDistributor; + + const stakeToken = async (signer: SignerWithAddress, amount: BigNumber) => { + const zetaNeeded = await rewardDistributorContract.otherTokenByAmount(ZRC20Contract.address, amount); + await ZRC20Contract.transfer(signer.address, amount); + await ZETA_ERC20.transfer(signer.address, zetaNeeded); + + await ZRC20Contract.connect(signer).approve(rewardDistributorContract.address, amount); + await ZETA_ERC20.connect(signer).approve(rewardDistributorContract.address, zetaNeeded); + + return await rewardDistributorContract.connect(signer).addLiquidityAndStake(ZRC20Contract.address, amount); + }; + + const stakeZETA = async (signer: SignerWithAddress, amount: BigNumber) => { + const zetaNeeded = await rewardDistributorContract.otherTokenByAmount(ZRC20Contract.address, amount); + await ZRC20Contract.transfer(signer.address, amount); + await ZETA_ERC20.transfer(signer.address, zetaNeeded); + + await ZRC20Contract.connect(signer).approve(rewardDistributorContract.address, amount); + await ZETA_ERC20.connect(signer).approve(rewardDistributorContract.address, zetaNeeded); + + return await rewardDistributorContract.connect(signer).addLiquidityAndStake(ZETA_ERC20.address, zetaNeeded); + }; + + beforeEach(async () => { + accounts = await ethers.getSigners(); + [deployer] = accounts; + + await network.provider.send("hardhat_setBalance", [deployer.address, parseUnits("1000000").toHexString()]); + + const uniswapRouterAddr = getNonZetaAddress("uniswapV2Router02", "eth_mainnet"); + + const uniswapFactoryAddr = getNonZetaAddress("uniswapV2Factory", "eth_mainnet"); + + const wGasToken = getNonZetaAddress("weth9", "eth_mainnet"); + + ZETA = (await ethers.getContractAt("IWETH", wGasToken)) as IWETH; + ZETA_ERC20 = (await ethers.getContractAt("ERC20", wGasToken)) as ERC20; + await ZETA.deposit({ value: parseEther("10000") }); + + const evmSetupResult = await evmSetup(wGasToken, uniswapFactoryAddr, uniswapRouterAddr); + ZRC20Contracts = evmSetupResult.ZRC20Contracts; + ZRC20Contract = ZRC20Contracts[0]; + systemContract = evmSetupResult.systemContract; + + const RewardDistributorFactoryFactory = (await ethers.getContractFactory( + "RewardDistributorFactory" + )) as RewardDistributorFactory__factory; + rewardDistributorFactory = (await RewardDistributorFactoryFactory.deploy( + wGasToken, + systemContract.address + )) as RewardDistributorFactory; + await rewardDistributorFactory.deployed(); + + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + AddressZero, + ZRC20Contract.address, + AddressZero + ); + const receipt = await tx.wait(); + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event).to.not.be.undefined; + + const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any; + rewardDistributorContract = (await ethers.getContractAt( + "RewardDistributor", + rewardDistributorContractAddress + )) as RewardDistributor; + }); + + describe("LiquidityIncentives", () => { + it("Should create an incentive contract", async () => { + const uniswapv2FactoryAddress = await systemContract.uniswapv2FactoryAddress(); + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + AddressZero, + ZRC20Contract.address, + AddressZero + ); + const receipt = await tx.wait(); + + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event).to.not.be.undefined; + + const { stakingTokenA, stakingTokenB, LPStakingToken, rewardsToken, owner } = event?.args as any; + expect(stakingTokenA).to.be.eq(ZRC20Contract.address); + expect(stakingTokenB).to.be.eq(ZETA.address); + const LPTokenAddress = await systemContract.uniswapv2PairFor( + uniswapv2FactoryAddress, + ZRC20Contract.address, + ZETA.address + ); + expect(LPStakingToken).to.be.eq(LPTokenAddress); + expect(rewardsToken).to.be.eq(ZETA.address); + expect(owner).to.be.eq(deployer.address); + }); + }); + + it("Should create an incentive", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + const rewardRate = await rewardDistributorContract.rewardRate(); + expect(rewardRate).to.be.closeTo(REWARDS_AMOUNT.div(REWARD_DURATION), ERROR_TOLERANCE); + }); + + it("Should store incentive contract in registry", async () => { + const initialIncentivesContractsLen = await rewardDistributorFactory.incentivesContractsLen(); + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + AddressZero, + ZRC20Contract.address, + AddressZero + ); + const receipt = await tx.wait(); + + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event).to.not.be.undefined; + + const { rewardDistributorContract } = event?.args as any; + expect(rewardDistributorContract).to.not.be.undefined; + + const finalIncentivesContractsLen = await rewardDistributorFactory.incentivesContractsLen(); + expect(initialIncentivesContractsLen).to.be.eq(finalIncentivesContractsLen.sub(1)); + const incentivesContract = await rewardDistributorFactory.incentivesContracts(finalIncentivesContractsLen.sub(1)); + expect(incentivesContract).to.be.eq(rewardDistributorContract); + }); + + it("Should calculate the token required to swap", async () => { + const zetaRequired = await rewardDistributorContract.otherTokenByAmount(ZRC20Contract.address, parseEther("10")); + const tokenRequired = await rewardDistributorContract.otherTokenByAmount(ZETA.address, parseEther("10")); + // @dev This validation works because we create all the liquidity for this test with 1 ZETA:2 Token ratio (see addZetaEthLiquidity) + expect(zetaRequired).to.be.closeTo(parseEther("5"), ERROR_TOLERANCE); + expect(tokenRequired).to.be.closeTo(parseEther("20"), ERROR_TOLERANCE); + }); + + it("Should create an incentive and should be able to use it", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + const earned = await rewardDistributorContract.earned(sampleAccount.address); + expect(earned).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + }); + + it("Should create an incentive and should be able to use it reverse tokens", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeZETA(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + const earned = await rewardDistributorContract.earned(sampleAccount.address); + expect(earned).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + }); + + it("Should create an incentive and should be able to use it using stake", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + // await stakeToken(sampleAccount, stakedAmount); + const uniswapRouterAddr = getNonZetaAddress("uniswapV2Router02", "eth_mainnet"); + const zetaNeeded = await rewardDistributorContract.otherTokenByAmount(ZRC20Contract.address, stakedAmount); + await ZRC20Contract.transfer(sampleAccount.address, stakedAmount); + await ZETA_ERC20.transfer(sampleAccount.address, zetaNeeded); + + await ZRC20Contract.connect(sampleAccount).approve(uniswapRouterAddr, stakedAmount); + await ZETA_ERC20.connect(sampleAccount).approve(uniswapRouterAddr, zetaNeeded); + + const uniswapRouter = (await ethers.getContractAt("IUniswapV2Router02", uniswapRouterAddr)) as any; + const deadline = (await ethers.provider.getBlock("latest")).timestamp + 1000000; + await uniswapRouter.addLiquidity( + ZRC20Contract.address, + ZETA.address, + stakedAmount, + zetaNeeded, + 0, + 0, + sampleAccount.address, + deadline + ); + + const LPTokenAddress = await systemContract.uniswapv2PairFor( + await systemContract.uniswapv2FactoryAddress(), + ZRC20Contract.address, + ZETA.address + ); + + const ERC20Contract = (await ethers.getContractAt("ERC20", LPTokenAddress)) as any; + const LPBalance = await ERC20Contract.balanceOf(sampleAccount.address); + + await ERC20Contract.connect(sampleAccount).approve(rewardDistributorContract.address, LPBalance); + await rewardDistributorContract.connect(sampleAccount).stake(LPBalance); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + const earned = await rewardDistributorContract.earned(sampleAccount.address); + expect(earned).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + }); + + it("Should distribute rewards between two users", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount1 = accounts[1]; + const sampleAccount2 = accounts[2]; + const stakedAmount1 = parseEther("100"); + const stakedAmount2 = parseEther("100"); + + await stakeToken(sampleAccount1, stakedAmount1); + await stakeToken(sampleAccount2, stakedAmount2); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + let earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + + let earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + + let zetaBalance = BigNumber.from(0); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.eq(0); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.eq(0); + + await rewardDistributorContract.connect(sampleAccount1).getReward(false); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.eq(0); + + await rewardDistributorContract.connect(sampleAccount2).getReward(false); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + }); + + it("Should distribute rewards between two users different proportion", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount1 = accounts[3]; + const sampleAccount2 = accounts[4]; + const stakedAmount1 = parseEther("30"); + const stakedAmount2 = parseEther("10"); + + await stakeToken(sampleAccount1, stakedAmount1); + await stakeToken(sampleAccount2, stakedAmount2); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + let earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(2).div(4).mul(3), ERROR_TOLERANCE); + + let earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(2).div(4), ERROR_TOLERANCE); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(4).mul(3), ERROR_TOLERANCE); + earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + + let zetaBalance = BigNumber.from(0); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.eq(0); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.eq(0); + + await rewardDistributorContract.connect(sampleAccount1).getReward(false); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(4).mul(3), ERROR_TOLERANCE); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.eq(0); + + await rewardDistributorContract.connect(sampleAccount2).getReward(false); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount1.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(4).mul(3), ERROR_TOLERANCE); + zetaBalance = await ZETA_ERC20.balanceOf(sampleAccount2.address); + expect(zetaBalance).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + }); + + it("Should prevent unstaking when minimum staking period has not elapsed", async () => { + const MIN_STAKING_PERIOD = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD - 2]); + await network.provider.send("evm_mine"); + + const LPStaked = await rewardDistributorContract.balanceOf(sampleAccount.address); + const withdraw = rewardDistributorContract.connect(sampleAccount).withdraw(LPStaked); + await expect(withdraw).to.be.revertedWith("MinimumStakingPeriodNotMet"); + }); + + it("Should prevent starting cool down when minimum staking period has not passed", async () => { + const MIN_STAKING_PERIOD = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD - 3]); + await network.provider.send("evm_mine"); + + const withdraw = rewardDistributorContract.connect(sampleAccount).beginCoolDown(); + await expect(withdraw).to.be.revertedWith("MinimumStakingPeriodNotMet"); + }); + + it("Should allow unstaking when minimum staking period has been fulfilled", async () => { + const MIN_STAKING_PERIOD = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD + 2]); + await network.provider.send("evm_mine"); + + await rewardDistributorContract.connect(sampleAccount).beginCoolDown(); + + const LPStaked = await rewardDistributorContract.balanceOf(sampleAccount.address); + const withdraw = rewardDistributorContract.connect(sampleAccount).withdraw(LPStaked); + await expect(withdraw).not.to.be.reverted; + }); + + it("Should prevent unstaking when minimum cool down period has not been reached", async () => { + const MIN_STAKING_PERIOD = 1000; + const MIN_COOL_DOWN = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setMinCoolDown(MIN_COOL_DOWN); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD + 2]); + await network.provider.send("evm_mine"); + + await rewardDistributorContract.connect(sampleAccount).beginCoolDown(); + + const LPStaked = await rewardDistributorContract.balanceOf(sampleAccount.address); + const withdraw = rewardDistributorContract.connect(sampleAccount).withdraw(LPStaked); + await expect(withdraw).to.be.revertedWith("MinimumStakingPeriodNotMet"); + }); + + it("Should allow unstaking when minimum cool down period has been satisfied", async () => { + const MIN_STAKING_PERIOD = 1000; + const MIN_COOL_DOWN = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setMinCoolDown(MIN_COOL_DOWN); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD + 2]); + await network.provider.send("evm_mine"); + + await rewardDistributorContract.connect(sampleAccount).beginCoolDown(); + + await network.provider.send("evm_increaseTime", [MIN_COOL_DOWN + 2]); + await network.provider.send("evm_mine"); + + const LPStaked = await rewardDistributorContract.balanceOf(sampleAccount.address); + const withdraw = rewardDistributorContract.connect(sampleAccount).withdraw(LPStaked); + await expect(withdraw).not.to.be.reverted; + }); + + it("Should prevent exit when minimum staking period has not elapsed", async () => { + const MIN_STAKING_PERIOD = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD - 2]); + await network.provider.send("evm_mine"); + + const withdraw = rewardDistributorContract.connect(sampleAccount).exit(false); + await expect(withdraw).to.be.revertedWith("MinimumStakingPeriodNotMet"); + }); + + it("Should prevent exit when minimum cool down period has not been reached", async () => { + const MIN_STAKING_PERIOD = 1000; + const MIN_COOL_DOWN = 1000; + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setMinStakingPeriod(MIN_STAKING_PERIOD); + await rewardDistributorContract.setMinCoolDown(MIN_COOL_DOWN); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount = accounts[0]; + const stakedAmount = parseEther("100"); + + await stakeToken(sampleAccount, stakedAmount); + + await network.provider.send("evm_increaseTime", [MIN_STAKING_PERIOD + 2]); + await network.provider.send("evm_mine"); + + await rewardDistributorContract.connect(sampleAccount).beginCoolDown(); + + const withdraw = rewardDistributorContract.connect(sampleAccount).exit(false); + await expect(withdraw).to.be.revertedWith("MinimumStakingPeriodNotMet"); + }); + + it("Should distribute rewards between two users using native token", async () => { + await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount1 = accounts[1]; + const sampleAccount2 = accounts[2]; + const stakedAmount1 = parseEther("100"); + const stakedAmount2 = parseEther("100"); + + await stakeToken(sampleAccount1, stakedAmount1); + await stakeToken(sampleAccount2, stakedAmount2); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + let earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + + let earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(4), ERROR_TOLERANCE); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + earned1 = await rewardDistributorContract.earned(sampleAccount1.address); + expect(earned1).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + earned2 = await rewardDistributorContract.earned(sampleAccount2.address); + expect(earned2).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + + let zetaBalance = BigNumber.from(0); + const zetaInitialBalanceAccount1 = await ethers.provider.getBalance(sampleAccount1.address); + const zetaInitialBalanceAccount2 = await ethers.provider.getBalance(sampleAccount2.address); + + await rewardDistributorContract.connect(sampleAccount1).getReward(true); + zetaBalance = await ethers.provider.getBalance(sampleAccount1.address); + expect(zetaBalance.sub(zetaInitialBalanceAccount1)).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + zetaBalance = await ethers.provider.getBalance(sampleAccount2.address); + expect(zetaBalance.sub(zetaInitialBalanceAccount2)).to.be.eq(0); + + await rewardDistributorContract.connect(sampleAccount2).getReward(true); + zetaBalance = await ethers.provider.getBalance(sampleAccount1.address); + expect(zetaBalance.sub(zetaInitialBalanceAccount1)).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + zetaBalance = await ethers.provider.getBalance(sampleAccount2.address); + expect(zetaBalance.sub(zetaInitialBalanceAccount2)).to.be.closeTo(REWARDS_AMOUNT.div(2), ERROR_TOLERANCE); + }); + + it("Should fail if rewards token is not ZETA", async () => { + const rewardToken = ZRC20Contracts[1]; + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + rewardToken.address, + ZRC20Contract.address, + AddressZero + ); + const receipt = await tx.wait(); + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event).to.not.be.undefined; + + const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any; + rewardDistributorContract = (await ethers.getContractAt( + "RewardDistributor", + rewardDistributorContractAddress + )) as RewardDistributor; + + await rewardToken.transfer(rewardDistributorContract.address, REWARDS_AMOUNT); + await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); + await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); + + const sampleAccount1 = accounts[1]; + const stakedAmount1 = parseEther("100"); + + await stakeToken(sampleAccount1, stakedAmount1); + + await network.provider.send("evm_increaseTime", [REWARD_DURATION.div(2).toNumber()]); + await network.provider.send("evm_mine"); + + const getReward = rewardDistributorContract.connect(sampleAccount1).getReward(true); + await expect(getReward).to.be.revertedWith("Reward is not a wrapped asset"); + }); + + it("Should return incentive contracts", async () => { + const rewardToken = ZRC20Contracts[1]; + const tx = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + rewardToken.address, + ZRC20Contract.address, + AddressZero + ); + const receipt = await tx.wait(); + const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event).to.not.be.undefined; + + const { rewardDistributorContract: rewardDistributorContractAddress1 } = event?.args as any; + + const tx2 = await rewardDistributorFactory.createTokenIncentive( + deployer.address, + deployer.address, + rewardToken.address, + ZRC20Contract.address, + AddressZero + ); + const receipt2 = await tx2.wait(); + const event2 = receipt2.events?.find((e) => e.event === "RewardDistributorCreated"); + expect(event2).to.not.be.undefined; + + const { rewardDistributorContract: rewardDistributorContractAddress2 } = event2?.args as any; + + // @dev: on setup is already deployed a rewardDistributorContract + const incentiveContracts = await rewardDistributorFactory.getIncentiveContracts(); + expect(incentiveContracts[1]).to.be.eq(rewardDistributorContractAddress1); + expect(incentiveContracts[2]).to.be.eq(rewardDistributorContractAddress2); + }); + + it("Should be pausable", async () => { + const paused1 = await rewardDistributorContract.paused(); + expect(paused1).to.be.false; + + await rewardDistributorContract.setPaused(true); + const paused2 = await rewardDistributorContract.paused(); + expect(paused2).to.be.true; + }); + + it("Should be pausable even the same value", async () => { + const paused1 = await rewardDistributorContract.paused(); + expect(paused1).to.be.false; + + await rewardDistributorContract.setPaused(false); + const paused2 = await rewardDistributorContract.paused(); + expect(paused2).to.be.false; + }); +}); diff --git a/packages/zevm-app-contracts/test/MultipleOutput.spec.ts b/packages/zevm-app-contracts/test/MultipleOutput.spec.ts new file mode 100644 index 00000000..fa48e54c --- /dev/null +++ b/packages/zevm-app-contracts/test/MultipleOutput.spec.ts @@ -0,0 +1,99 @@ +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress } from "@zetachain/protocol-contracts"; +import { expect } from "chai"; +import { ethers, network } from "hardhat"; + +import { getMultiOutputForTest } from "../scripts/zeta-swap/helpers"; +import { MockSystemContract, MockZRC20, ZetaMultiOutput, ZetaMultiOutput__factory } from "../typechain-types"; +import { evmSetup } from "./test.helpers"; + +describe("ZetaSwap tests", () => { + let zetaMultiOutputContract: ZetaMultiOutput; + let ZRC20Contracts: MockZRC20[]; + let systemContract: MockSystemContract; + + let accounts: SignerWithAddress[]; + let deployer: SignerWithAddress; + + beforeEach(async () => { + accounts = await ethers.getSigners(); + [deployer] = accounts; + + await network.provider.send("hardhat_setBalance", [deployer.address, parseUnits("1000000").toHexString()]); + + const uniswapRouterAddr = getNonZetaAddress("uniswapV2Router02", "eth_mainnet"); + + const uniswapFactoryAddr = getNonZetaAddress("uniswapV2Factory", "eth_mainnet"); + + const wGasToken = getNonZetaAddress("weth9", "eth_mainnet"); + + const evmSetupResult = await evmSetup(wGasToken, uniswapFactoryAddr, uniswapRouterAddr); + ZRC20Contracts = evmSetupResult.ZRC20Contracts; + systemContract = evmSetupResult.systemContract; + + const Factory = (await ethers.getContractFactory("ZetaMultiOutput")) as ZetaMultiOutput__factory; + zetaMultiOutputContract = (await Factory.deploy(systemContract.address)) as ZetaMultiOutput; + await zetaMultiOutputContract.deployed(); + + zetaMultiOutputContract.registerDestinationToken(ZRC20Contracts[0].address); + zetaMultiOutputContract.registerDestinationToken(ZRC20Contracts[1].address); + zetaMultiOutputContract.registerDestinationToken(ZRC20Contracts[2].address); + }); + + describe("ZetaMultiOutput", () => { + it("Should do transfers", async () => { + const initBalanceToken0 = await ZRC20Contracts[0].balanceOf(deployer.address); + const initBalanceToken1 = await ZRC20Contracts[1].balanceOf(deployer.address); + const initBalanceToken2 = await ZRC20Contracts[2].balanceOf(deployer.address); + + const amount = parseUnits("10"); + await ZRC20Contracts[0].transfer(systemContract.address, amount); + + const params = getMultiOutputForTest(deployer.address); + await systemContract.onCrossChainCall(zetaMultiOutputContract.address, ZRC20Contracts[0].address, amount, params); + + const endBalanceToken0 = await ZRC20Contracts[0].balanceOf(deployer.address); + const endBalanceToken1 = await ZRC20Contracts[1].balanceOf(deployer.address); + const endBalanceToken2 = await ZRC20Contracts[2].balanceOf(deployer.address); + + expect(endBalanceToken0).to.be.eq(initBalanceToken0.sub(amount)); + expect(endBalanceToken1).to.be.gt(initBalanceToken1); + expect(endBalanceToken2).to.be.gt(initBalanceToken2); + }); + + it("Should throw error if no owner try to register chain", async () => { + const zetaMultiOutputContractOtherUser = zetaMultiOutputContract.connect(accounts[1]); + await expect(zetaMultiOutputContractOtherUser.registerDestinationToken(ZRC20Contracts[2].address)).to.be.reverted; + }); + + it("Should throw error if there's no destination registered", async () => { + const Factory = (await ethers.getContractFactory("ZetaMultiOutput")) as ZetaMultiOutput__factory; + zetaMultiOutputContract = (await Factory.deploy(systemContract.address)) as ZetaMultiOutput; + await zetaMultiOutputContract.deployed(); + + const amount = parseUnits("10"); + await ZRC20Contracts[0].transfer(systemContract.address, amount); + + const params = getMultiOutputForTest(deployer.address); + await expect( + systemContract.onCrossChainCall(zetaMultiOutputContract.address, ZRC20Contracts[0].address, amount, params) + ).to.be.revertedWith("NoAvailableTransfers"); + }); + + it("Should throw error if there's no transfer to do", async () => { + const Factory = (await ethers.getContractFactory("ZetaMultiOutput")) as ZetaMultiOutput__factory; + zetaMultiOutputContract = (await Factory.deploy(systemContract.address)) as ZetaMultiOutput; + await zetaMultiOutputContract.deployed(); + zetaMultiOutputContract.registerDestinationToken(ZRC20Contracts[0].address); + + const amount = parseUnits("10"); + await ZRC20Contracts[0].transfer(systemContract.address, amount); + + const params = getMultiOutputForTest(deployer.address); + await expect( + systemContract.onCrossChainCall(zetaMultiOutputContract.address, ZRC20Contracts[0].address, amount, params) + ).to.be.revertedWith("NoAvailableTransfers"); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/Owned.spec.ts b/packages/zevm-app-contracts/test/Owned.spec.ts new file mode 100644 index 00000000..8ae9c094 --- /dev/null +++ b/packages/zevm-app-contracts/test/Owned.spec.ts @@ -0,0 +1,40 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { expect } from "chai"; +import { ethers, network } from "hardhat"; + +import { Owned, Owned__factory } from "../typechain-types"; + +describe("Disperse tests", () => { + let ownedContract: Owned; + + let accounts: SignerWithAddress[]; + let deployer: SignerWithAddress; + + beforeEach(async () => { + [deployer, ...accounts] = await ethers.getSigners(); + + await network.provider.send("hardhat_setBalance", [deployer.address, parseUnits("1000000").toHexString()]); + + const OwnedFactory = (await ethers.getContractFactory("Owned")) as Owned__factory; + ownedContract = (await OwnedFactory.deploy(deployer.address)) as Owned; + await ownedContract.deployed(); + }); + + describe("Owned", () => { + it("Should nominate and transfer", async () => { + let owner = await ownedContract.owner(); + expect(owner).to.be.eq(deployer.address); + + await ownedContract.nominateNewOwner(accounts[1].address); + owner = await ownedContract.owner(); + expect(owner).to.be.eq(deployer.address); + + await ownedContract.connect(accounts[1]).acceptOwnership(); + + owner = await ownedContract.owner(); + expect(owner).to.be.eq(accounts[1].address); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/Swap.spec.ts b/packages/zevm-app-contracts/test/Swap.spec.ts new file mode 100644 index 00000000..fd10d064 --- /dev/null +++ b/packages/zevm-app-contracts/test/Swap.spec.ts @@ -0,0 +1,82 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { getNonZetaAddress } from "@zetachain/protocol-contracts"; +import { expect } from "chai"; +import { ethers, network } from "hardhat"; + +import { getBitcoinTxMemoForTest, getSwapParams } from "../scripts/zeta-swap/helpers"; +import { + MockSystemContract, + MockZRC20, + ZetaSwap, + ZetaSwap__factory, + ZetaSwapBtcInbound, + ZetaSwapBtcInbound__factory, +} from "../typechain-types"; +import { evmSetup } from "./test.helpers"; + +describe("ZetaSwap tests", () => { + let zetaSwapContract: ZetaSwap; + let zetaSwapBTCContract: ZetaSwapBtcInbound; + let ZRC20Contracts: MockZRC20[]; + let systemContract: MockSystemContract; + + let accounts: SignerWithAddress[]; + let deployer: SignerWithAddress; + + beforeEach(async () => { + accounts = await ethers.getSigners(); + [deployer] = accounts; + + await network.provider.send("hardhat_setBalance", [deployer.address, parseUnits("1000000").toHexString()]); + + const uniswapRouterAddr = getNonZetaAddress("uniswapV2Router02", "eth_mainnet"); + + const uniswapFactoryAddr = getNonZetaAddress("uniswapV2Factory", "eth_mainnet"); + + const wGasToken = getNonZetaAddress("weth9", "eth_mainnet"); + + const evmSetupResult = await evmSetup(wGasToken, uniswapFactoryAddr, uniswapRouterAddr); + ZRC20Contracts = evmSetupResult.ZRC20Contracts; + systemContract = evmSetupResult.systemContract; + + const FactorySwap = (await ethers.getContractFactory("ZetaSwap")) as ZetaSwap__factory; + zetaSwapContract = (await FactorySwap.deploy(systemContract.address)) as ZetaSwap; + await zetaSwapContract.deployed(); + + const FactoryBTC = (await ethers.getContractFactory("ZetaSwapBtcInbound")) as ZetaSwapBtcInbound__factory; + zetaSwapBTCContract = (await FactoryBTC.deploy(systemContract.address)) as ZetaSwapBtcInbound; + await zetaSwapBTCContract.deployed(); + }); + + describe("zetaSwap", () => { + it("Should do swap", async () => { + const amount = parseUnits("10"); + await ZRC20Contracts[0].transfer(systemContract.address, amount); + + const initBalance = await ZRC20Contracts[1].balanceOf(deployer.address); + + const params = getSwapParams(deployer.address, ZRC20Contracts[1].address, BigNumber.from(0)); + await systemContract.onCrossChainCall(zetaSwapContract.address, ZRC20Contracts[0].address, amount, params); + + const endBalance = await ZRC20Contracts[1].balanceOf(deployer.address); + expect(endBalance).to.be.gt(initBalance); + }); + }); + + describe("zetaSwapBTC", () => { + it("Should do swap", async () => { + const amount = parseUnits("1"); + await ZRC20Contracts[0].transfer(systemContract.address, amount); + + const initBalance = await ZRC20Contracts[1].balanceOf(deployer.address); + + const params = getBitcoinTxMemoForTest(deployer.address, "5"); + await systemContract.onCrossChainCall(zetaSwapBTCContract.address, ZRC20Contracts[0].address, amount, params); + + const endBalance = await ZRC20Contracts[1].balanceOf(deployer.address); + expect(endBalance).to.be.gt(initBalance); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/Synthetixio/StakingRewards.ts b/packages/zevm-app-contracts/test/Synthetixio/StakingRewards.ts new file mode 100644 index 00000000..c47fedf4 --- /dev/null +++ b/packages/zevm-app-contracts/test/Synthetixio/StakingRewards.ts @@ -0,0 +1,558 @@ +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { BigNumber } from "ethers"; +import { parseEther } from "ethers/lib/utils"; +import { ethers } from "hardhat"; + +import { MockZRC20, MockZRC20__factory, StakingRewards, StakingRewards__factory } from "../../typechain-types"; + +const { assert, addSnapshotBeforeRestoreAfterEach } = require("./common"); + +const { currentTime, fastForward } = require("./utils")(); + +const toUnit = parseEther; + +const mockToken = async (acount: SignerWithAddress, name: string, symbol: string) => { + const ZRC20Factory = (await ethers.getContractFactory("MockZRC20")) as MockZRC20__factory; + const token = (await ZRC20Factory.connect(acount).deploy(parseUnits("1000000"), name, symbol)) as MockZRC20; + return token; +}; + +describe("StakingRewards", () => { + let owner: any, stakingAccount1: any, rewardsDistribution: any; + + // Synthetix is the rewardsToken + let rewardsToken: any, stakingToken: any, externalRewardsToken: any, stakingRewards: any; + + const DAY = 86400; + const ZERO_BN = BigNumber.from(0); + + addSnapshotBeforeRestoreAfterEach(); + + before(async () => { + const accounts = await ethers.getSigners(); + owner = accounts[0]; + stakingAccount1 = accounts[1]; + rewardsDistribution = accounts[2]; + + stakingToken = await mockToken(owner, "Staking Token", "STKN"); + externalRewardsToken = await mockToken(owner, "External Rewards Token", "MOAR"); + rewardsToken = await mockToken(owner, "Synthetix", "SNK"); + + const StakingRewardsFactory = (await ethers.getContractFactory("StakingRewards")) as StakingRewards__factory; + stakingRewards = (await StakingRewardsFactory.deploy( + owner.address, + rewardsDistribution.address, + rewardsToken.address, + stakingToken.address + )) as StakingRewards; + await stakingRewards.deployed(); + }); + + describe("Constructor & Settings", () => { + it("should set rewards token on constructor", async () => { + assert.equal(await stakingRewards.rewardsToken(), rewardsToken.address); + }); + + it("should staking token on constructor", async () => { + assert.equal(await stakingRewards.stakingToken(), stakingToken.address); + }); + + it("should set owner on constructor", async () => { + const ownerAddress = await stakingRewards.owner(); + assert.equal(ownerAddress, owner.address); + }); + }); + + describe("Function permissions", () => { + const rewardValue = toUnit("1.0"); + + before(async () => { + await rewardsToken.connect(owner).transfer(stakingRewards.address, rewardValue); + }); + }); + + describe("Pausable", async () => { + beforeEach(async () => { + await stakingRewards.connect(owner).setPaused(true); + }); + it("should revert calling stake() when paused", async () => { + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + + await assert.revert( + stakingRewards.connect(stakingAccount1).stake(totalToStake), + "This action cannot be performed while the contract is paused" + ); + }); + it("should not revert calling stake() when unpaused", async () => { + await stakingRewards.connect(owner).setPaused(false); + + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + }); + }); + + describe("External Rewards Recovery", () => { + const amount = toUnit("5000"); + beforeEach(async () => { + // Send ERC20 to StakingRewards Contract + await externalRewardsToken.connect(owner).transfer(stakingRewards.address, amount); + assert.bnEqual(await externalRewardsToken.balanceOf(stakingRewards.address), amount); + }); + it("only owner can call recoverERC20", async () => { + const accounts = await ethers.getSigners(); + for (let i = 0; i < accounts.length; i++) { + const account = accounts[i]; + if (account.address !== owner.address) { + await assert.revert( + stakingRewards.connect(account).recoverERC20(externalRewardsToken.address, amount), + "Only the contract owner may perform this action" + ); + } else { + await stakingRewards.connect(account).recoverERC20(externalRewardsToken.address, amount); + } + } + }); + it("should revert if recovering staking token", async () => { + await assert.revert( + stakingRewards.connect(owner).recoverERC20(stakingToken.address, amount), + "Cannot withdraw the staking token" + ); + }); + it("should retrieve external token from StakingRewards and reduce contracts balance", async () => { + await stakingRewards.connect(owner).recoverERC20(externalRewardsToken.address, amount); + assert.bnEqual(await externalRewardsToken.balanceOf(stakingRewards.address), ZERO_BN); + }); + it("should retrieve external token from StakingRewards and increase owners balance", async () => { + const ownerMOARBalanceBefore = await externalRewardsToken.balanceOf(owner.address); + + await stakingRewards.connect(owner).recoverERC20(externalRewardsToken.address, amount); + + const ownerMOARBalanceAfter = await externalRewardsToken.balanceOf(owner.address); + assert.bnEqual(ownerMOARBalanceAfter.sub(ownerMOARBalanceBefore), amount); + }); + it("should emit Recovered event", async () => { + const transaction = await stakingRewards.connect(owner).recoverERC20(externalRewardsToken.address, amount); + const receipt = await transaction.wait(); + const event = receipt.events?.find((e: any) => e.event === "Recovered"); + assert.eventEqual(event, "Recovered", { + amount: amount, + token: externalRewardsToken.address, + }); + }); + }); + + describe("lastTimeRewardApplicable()", () => { + it("should return 0", async () => { + assert.bnEqual(await stakingRewards.lastTimeRewardApplicable(), ZERO_BN); + }); + + describe("when updated", () => { + it("should equal current timestamp", async () => { + await rewardsToken.connect(owner).transfer(stakingRewards.address, toUnit("1")); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(toUnit("1")); + + const cur = await currentTime(); + const lastTimeReward = await stakingRewards.lastTimeRewardApplicable(); + + assert.equal(cur.toString(), lastTimeReward.toString()); + }); + }); + }); + + describe("rewardPerToken()", () => { + it("should return 0", async () => { + assert.bnEqual(await stakingRewards.rewardPerToken(), ZERO_BN); + }); + + it("should be > 0", async () => { + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + const totalSupply = await stakingRewards.totalSupply(); + assert.bnGt(totalSupply, ZERO_BN); + + const rewardValue = toUnit("5000.0"); + await rewardsToken.connect(owner).transfer(stakingRewards.address, rewardValue); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(rewardValue); + + await fastForward(DAY); + + const rewardPerToken = await stakingRewards.rewardPerToken(); + assert.bnGt(rewardPerToken, ZERO_BN); + }); + }); + + describe("stake()", () => { + it("staking increases staking balance", async () => { + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + + const initialStakeBal = await stakingRewards.balanceOf(stakingAccount1.address); + const initialLpBal = await stakingToken.balanceOf(stakingAccount1.address); + + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + const postStakeBal = await stakingRewards.balanceOf(stakingAccount1.address); + const postLpBal = await stakingToken.balanceOf(stakingAccount1.address); + + assert.bnLt(postLpBal, initialLpBal); + assert.bnGt(postStakeBal, initialStakeBal); + }); + + it("cannot stake 0", async () => { + await assert.revert(stakingRewards.stake("0"), "Cannot stake 0"); + }); + }); + + describe("earned()", () => { + it("should be 0 when not staking", async () => { + assert.bnEqual(await stakingRewards.earned(stakingAccount1.address), ZERO_BN); + }); + + it("should be > 0 when staking", async () => { + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + const rewardValue = toUnit("5000.0"); + await rewardsToken.connect(owner).transfer(stakingRewards.address, rewardValue); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(rewardValue); + + await fastForward(DAY); + + const earned = await stakingRewards.earned(stakingAccount1.address); + + assert.bnGt(earned, ZERO_BN); + }); + + it("rewardRate should increase if new rewards come before DURATION ends", async () => { + const totalToDistribute = toUnit("5000"); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + const rewardRateInitial = await stakingRewards.rewardRate(); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + const rewardRateLater = await stakingRewards.rewardRate(); + + assert.bnGt(rewardRateInitial, ZERO_BN); + assert.bnGt(rewardRateLater, rewardRateInitial); + }); + + it("rewards token balance should rollover after DURATION", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY * 7); + const earnedFirst = await stakingRewards.earned(stakingAccount1.address); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY * 7); + const earnedSecond = await stakingRewards.earned(stakingAccount1.address); + + assert.bnEqual(earnedSecond, earnedFirst.add(earnedFirst)); + }); + }); + + describe("getReward(false)", () => { + it("should increase rewards token balance", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY); + + const initialRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + const initialEarnedBal = await stakingRewards.earned(stakingAccount1.address); + await stakingRewards.connect(stakingAccount1).getReward(false); + const postRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + const postEarnedBal = await stakingRewards.earned(stakingAccount1.address); + + assert.bnLt(postEarnedBal, initialEarnedBal); + assert.bnGt(postRewardBal, initialRewardBal); + }); + }); + + describe("setRewardsDuration()", () => { + const sevenDays = DAY * 7; + const seventyDays = DAY * 70; + it("should increase rewards duration before starting distribution", async () => { + const defaultDuration = await stakingRewards.rewardsDuration(); + assert.bnEqual(defaultDuration, sevenDays); + + await stakingRewards.connect(owner).setRewardsDuration(seventyDays); + const newDuration = await stakingRewards.rewardsDuration(); + assert.bnEqual(newDuration, seventyDays); + }); + it("should revert when setting setRewardsDuration before the period has finished", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY); + + await assert.revert( + stakingRewards.connect(owner).setRewardsDuration(seventyDays), + "Previous rewards period must be complete before changing the duration for the new period" + ); + }); + it("should update when setting setRewardsDuration after the period has finished", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY * 8); + + const transaction = await stakingRewards.connect(owner).setRewardsDuration(seventyDays); + const receipt = await transaction.wait(); + const event = receipt.events?.find((e: any) => e.event === "RewardsDurationUpdated"); + assert.eventEqual(event, "RewardsDurationUpdated", { + newDuration: seventyDays, + }); + const newDuration = await stakingRewards.rewardsDuration(); + assert.bnEqual(newDuration, seventyDays); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + }); + + it("should update when setting setRewardsDuration after the period has finished", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY * 4); + await stakingRewards.connect(stakingAccount1).getReward(false); + await fastForward(DAY * 4); + + // New Rewards period much lower + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + const transaction = await stakingRewards.connect(owner).setRewardsDuration(seventyDays); + const receipt = await transaction.wait(); + const event = receipt.events?.find((e: any) => e.event === "RewardsDurationUpdated"); + assert.eventEqual(event, "RewardsDurationUpdated", { + newDuration: seventyDays, + }); + + const newDuration = await stakingRewards.rewardsDuration(); + assert.bnEqual(newDuration, seventyDays); + + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + await fastForward(DAY * 71); + await stakingRewards.connect(stakingAccount1).getReward(false); + }); + }); + + describe("getRewardForDuration()", () => { + it("should increase rewards token balance", async () => { + const totalToDistribute = toUnit("5000"); + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + const rewardForDuration = await stakingRewards.getRewardForDuration(); + + const duration = await stakingRewards.rewardsDuration(); + const rewardRate = await stakingRewards.rewardRate(); + + assert.bnGt(rewardForDuration, ZERO_BN); + assert.bnEqual(rewardForDuration, duration.mul(rewardRate)); + }); + }); + + describe("withdraw()", () => { + it("cannot withdraw if nothing staked", async () => { + await assert.revert( + stakingRewards.withdraw(toUnit("100")), + "Arithmetic operation underflowed or overflowed outside of an unchecked block" + ); + }); + + it("should increases lp token balance and decreases staking balance", async () => { + const totalToStake = toUnit("100"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + const initialStakingTokenBal = await stakingToken.balanceOf(stakingAccount1.address); + const initialStakeBal = await stakingRewards.balanceOf(stakingAccount1.address); + + await stakingRewards.connect(stakingAccount1).withdraw(totalToStake); + + const postStakingTokenBal = await stakingToken.balanceOf(stakingAccount1.address); + const postStakeBal = await stakingRewards.balanceOf(stakingAccount1.address); + + assert.bnEqual(postStakeBal.add(totalToStake), initialStakeBal); + assert.bnEqual(initialStakingTokenBal.add(totalToStake), postStakingTokenBal); + }); + + it("cannot withdraw 0", async () => { + await assert.revert(stakingRewards.withdraw("0"), "Cannot withdraw 0"); + }); + }); + + describe("exit(false)", () => { + it("should retrieve all earned and increase rewards bal", async () => { + const totalToStake = toUnit("100"); + const totalToDistribute = toUnit("5000"); + + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + await rewardsToken.connect(owner).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(toUnit("5000.0")); + + await fastForward(DAY); + + const initialRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + const initialEarnedBal = await stakingRewards.earned(stakingAccount1.address); + await stakingRewards.connect(stakingAccount1).exit(false); + const postRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + const postEarnedBal = await stakingRewards.earned(stakingAccount1.address); + + assert.bnLt(postEarnedBal, initialEarnedBal); + assert.bnGt(postRewardBal, initialRewardBal); + assert.bnEqual(postEarnedBal, ZERO_BN); + }); + }); + + describe("notifyRewardAmount()", () => { + let localStakingRewards: any; + + before(async () => { + const StakingRewardsFactory = (await ethers.getContractFactory("StakingRewards")) as StakingRewards__factory; + localStakingRewards = (await StakingRewardsFactory.deploy( + owner.address, + rewardsDistribution.address, + rewardsToken.address, + stakingToken.address + )) as StakingRewards; + await localStakingRewards.deployed(); + }); + + it("Reverts if the provided reward is greater than the balance.", async () => { + const rewardValue = toUnit("1000"); + await rewardsToken.connect(owner).transfer(localStakingRewards.address, rewardValue); + await assert.revert( + localStakingRewards.connect(rewardsDistribution).notifyRewardAmount(rewardValue.add(toUnit("0.1"))), + "Provided reward too high" + ); + }); + + it("Reverts if the provided reward is greater than the balance, plus rolled-over balance.", async () => { + const rewardValue = toUnit("1000"); + await rewardsToken.connect(owner).transfer(localStakingRewards.address, rewardValue); + localStakingRewards.connect(rewardsDistribution).notifyRewardAmount(rewardValue); + await rewardsToken.connect(owner).transfer(localStakingRewards.address, rewardValue); + // Now take into account any leftover quantity. + await assert.revert( + localStakingRewards.connect(rewardsDistribution).notifyRewardAmount(rewardValue.add(toUnit("0.1"))), + "Provided reward too high" + ); + }); + }); + + describe("Integration Tests", () => { + before(async () => { + // Set rewardDistribution address + await stakingRewards.connect(owner).setRewardsDistribution(rewardsDistribution.address); + assert.equal(await stakingRewards.rewardsDistribution(), rewardsDistribution.address); + }); + + it("stake and claim", async () => { + // Transfer some LP Tokens to user + const totalToStake = toUnit("500"); + await stakingToken.connect(owner).transfer(stakingAccount1.address, totalToStake); + + // Stake LP Tokens + await stakingToken.connect(stakingAccount1).approve(stakingRewards.address, totalToStake); + await stakingRewards.connect(stakingAccount1).stake(totalToStake); + + // Distribute some rewards + const totalToDistribute = toUnit("35000"); + + // Transfer Rewards to the RewardsDistribution contract address + await rewardsToken.connect(owner).transfer(rewardsDistribution.address, totalToDistribute); + await rewardsToken.connect(rewardsDistribution).transfer(stakingRewards.address, totalToDistribute); + await stakingRewards.connect(rewardsDistribution).notifyRewardAmount(totalToDistribute); + + // Period finish should be ~7 days from now + const periodFinish = await stakingRewards.periodFinish(); + const curTimestamp = await currentTime(); + assert.equal(parseInt(periodFinish.toString(), 10), curTimestamp + DAY * 7); + + // Reward duration is 7 days, so we'll + // Fastforward time by 6 days to prevent expiration + await fastForward(DAY * 6); + // Reward rate and reward per token + const rewardRate = await stakingRewards.rewardRate(); + assert.bnGt(rewardRate, ZERO_BN); + const rewardPerToken = await stakingRewards.rewardPerToken(); + assert.bnGt(rewardPerToken, ZERO_BN); + // Make sure we earned in proportion to reward per token + const rewardRewardsEarned = await stakingRewards.earned(stakingAccount1.address); + assert.bnEqual(rewardRewardsEarned, rewardPerToken.mul(totalToStake).div(toUnit("1"))); + // Make sure after withdrawing, we still have the ~amount of rewardRewards + // The two values will be a bit different as time has "passed" + const initialWithdraw = toUnit("100"); + await stakingRewards.connect(stakingAccount1).withdraw(initialWithdraw); + assert.bnEqual(initialWithdraw, await stakingToken.balanceOf(stakingAccount1.address)); + const rewardRewardsEarnedPostWithdraw = await stakingRewards.earned(stakingAccount1.address); + assert.bnClose(rewardRewardsEarned, rewardRewardsEarnedPostWithdraw, toUnit("0.1")); + // Get rewards + const initialRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + await stakingRewards.connect(stakingAccount1).getReward(false); + const postRewardRewardBal = await rewardsToken.balanceOf(stakingAccount1.address); + assert.bnGt(postRewardRewardBal, initialRewardBal); + // Exit + const preExitLPBal = await stakingToken.balanceOf(stakingAccount1.address); + await stakingRewards.connect(stakingAccount1).exit(false); + const postExitLPBal = await stakingToken.balanceOf(stakingAccount1.address); + assert.bnGt(postExitLPBal, preExitLPBal); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/Synthetixio/common.js b/packages/zevm-app-contracts/test/Synthetixio/common.js new file mode 100644 index 00000000..11ceb278 --- /dev/null +++ b/packages/zevm-app-contracts/test/Synthetixio/common.js @@ -0,0 +1,72 @@ +const { web3 } = require("hardhat"); + +const { assert } = require("chai"); + +const { + assertEventEqual, + assertEventsEqual, + assertBNEqual, + assertBNNotEqual, + assertBNClose, + assertBNGreaterEqualThan, + assertBNGreaterThan, + assertBNLessEqualThan, + assertBNLessThan, + assertDeepEqual, + assertInvalidOpcode, + assertUnitEqual, + assertUnitNotEqual, + assertRevert, + fromUnit, + takeSnapshot, + restoreSnapshot, +} = require("./utils")(); + +let lastSnapshotId; + +module.exports = { + addSnapshotBeforeRestoreAfter() { + before(async () => { + lastSnapshotId = await takeSnapshot(); + }); + + after(async () => { + await restoreSnapshot(lastSnapshotId); + }); + }, + + // And this is our test sandboxing. It snapshots and restores between each test. + // Note: if a test suite uses fastForward at all, then it MUST also use these snapshots, + // otherwise it will update the block time of the EVM and future tests that expect a + // starting timestamp will fail. + addSnapshotBeforeRestoreAfterEach() { + beforeEach(async () => { + lastSnapshotId = await takeSnapshot(); + }); + + afterEach(async () => { + await restoreSnapshot(lastSnapshotId); + }); + }, + + // So we don't have to constantly import our assert helpers everywhere + // we'll just tag them onto the assert object for easy access. + assert: Object.assign({}, assert, { + bnClose: assertBNClose, + bnEqual: assertBNEqual, + bnGt: assertBNGreaterThan, + bnGte: assertBNGreaterEqualThan, + bnLt: assertBNLessThan, + bnLte: assertBNLessEqualThan, + bnNotEqual: assertBNNotEqual, + deepEqual: assertDeepEqual, + etherEqual: assertUnitEqual, + etherNotEqual: assertUnitNotEqual, + eventEqual: assertEventEqual, + eventsEqual: assertEventsEqual, + invalidOpcode: assertInvalidOpcode, + revert: assertRevert, + unitEqual: assertUnitEqual, + unitNotEqual: assertUnitNotEqual, + }), +}; diff --git a/packages/zevm-app-contracts/test/Synthetixio/utils.js b/packages/zevm-app-contracts/test/Synthetixio/utils.js new file mode 100644 index 00000000..f2662f82 --- /dev/null +++ b/packages/zevm-app-contracts/test/Synthetixio/utils.js @@ -0,0 +1,600 @@ +const { assert } = require("chai"); + +const hardhat = require("hardhat"); +// Note: the below is hardhat internal and is subject to change +const ethers = require("ethers"); + +const BN = require("bn.js"); + +const { toBN, toWei, fromWei, hexToAscii } = require("web3-utils"); +const UNIT = toWei(new BN("1"), "ether"); + +module.exports = () => { + /** + * Sets default properties on the jsonrpc object and promisifies it so we don't have to copy/paste everywhere. + */ + const send = async (payload) => { + if (!payload.jsonrpc) payload.jsonrpc = "2.0"; + if (!payload.id) payload.id = new Date().getTime(); + result = await hardhat.network.provider.send(payload.method, payload.params); + return result; + }; + + /** + * Mines a single block in Ganache (evm_mine is non-standard) + */ + const mineBlock = () => send({ method: "evm_mine" }); + + /** + * Gets the time of the last block. + */ + const currentTime = async () => { + const { timestamp } = await hardhat.ethers.provider.getBlock("latest"); + return timestamp; + }; + + /** + * Increases the time in the EVM. + * @param seconds Number of seconds to increase the time by + */ + const fastForward = async (seconds) => { + // It's handy to be able to be able to pass big numbers in as we can just + // query them from the contract, then send them back. If not changed to + // a number, this causes much larger fast forwards than expected without error. + if (BN.isBN(seconds)) seconds = seconds.toNumber(); + + // And same with strings. + if (typeof seconds === "string") seconds = parseFloat(seconds); + + let params = { + method: "evm_increaseTime", + params: [seconds], + }; + + if (hardhat.ovm) { + params = { + method: "evm_setNextBlockTimestamp", + params: [(await currentTime()) + seconds], + }; + } + + await send(params); + + await mineBlock(); + }; + + /** + * Increases the time in the EVM to as close to a specific date as possible + * NOTE: Because this operation figures out the amount of seconds to jump then applies that to the EVM, + * sometimes the result can vary by a second or two depending on how fast or slow the local EVM is responding. + * @param time Date object representing the desired time at the end of the operation + */ + const fastForwardTo = async (time) => { + if (typeof time === "string") time = parseInt(time); + + const timestamp = await currentTime(); + const now = new Date(timestamp * 1000); + if (time < now) + throw new Error( + `Time parameter (${time}) is less than now ${now}. You can only fast forward to times in the future.` + ); + + const secondsBetween = Math.floor((time.getTime() - now.getTime()) / 1000); + + await fastForward(secondsBetween); + }; + + /** + * Takes a snapshot and returns the ID of the snapshot for restoring later. + */ + const takeSnapshot = async () => { + const result = await send({ method: "evm_snapshot" }); + await mineBlock(); + + return result; + }; + + /** + * Restores a snapshot that was previously taken with takeSnapshot + * @param id The ID that was returned when takeSnapshot was called. + */ + const restoreSnapshot = async (id) => { + await send({ + method: "evm_revert", + params: [id], + }); + await mineBlock(); + }; + + /** + * Translates an amount to our canonical unit. We happen to use 10^18, which means we can + * use the built in web3 method for convenience, but if unit ever changes in our contracts + * we should be able to update the conversion factor here. + * @param amount The amount you want to re-base to UNIT + */ + const toUnit = (amount) => toBN(toWei(amount.toString(), "ether")); + const fromUnit = (amount) => fromWei(amount, "ether"); + + /** + * Translates an amount to our canonical precise unit. We happen to use 10^27, which means we can + * use the built in web3 method for convenience, but if precise unit ever changes in our contracts + * we should be able to update the conversion factor here. + * @param amount The amount you want to re-base to PRECISE_UNIT + */ + const PRECISE_UNIT_STRING = "1000000000000000000000000000"; + const PRECISE_UNIT = toBN(PRECISE_UNIT_STRING); + + const toPreciseUnit = (amount) => { + // Code is largely lifted from the guts of web3 toWei here: + // https://github.com/ethjs/ethjs-unit/blob/master/src/index.js + const amountString = amount.toString(); + + // Is it negative? + var negative = amountString.substring(0, 1) === "-"; + if (negative) { + amount = amount.substring(1); + } + + if (amount === ".") { + throw new Error(`Error converting number ${amount} to precise unit, invalid value`); + } + + // Split it into a whole and fractional part + // eslint-disable-next-line prefer-const + let [whole, fraction, ...rest] = amount.split("."); + if (rest.length > 0) { + throw new Error(`Error converting number ${amount} to precise unit, too many decimal points`); + } + + if (!whole) { + whole = "0"; + } + if (!fraction) { + fraction = "0"; + } + if (fraction.length > PRECISE_UNIT_STRING.length - 1) { + throw new Error(`Error converting number ${amount} to precise unit, too many decimal places`); + } + + while (fraction.length < PRECISE_UNIT_STRING.length - 1) { + fraction += "0"; + } + + whole = new BN(whole); + fraction = new BN(fraction); + let result = whole.mul(PRECISE_UNIT).add(fraction); + + if (negative) { + result = result.mul(new BN("-1")); + } + + return result; + }; + + const fromPreciseUnit = (amount) => { + // Code is largely lifted from the guts of web3 fromWei here: + // https://github.com/ethjs/ethjs-unit/blob/master/src/index.js + const negative = amount.lt(new BN("0")); + + if (negative) { + amount = amount.mul(new BN("-1")); + } + + let fraction = amount.mod(PRECISE_UNIT).toString(); + + while (fraction.length < PRECISE_UNIT_STRING.length - 1) { + fraction = `0${fraction}`; + } + + // Chop zeros off the end if there are extras. + fraction = fraction.replace(/0+$/, ""); + + const whole = amount.div(PRECISE_UNIT).toString(); + let value = `${whole}${fraction === "" ? "" : `.${fraction}`}`; + + if (negative) { + value = `-${value}`; + } + + return value; + }; + + /* + * Multiplies x and y interpreting them as fixed point decimal numbers. + */ + const multiplyDecimal = (x, y, unit = UNIT) => { + const xBN = BN.isBN(x) ? x : new BN(x); + const yBN = BN.isBN(y) ? y : new BN(y); + return xBN.mul(yBN).div(unit); + }; + + /* + * Divides x and y interpreting them as fixed point decimal numbers. + */ + const divideDecimal = (x, y, unit = UNIT) => { + const xBN = BN.isBN(x) ? x : new BN(x); + const yBN = BN.isBN(y) ? y : new BN(y); + return xBN.mul(unit).div(yBN); + }; + + /* + * Multiplies x and y interpreting them as fixed point decimal numbers, + * with rounding. + */ + const multiplyDecimalRound = (x, y) => { + let result = x.mul(y).div(toUnit(0.1)); + if (result.mod(toBN(10)).gte(toBN(5))) { + result = result.add(toBN(10)); + } + return result.div(toBN(10)); + }; + + /* + * Divides x and y interpreting them as fixed point decimal numbers, + * with rounding. + */ + const divideDecimalRound = (x, y) => { + let result = x.mul(toUnit(10)).div(y); + if (result.mod(toBN(10)).gte(toBN(5))) { + result = result.add(toBN(10)); + } + return result.div(toBN(10)); + }; + + /* + * Exponentiation by squares of x^n, interpreting them as fixed point decimal numbers. + */ + const powerToDecimal = (x, n, unit = UNIT) => { + let xBN = BN.isBN(x) ? x : new BN(x); + let temp = unit; + while (n > 0) { + if (n % 2 !== 0) { + temp = temp.mul(xBN).div(unit); + } + xBN = xBN.mul(xBN).div(unit); + n = parseInt(n / 2); + } + return temp; + }; + + /** + * Convenience method to assert that an event matches a shape + * @param actualEventOrTransaction The transaction receipt, or event as returned in the event logs from web3 + * @param expectedEvent The event name you expect + * @param expectedArgs The args you expect in object notation, e.g. { newOracle: '0x...', updatedAt: '...' } + */ + const assertEventEqual = (actualEventOrTransaction, expectedEvent, expectedArgs) => { + // If they pass in a whole transaction we need to extract the first log, otherwise we already have what we need + const event = Array.isArray(actualEventOrTransaction.logs) + ? actualEventOrTransaction.logs[0] + : actualEventOrTransaction; + + if (!event) { + assert.fail(new Error("No event was generated from this transaction")); + } + + // Assert the names are the same. + assert.strictEqual(event.event, expectedEvent); + + assertDeepEqual(event.args, expectedArgs); + // Note: this means that if you don't assert args they'll pass regardless. + // Ensure you pass in all the args you need to assert on. + }; + + /** + * Converts a hex string of bytes into a UTF8 string with \0 characters (from padding) removed + */ + const bytesToString = (bytes) => { + const result = hexToAscii(bytes); + return result.replace(/\0/g, ""); + }; + + const assertEventsEqual = (transaction, ...expectedEventsAndArgs) => { + if (expectedEventsAndArgs.length % 2 > 0) + throw new Error("Please call assert.eventsEqual with names and args as pairs."); + if (expectedEventsAndArgs.length <= 2) + throw new Error("Expected events and args can be called with just assert.eventEqual as there's only one event."); + + for (let i = 0; i < expectedEventsAndArgs.length; i += 2) { + const log = transaction.logs[Math.floor(i / 2)]; + + assert.strictEqual(log.event, expectedEventsAndArgs[i], "Event name mismatch"); + assertDeepEqual(log.args, expectedEventsAndArgs[i + 1], "Event args mismatch"); + } + }; + + /** + * Convenience method to assert that two BN.js instances are equal. + * @param actualBN The BN.js instance you received + * @param expectedBN The BN.js amount you expected to receive + * @param context The description to log if we fail the assertion + */ + const assertBNEqual = (actualBN, expectedBN, context) => { + assert.strictEqual(actualBN.toString(), expectedBN.toString(), context); + }; + + /** + * Convenience method to assert that two BN.js instances are NOT equal. + * @param actualBN The BN.js instance you received + * @param expectedBN The BN.js amount you expected NOT to receive + * @param context The description to log if we fail the assertion + */ + const assertBNNotEqual = (actualBN, expectedBN) => { + assert.notStrictEqual(actualBN.toString(), expectedBN.toString(), context); + }; + + /** + * Convenience method to assert that two BN.js instances are within 100 units of each other. + * @param actualBN The BN.js instance you received + * @param expectedBN The BN.js amount you expected to receive, allowing a variance of +/- 100 units + */ + const assertBNClose = (actualBN, expectedBN, varianceParam = "10") => { + const actual = BN.isBN(actualBN) ? actualBN : new BN(actualBN.toString()); + const expected = BN.isBN(expectedBN) ? expectedBN : new BN(expectedBN.toString()); + const variance = BN.isBN(varianceParam) ? varianceParam : new BN(varianceParam.toString()); + assert.ok(actual.gte(expected.sub(variance)), `${actual} !~= ${expected} (maxVariance ${variance.toString()})`); + assert.ok(actual.lte(expected.add(variance)), `${actual} !~= ${expected} (maxVariance ${variance.toString()})`); + }; + + /** + * Convenience method to assert that the value of left operand is greater than then value of the right operand + * @param aBN The left operand BN.js instance + * @param bBN The right operand BN.js instance + */ + const assertBNGreaterThan = (aBN, bBN) => { + assert.ok(aBN.gt(bBN), `${aBN.toString()} is not greater than ${bBN.toString()}`); + }; + + /** + * Convenience method to assert that the value of left operand is greater than or equal then value of the right operand + * @param aBN The left operand BN.js instance + * @param bBN The right operand BN.js instance + */ + const assertBNGreaterEqualThan = (aBN, bBN) => { + assert.ok(aBN.gte(bBN), `${aBN.toString()} is not greater than or equal to ${bBN.toString()}`); + }; + + /** + * Convenience method to assert that the value of left operand is less than then value of the right operand + * @param aBN The left operand BN.js instance + * @param bBN The right operand BN.js instance + */ + const assertBNLessThan = (aBN, bBN) => { + assert.ok(aBN.lt(bBN), `${aBN.toString()} is not less than ${bBN.toString()}`); + }; + + /** + * Convenience method to assert that the value of left operand is less than then value of the right operand + * @param aBN The left operand BN.js instance + * @param bBN The right operand BN.js instance + */ + const assertBNLessEqualThan = (aBN, bBN) => { + assert.ok(aBN.lte(bBN), `${aBN.toString()} is not less than or equal to ${bBN.toString()}`); + }; + + /** + * Convenience method to assert that two objects or arrays which contain nested BN.js instances are equal. + * @param actual What you received + * @param expected The shape you expected + */ + const assertDeepEqual = (actual, expected, context) => { + // Check if it's a value type we can assert on straight away. + if (BN.isBN(actual) || BN.isBN(expected)) { + assertBNEqual(actual, expected, context); + } else if ( + typeof expected === "string" || + typeof actual === "string" || + typeof expected === "number" || + typeof actual === "number" || + typeof expected === "boolean" || + typeof actual === "boolean" + ) { + assert.strictEqual(actual, expected, context); + } + // Otherwise dig through the deeper object and recurse + else if (Array.isArray(expected)) { + // check lengths + let len = actual.length; + if (len === undefined) { + // If `actual` is not a real array we'll try to interpret the keys of it + // as if it secretly wants to be one. + // We take the keys that are integers as the array part, and get the `length` of that. + // This is because this method is used to check event args or view result structs + // that are shaped like {0: bla, 1: foo, blaName: bla, fooName: foo}. FML-JS + const intLike = Object.keys(actual).filter((k) => k.match(/^\d+$/g) !== null); + len = intLike.length; + } + assert.strictEqual(len, expected.length, `array length`); + // check elements + for (let i = 0; i < expected.length; i++) { + assertDeepEqual(actual[i], expected[i], `(array index: ${i}) `); + } + } else { + for (const key of Object.keys(expected)) { + assertDeepEqual(actual[key], expected[key], `(key: ${key}) `); + } + } + }; + + /** + * Convenience method to assert that an amount of ether (or other 10^18 number) was received from a contract. + * @param actualWei The value retrieved from a smart contract or wallet in wei + * @param expectedAmount The amount you expect e.g. '1' + * @param expectedUnit The unit you expect e.g. 'gwei'. Defaults to 'ether' + */ + const assertUnitEqual = (actualWei, expectedAmount, expectedUnit = "ether") => { + assertBNEqual(actualWei, toWei(expectedAmount, expectedUnit)); + }; + + /** + * Convenience method to assert that an amount of ether (or other 10^18 number) was NOT received from a contract. + * @param actualWei The value retrieved from a smart contract or wallet in wei + * @param expectedAmount The amount you expect NOT to be equal to e.g. '1' + * @param expectedUnit The unit you expect e.g. 'gwei'. Defaults to 'ether' + */ + const assertUnitNotEqual = (actualWei, expectedAmount, expectedUnit = "ether") => { + assertBNNotEqual(actualWei, toWei(expectedAmount, expectedUnit)); + }; + + /** + * Convenience method to assert that the return of the given block when invoked or promise causes a + * revert to occur, with an optional revert message. + * @param blockOrPromise The JS block (i.e. function that when invoked returns a promise) or a promise itself + * @param reason Optional reason string to search for in revert message + */ + const assertRevert = async (blockOrPromise, reason) => { + let errorCaught = false; + try { + const result = typeof blockOrPromise === "function" ? blockOrPromise() : blockOrPromise; + await result; + } catch (error) { + assert.include(error.message, "revert"); + if (reason) { + assert.include(error.message, reason); + } + errorCaught = true; + } + + assert.strictEqual(errorCaught, true, "Operation did not revert as expected"); + }; + + const assertInvalidOpcode = async (blockOrPromise) => { + let errorCaught = false; + try { + const result = typeof blockOrPromise === "function" ? blockOrPromise() : blockOrPromise; + await result; + } catch (error) { + assert.include(error.message, "invalid opcode"); + errorCaught = true; + } + + assert.strictEqual(errorCaught, true, "Operation did not cause an invalid opcode error as expected"); + }; + + /** + * Gets the ETH balance for the account address + * @param account Ethereum wallet address + */ + const getEthBalance = (account) => web3.eth.getBalance(account); + + const loadLocalUsers = () => { + return normalizeHardhatNetworkAccountsConfig(accounts).map(({ privateKey }) => ({ + private: privateKey, + public: web3.eth.accounts.privateKeyToAccount(privateKey).address, + })); + }; + + const isCompileRequired = () => { + // get last modified sol file + const latestSolTimestamp = getLatestSolTimestamp(CONTRACTS_FOLDER); + + // get last build + const { earliestCompiledTimestamp } = loadCompiledFiles({ buildPath }); + + return latestSolTimestamp > earliestCompiledTimestamp; + }; + + // create a factory to deploy mock price aggregators + const createMockAggregatorFactory = async (account) => { + const { abi, bytecode } = getCompiledArtifacts("MockAggregatorV2V3"); + return new ethers.ContractFactory(abi, bytecode, account); + }; + + // load artifacts needed for contract instances + const getCompiledArtifacts = (contract) => { + const { compiled } = loadCompiledFiles({ buildPath }); + const { + abi, + evm: { + bytecode: { object: bytecode }, + }, + } = compiled[contract]; + return { abi, bytecode }; + }; + + const setupProvider = ({ providerUrl, privateKey, publicKey }) => { + const provider = new ethers.providers.JsonRpcProvider(providerUrl); + + let wallet; + if (publicKey) { + wallet = provider.getSigner(publicKey); + wallet.address = publicKey; + } else { + wallet = new ethers.Wallet(privateKey || ethers.Wallet.createRandom().privateKey, provider); + } + + return { + provider, + wallet: wallet || undefined, + }; + }; + + const getContract = ({ + contract, + source = contract, + network = "mainnet", + useOvm = false, + deploymentPath = undefined, + wallet, + provider, + }) => { + const target = getTarget({ contract, deploymentPath, fs, network, path, useOvm }); + const sourceData = getSource({ + contract: source, + deploymentPath, + fs, + network, + path, + useOvm, + }); + + return new ethers.Contract(target.address, sourceData.abi, wallet || provider); + }; + + return { + assertBNClose, + assertBNEqual, + assertBNGreaterEqualThan, + assertBNGreaterThan, + assertBNLessEqualThan, + assertBNLessThan, + assertBNNotEqual, + assertDeepEqual, + assertEventEqual, + assertEventsEqual, + assertInvalidOpcode, + + assertRevert, + assertUnitEqual, + assertUnitNotEqual, + + bytesToString, + createMockAggregatorFactory, + + currentTime, + divideDecimal, + divideDecimalRound, + fastForward, + fastForwardTo, + fromPreciseUnit, + fromUnit, + getCompiledArtifacts, + getContract, + getEthBalance, + isCompileRequired, + loadLocalUsers, + mineBlock, + multiplyDecimal, + + multiplyDecimalRound, + powerToDecimal, + + restoreSnapshot, + setupProvider, + takeSnapshot, + toBN, + + toPreciseUnit, + toUnit, + }; +}; diff --git a/packages/zevm-app-contracts/test/test.helpers.ts b/packages/zevm-app-contracts/test/test.helpers.ts new file mode 100644 index 00000000..2039977f --- /dev/null +++ b/packages/zevm-app-contracts/test/test.helpers.ts @@ -0,0 +1,71 @@ +import { MaxUint256 } from "@ethersproject/constants"; +import { parseUnits } from "@ethersproject/units"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ethers } from "hardhat"; + +import { + MockSystemContract, + MockSystemContract__factory, + MockZRC20, + MockZRC20__factory, + UniswapV2Router02__factory, +} from "../typechain-types"; + +const addZetaEthLiquidity = async (signer: SignerWithAddress, token: MockZRC20, uniswapRouterAddr: string) => { + const block = await ethers.provider.getBlock("latest"); + + const tx1 = await token.approve(uniswapRouterAddr, MaxUint256); + await tx1.wait(); + + const uniswapRouterFork = UniswapV2Router02__factory.connect(uniswapRouterAddr, signer); + + const tx2 = await uniswapRouterFork.addLiquidityETH( + token.address, + parseUnits("2000"), + 0, + 0, + signer.address, + block.timestamp + 360, + { value: parseUnits("1000") } + ); + await tx2.wait(); +}; + +interface EvmSetupResult { + ZRC20Contracts: MockZRC20[]; + systemContract: MockSystemContract; +} + +export const evmSetup = async ( + wGasToken: string, + uniswapFactoryAddr: string, + uniswapRouterAddr: string +): Promise => { + const [signer] = await ethers.getSigners(); + + const ZRC20Factory = (await ethers.getContractFactory("MockZRC20")) as MockZRC20__factory; + + const token1Contract = (await ZRC20Factory.deploy(parseUnits("1000000"), "tBNB", "tBNB")) as MockZRC20; + const token2Contract = (await ZRC20Factory.deploy(parseUnits("1000000"), "gETH", "gETH")) as MockZRC20; + const token3Contract = (await ZRC20Factory.deploy(parseUnits("1000000"), "tMATIC", "tMATIC")) as MockZRC20; + + const ZRC20Contracts = [token1Contract, token2Contract, token3Contract]; + + const SystemContractFactory = (await ethers.getContractFactory("MockSystemContract")) as MockSystemContract__factory; + + const systemContract = (await SystemContractFactory.deploy( + wGasToken, + uniswapFactoryAddr, + uniswapRouterAddr + )) as MockSystemContract; + + await systemContract.setGasCoinZRC20(97, ZRC20Contracts[0].address); + await systemContract.setGasCoinZRC20(5, ZRC20Contracts[1].address); + await systemContract.setGasCoinZRC20(80001, ZRC20Contracts[2].address); + + await addZetaEthLiquidity(signer, ZRC20Contracts[0], uniswapRouterAddr); + await addZetaEthLiquidity(signer, ZRC20Contracts[1], uniswapRouterAddr); + await addZetaEthLiquidity(signer, ZRC20Contracts[2], uniswapRouterAddr); + + return { ZRC20Contracts, systemContract }; +}; diff --git a/packages/zevm-app-contracts/test/zeta-points/InvitationManager.ts b/packages/zevm-app-contracts/test/zeta-points/InvitationManager.ts new file mode 100644 index 00000000..0eb30a06 --- /dev/null +++ b/packages/zevm-app-contracts/test/zeta-points/InvitationManager.ts @@ -0,0 +1,169 @@ +import { expect, use } from "chai"; +import { solidity } from "ethereum-waffle"; +use(solidity); +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ethers } from "hardhat"; + +import { InvitationManager } from "../../typechain-types"; +import { getInvitationSig } from "./test.helpers"; + +describe("InvitationManager Contract test", () => { + let invitationManager: InvitationManager, + inviter: SignerWithAddress, + invitee: SignerWithAddress, + addrs: SignerWithAddress[]; + + beforeEach(async () => { + [inviter, invitee, ...addrs] = await ethers.getSigners(); + const InvitationManager = await ethers.getContractFactory("InvitationManager"); + //@ts-ignore + invitationManager = await InvitationManager.deploy(); + await invitationManager.markAsVerified(); + }); + + const getTomorrowTimestamp = async () => { + const block = await ethers.provider.getBlock("latest"); + const now = block.timestamp; + const tomorrow = now + 24 * 60 * 60; + return tomorrow; + }; + + describe("True", () => { + it("Should be true", async () => { + expect(true).to.equal(true); + }); + }); + + describe("Invitations test", () => { + it("Should verify an invitation and store it", async () => { + const expirationDate = await getTomorrowTimestamp(); + + const sig = await getInvitationSig(inviter, expirationDate); + + const hasBeenVerifiedBefore = await invitationManager.hasBeenVerified(invitee.address); + await expect(hasBeenVerifiedBefore).to.be.eq(false); + + const tx = await invitationManager + .connect(invitee) + .confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + const rec = await tx.wait(); + + const block = await ethers.provider.getBlock(rec.blockNumber); + + const invitation = await invitationManager.acceptedInvitationsTimestamp(inviter.address, invitee.address); + await expect(invitation).to.be.eq(block.timestamp); + + const invitationCount = await invitationManager.getInviteeCount(inviter.address); + await expect(invitationCount).to.be.eq(1); + + const hasBeenVerifiedAfter = await invitationManager.hasBeenVerified(invitee.address); + await expect(hasBeenVerifiedAfter).to.be.eq(true); + }); + + it("Should revert if invitation is invalid", async () => { + const expirationDate = await getTomorrowTimestamp(); + const sig = await getInvitationSig(inviter, expirationDate); + const tx = invitationManager.connect(invitee).confirmAndAcceptInvitation(addrs[0].address, expirationDate, sig); + await expect(tx).to.be.revertedWith("UnrecognizedInvitation"); + }); + + it("Should revert if invitation is expired", async () => { + const expirationDate = await getTomorrowTimestamp(); + const yesterdayTimestamp = expirationDate - 24 * 60 * 60; + const sig = await getInvitationSig(inviter, expirationDate); + const tx = invitationManager + .connect(invitee) + .confirmAndAcceptInvitation(inviter.address, yesterdayTimestamp, sig); + await expect(tx).to.be.revertedWith("UnrecognizedInvitation"); + }); + + it("Should revert if inviter has not been verified", async () => { + const expirationDate = await getTomorrowTimestamp(); + const sig = await getInvitationSig(addrs[0], expirationDate); + const tx = invitationManager.connect(invitee).confirmAndAcceptInvitation(addrs[0].address, expirationDate, sig); + await expect(tx).to.be.revertedWith("UnrecognizedInvitation"); + }); + + it("Should revert if invitation is already accepted", async () => { + const expirationDate = await getTomorrowTimestamp(); + const sig = await getInvitationSig(inviter, expirationDate); + await invitationManager.connect(invitee).confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + const tx = invitationManager.connect(invitee).confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + await expect(tx).to.be.revertedWith("UserAlreadyVerified"); + }); + + it("Should count only for today if I just accepted", async () => { + const expirationDate = await getTomorrowTimestamp(); + const sig = await getInvitationSig(inviter, expirationDate); + const tx = await invitationManager + .connect(invitee) + .confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + const rec = await tx.wait(); + + const block = await ethers.provider.getBlock(rec.blockNumber); + const now = block.timestamp; + + const invitation = await invitationManager.acceptedInvitationsTimestamp(inviter.address, invitee.address); + await expect(invitation).to.be.eq(block.timestamp); + + const invitationCount = await invitationManager.getInviteeCount(inviter.address); + await expect(invitationCount).to.be.eq(1); + + const todayTimestamp = Math.floor(now / 86400) * 86400; + const invitationCountToday = await invitationManager.getTotalInvitesOnDay(todayTimestamp); + await expect(invitationCountToday).to.be.eq(1); + + const invitationByInviterCountToday = await invitationManager.getInvitesByInviterOnDay( + inviter.address, + todayTimestamp + ); + await expect(invitationByInviterCountToday).to.be.eq(1); + + const yesterdayTimestamp = todayTimestamp - 24 * 60 * 60; + const invitationCountYesterday = await invitationManager.getTotalInvitesOnDay(yesterdayTimestamp); + await expect(invitationCountYesterday).to.be.eq(0); + + const invitationByInviterCountYesterday = await invitationManager.getInvitesByInviterOnDay( + inviter.address, + yesterdayTimestamp + ); + await expect(invitationByInviterCountYesterday).to.be.eq(0); + }); + + it("Should emit the right event when invitation is accepted", async () => { + const expirationDate = await getTomorrowTimestamp(); + const sig = await getInvitationSig(inviter, expirationDate); + + const hasBeenVerifiedBefore = await invitationManager.hasBeenVerified(invitee.address); + await expect(hasBeenVerifiedBefore).to.be.eq(false); + + const tx = await invitationManager + .connect(invitee) + .confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + const rec = await tx.wait(); + const event = rec.events?.find((e) => e.event === "InvitationAccepted"); + const block = await ethers.provider.getBlock(rec.blockNumber); + + expect(event?.args?.inviter).to.be.eq(inviter.address); + expect(event?.args?.invitee).to.be.eq(invitee.address); + expect(event?.args?.index).to.be.eq(0); + expect(event?.args?.acceptedAt).to.be.eq(block.timestamp); + const inviteeByIndex = await invitationManager.getInviteeAtIndex(inviter.address, event?.args?.index); + expect(inviteeByIndex).to.be.eq(invitee.address); + + const tx2 = await invitationManager + .connect(addrs[0]) + .confirmAndAcceptInvitation(inviter.address, expirationDate, sig); + const rec2 = await tx2.wait(); + const event2 = rec2.events?.find((e) => e.event === "InvitationAccepted"); + const block2 = await ethers.provider.getBlock(rec2.blockNumber); + + await expect(event2?.args?.inviter).to.be.eq(inviter.address); + await expect(event2?.args?.invitee).to.be.eq(addrs[0].address); + await expect(event2?.args?.index).to.be.eq(1); + await expect(event2?.args?.acceptedAt).to.be.eq(block2.timestamp); + const inviteeByIndex2 = await invitationManager.getInviteeAtIndex(inviter.address, event2?.args?.index); + expect(inviteeByIndex2).to.be.eq(addrs[0].address); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/zeta-points/UserVerificationRegistry.ts b/packages/zevm-app-contracts/test/zeta-points/UserVerificationRegistry.ts new file mode 100644 index 00000000..edd75e32 --- /dev/null +++ b/packages/zevm-app-contracts/test/zeta-points/UserVerificationRegistry.ts @@ -0,0 +1,41 @@ +import { expect, use } from "chai"; +import { solidity } from "ethereum-waffle"; +use(solidity); +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ethers } from "hardhat"; + +import { InvitationManager } from "../../typechain-types"; + +describe("UserVerificationRegistry Contract test", () => { + let invitationManager: InvitationManager, user: SignerWithAddress, addrs: SignerWithAddress[]; + + beforeEach(async () => { + [user, ...addrs] = await ethers.getSigners(); + const InvitationManagerFactory = await ethers.getContractFactory("InvitationManager"); + //@ts-ignore + invitationManager = await InvitationManagerFactory.deploy(); + }); + + describe("True", () => { + it("Should be true", async () => { + expect(true).to.equal(true); + }); + }); + + describe("Vereification test", () => { + it("Should be able to verify a wallet", async () => { + const hasBeenVerified = await invitationManager.hasBeenVerified(user.address); + expect(hasBeenVerified).to.be.false; + + const tx = await invitationManager.markAsVerified(); + const receipt = await tx.wait(); + const block = await ethers.provider.getBlock(receipt.blockNumber); + + const hasBeenVerifiedAfter = await invitationManager.hasBeenVerified(user.address); + expect(hasBeenVerifiedAfter).to.be.true; + + const verification = await invitationManager.getVerifiedTimestamp(user.address); + expect(verification).to.be.eq(block.timestamp); + }); + }); +}); diff --git a/packages/zevm-app-contracts/test/zeta-points/test.helpers.ts b/packages/zevm-app-contracts/test/zeta-points/test.helpers.ts new file mode 100644 index 00000000..f60e9a5f --- /dev/null +++ b/packages/zevm-app-contracts/test/zeta-points/test.helpers.ts @@ -0,0 +1,12 @@ +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { ethers } from "hardhat"; + +export const getInvitationSig = async (signer: SignerWithAddress, expirationDate: number) => { + const payload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [signer.address, expirationDate]); + + const payloadHash = ethers.utils.keccak256(payload); + + // This adds the message prefix + const signature = await signer.signMessage(ethers.utils.arrayify(payloadHash)); + return ethers.utils.splitSignature(signature); +}; diff --git a/packages/zevm-app-contracts/tsconfig.json b/packages/zevm-app-contracts/tsconfig.json new file mode 100644 index 00000000..066bfdb0 --- /dev/null +++ b/packages/zevm-app-contracts/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "./scripts", + "./lib", + "./test", + "./tests", + "./typechain", + "./**/*.json", + "typechain-types" + ], + "exclude": [ + "artifacts", + "cache", + "hardhat.config.ts", + ], + "compilerOptions": { + "baseUrl": ".", + } +} \ No newline at end of file diff --git a/scripts/setup-tutorial.ts b/scripts/setup-tutorial.ts new file mode 100644 index 00000000..5e56cdde --- /dev/null +++ b/scripts/setup-tutorial.ts @@ -0,0 +1,105 @@ +import { Wallet } from "ethers"; +import * as fs from "fs"; +import * as https from "https"; + +const jsonPath = "scripts/.wallet.json"; + +interface WalletConfig { + address: string; + privateKey: string; +} + +function saveEnvFiles(address: string, privateKey: string): void { + const value: string = ` +PRIVATE_KEY=${privateKey} +ZETA_NETWORK=athens +EXECUTE_PROGRAMMATICALLY=true`; + const filePaths: string[] = ["packages/example-contracts/.env", "packages/zevm-example-contracts/.env"]; + + filePaths.forEach((filePath: string) => { + fs.writeFile(filePath, value, (err: NodeJS.ErrnoException | null) => { + if (err) { + console.error(`Failed to write to file ${filePath}: ${err}`); + } else { + console.log(`Updated .env file "${filePath}".`); + } + }); + }); +} +function saveWalletFile(address: string, privateKey: string, jsonPath: string): void { + const data = `{"address": "${address}", "privateKey": "${privateKey}"}`; + + fs.access(jsonPath, (err) => { + if (err) { + // The file does not exist, so we can write to it + fs.writeFile(jsonPath, data, (err) => { + if (err) throw err; + console.log("The new wallet file has been saved!"); + }); + } else { + // The file already exists, so we do not write to it + // console.log("The file already exists!"); + } + }); +} +function callFaucet(address: string): void { + // Hit Faucet to get some testnet Zeta + console.log("Requesting testnet assets from the faucet..."); + const options: https.RequestOptions = { + hostname: "faucet.zetachain.link", + method: "GET", + path: `/eth/${address}`, + port: 443, + }; + + const req = https.request(options, (res) => { + console.log(`statusCode: ${res.statusCode}`); + + res.on("data", (d) => { + process.stdout.write(d); + }); + }); + + req.on("error", (error) => { + console.error(error); + }); + + req.end(); +} + +function createWallet(filePath: string, callback: () => void): void { + fs.access(filePath, (err) => { + if (!err) { + callback(); + } + }); +} + +async function getOrCreateWallet(filePath: string): Promise { + let wallet: Wallet; + + try { + const data = await fs.promises.readFile(filePath, "utf8"); + const walletConfig: WalletConfig = JSON.parse(data); + wallet = new Wallet(walletConfig.privateKey); + } catch (error) { + console.log("No Wallet Exists, Creating One..."); + const newWallet = Wallet.createRandom(); + const walletConfig: WalletConfig = { + address: newWallet.address, + privateKey: newWallet.privateKey, + }; + await fs.promises.writeFile(filePath, JSON.stringify(walletConfig)); + wallet = newWallet; + } + + return wallet; +} + +const wallet = getOrCreateWallet(jsonPath).then(async (wallet) => { + console.log(`Your Wallet Address: ${wallet.address}`); + console.log(`Your Private Key: ${wallet.privateKey.substring(2)}`); + saveEnvFiles(wallet.address, wallet.privateKey.substring(2)); + saveWalletFile(wallet.address, wallet.privateKey.substring(2), jsonPath); + await callFaucet(wallet.address); +}); diff --git a/scripts/slither-results/.gitkeep b/scripts/slither-results/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/scripts/slither.ts b/scripts/slither.ts new file mode 100644 index 00000000..92c0c7a2 --- /dev/null +++ b/scripts/slither.ts @@ -0,0 +1,84 @@ +import inquirer from "inquirer"; +import { execSync } from "node:child_process"; +import path from "node:path"; + +const projectRoot = path.join(__dirname, "../"); +const solcVersion = "0.8.7"; +const timestamp = Date.now(); +const packageNames = ["protocol-contracts", "example-contracts"]; + +async function getPackageName() { + let packageName; + + if (process.env.CI) { + packageName = process.argv[2]; + + if (!packageNames.includes(packageName)) { + console.error(`${packageName} is not a valid package name.`); + console.error(`Valid package names are: ${packageNames.join(", ")}`); + process.exit(1); + } + + return packageName; + } else { + packageName = await inquirer.prompt([ + { + choices: packageNames, + message: "Which set of contracts would you like to test?", + name: "contracts", + type: "list", + }, + ]); + + return packageName.contracts; + } +} + +async function getFilterPaths() { + if (process.env.CI) return ""; + + const { confirm: includeLibraries } = await inquirer.prompt([ + { + message: "Do you want to include OpenZeppelin & Uniswap libraries in this scan?", + name: "confirm", + type: "confirm", + }, + ]); + + return includeLibraries ? "" : `--filter-paths "node_modules/@openzeppelin/","node_modules/@uniswap/"`; +} + +const run = async (command: string) => { + try { + console.log("Starting -- This may take a few minutes..."); + + execSync(command, { + encoding: "utf-8", + stdio: "inherit", + }); + + console.log("Results output to the console and saved to slither-output/ in Markdown, JSON, and SARIF formats."); + } catch (error) { + console.error("Error: Docker Failed To Run"); + console.error(`${error}`); + } +}; +function runSlither(packageName: string, filterPaths: string) { + const dockerCommand = `cd /home/trufflecon/packages/${packageName} && \ + solc-select use ${solcVersion} && \ + slither --json ../../scripts/slither-results/${packageName}-${timestamp}.json \ + --sarif ../../scripts/slither-results/${packageName}-${timestamp}.sarif \ + --checklist ./ ${filterPaths} | tee ../../scripts/slither-results/${packageName}-${timestamp}.md`; + run(`docker run -v "${projectRoot}":/home/trufflecon trailofbits/eth-security-toolbox -c "${dockerCommand}"`); +} + +async function main() { + runSlither(await getPackageName(), await getFilterPaths()); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/tsconfig.json b/tsconfig.json index ce461d49..bdf8b01d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,30 @@ { "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "strict": true, + "baseUrl": ".", + "declaration": true, "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": true, "outDir": "dist", - "declaration": true, - "resolveJsonModule": true + "paths": { + "@typechain-types": [ + "typechain-types" + ] + }, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": false, + "strict": true, + "target": "es2020", + "typeRoots": [ + "@types", + "./node_modules/@types" + ] }, - "exclude": [".yarn", "node_modules"] -} + "exclude": [ + ".yarn", + "node_modules" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0774358b..773526e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,11 +5,301 @@ __metadata: version: 6 cacheKey: 8 -"@defi-wonderland/smock@npm:^2.0.7": - version: 2.0.7 - resolution: "@defi-wonderland/smock@npm:2.0.7" +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": ^7.23.4 + chalk: ^2.4.2 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5": + version: 7.23.5 + resolution: "@babel/runtime@npm:7.23.5" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 164d9802424f06908e62d29b8fd3a87db55accf82f46f964ac481dcead11ff7df8391e3696e5fa91a8ca10ea8845bf650acd730fa88cf13f8026cd8d5eec6936 + languageName: node + linkType: hard + +"@changesets/apply-release-plan@npm:^7.0.0": + version: 7.0.0 + resolution: "@changesets/apply-release-plan@npm:7.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/config": ^3.0.0 + "@changesets/get-version-range-type": ^0.4.0 + "@changesets/git": ^3.0.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + detect-indent: ^6.0.0 + fs-extra: ^7.0.1 + lodash.startcase: ^4.4.0 + outdent: ^0.5.0 + prettier: ^2.7.1 + resolve-from: ^5.0.0 + semver: ^7.5.3 + checksum: ad83f89a3d46cd5249fa960cb0324114532bd5f25e74466d181afd6661273824859d038a12ba587a5e044f9169810e4a6febbb61e23c3819b3b28c00176a8bdf + languageName: node + linkType: hard + +"@changesets/assemble-release-plan@npm:^6.0.0": + version: 6.0.0 + resolution: "@changesets/assemble-release-plan@npm:6.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.0.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + semver: ^7.5.3 + checksum: 0e6d25f25e0e3cc0e92aa8c43f5f496bae9464e2523be4ff81e31b6c9971b63bb1264821a2483c48d451d89d60af1acebe727e7f8c392ed48188a3ff26d0950e + languageName: node + linkType: hard + +"@changesets/changelog-git@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/changelog-git@npm:0.2.0" + dependencies: + "@changesets/types": ^6.0.0 + checksum: 132660f7fdabbdda00ac803cc822d6427a1a38a17a5f414e87ad32f6dc4cbef5280a147ecdc087a28dc06c8bd0762f8d6e7132d01b8a4142b59fbe1bc2177034 + languageName: node + linkType: hard + +"@changesets/cli@npm:^2.23.1": + version: 2.27.1 + resolution: "@changesets/cli@npm:2.27.1" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/apply-release-plan": ^7.0.0 + "@changesets/assemble-release-plan": ^6.0.0 + "@changesets/changelog-git": ^0.2.0 + "@changesets/config": ^3.0.0 + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.0.0 + "@changesets/get-release-plan": ^4.0.0 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/types": ^6.0.0 + "@changesets/write": ^0.3.0 + "@manypkg/get-packages": ^1.1.3 + "@types/semver": ^7.5.0 + ansi-colors: ^4.1.3 + chalk: ^2.1.0 + ci-info: ^3.7.0 + enquirer: ^2.3.0 + external-editor: ^3.1.0 + fs-extra: ^7.0.1 + human-id: ^1.0.2 + meow: ^6.0.0 + outdent: ^0.5.0 + p-limit: ^2.2.0 + preferred-pm: ^3.0.0 + resolve-from: ^5.0.0 + semver: ^7.5.3 + spawndamnit: ^2.0.0 + term-size: ^2.1.0 + tty-table: ^4.1.5 + bin: + changeset: bin.js + checksum: 0d030dec7e0ef28626082a257d57f46cdf65edb65a95f5a3511a9d298ca052388d8ab7f9a714943864eddc59148c4afb0b802a9c75b5bea45aade4c0dc7a5fa6 + languageName: node + linkType: hard + +"@changesets/config@npm:^3.0.0": + version: 3.0.0 + resolution: "@changesets/config@npm:3.0.0" + dependencies: + "@changesets/errors": ^0.2.0 + "@changesets/get-dependents-graph": ^2.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + fs-extra: ^7.0.1 + micromatch: ^4.0.2 + checksum: 31a8c37e38768cf3676d24b7d371009dd1d691f221ecf086b79f0d96dc8e95aa408cda3659eb867a14615ea38a1c2be448bf0655c7570539af57c930ca784051 + languageName: node + linkType: hard + +"@changesets/errors@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/errors@npm:0.2.0" + dependencies: + extendable-error: ^0.1.5 + checksum: 4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 + languageName: node + linkType: hard + +"@changesets/get-dependents-graph@npm:^2.0.0": + version: 2.0.0 + resolution: "@changesets/get-dependents-graph@npm:2.0.0" + dependencies: + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + chalk: ^2.1.0 + fs-extra: ^7.0.1 + semver: ^7.5.3 + checksum: 6690d3ed36e8a636bc2a985d209bd72ee1100601ccf00850ca1fbe8500af839a3f4e5bd2167858cf11383aa76360f853e481533157060ad882fb56319db3090a + languageName: node + linkType: hard + +"@changesets/get-release-plan@npm:^4.0.0": + version: 4.0.0 + resolution: "@changesets/get-release-plan@npm:4.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/assemble-release-plan": ^6.0.0 + "@changesets/config": ^3.0.0 + "@changesets/pre": ^2.0.0 + "@changesets/read": ^0.6.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + checksum: 57672c1e94f95de8ac65aac969275e0cb225f02aa86b2cef69329fff6e36ba5fde04eadeb6af36f4d8ac41a8fd329028b4df4c23c15c10fd13e026c77463d576 + languageName: node + linkType: hard + +"@changesets/get-version-range-type@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/get-version-range-type@npm:0.4.0" + checksum: 2e8c511e658e193f48de7f09522649c4cf072932f0cbe0f252a7f2703d7775b0b90b632254526338795d0658e340be9dff3879cfc8eba4534b8cd6071efff8c9 + languageName: node + linkType: hard + +"@changesets/git@npm:^3.0.0": + version: 3.0.0 + resolution: "@changesets/git@npm:3.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + is-subdir: ^1.1.1 + micromatch: ^4.0.2 + spawndamnit: ^2.0.0 + checksum: a8fa66d77302b50d5e604aca898ee813247537d23a05004637ecee4aa1579d6a2859283c099bdcf3e2b232258c93ff81dd57aa867858788e457df40118c64c2b + languageName: node + linkType: hard + +"@changesets/logger@npm:^0.1.0": + version: 0.1.0 + resolution: "@changesets/logger@npm:0.1.0" + dependencies: + chalk: ^2.1.0 + checksum: d8ef1b7caf3d2c15a9e7743b7a9462e0c2e61c76d9a5bbed5eff805afa8226117505309c6e9095001136b4f6d9ae0aba61377e53af8aa0809f1febd1b5f787f1 + languageName: node + linkType: hard + +"@changesets/parse@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/parse@npm:0.4.0" + dependencies: + "@changesets/types": ^6.0.0 + js-yaml: ^3.13.1 + checksum: 3dd970b244479746233ebd357cfff3816cf9f344ebf2cf0c7c55ce8579adfd3f506978e86ad61222dc3acf1548a2105ffdd8b3e940b3f82b225741315cee2bf0 + languageName: node + linkType: hard + +"@changesets/pre@npm:^2.0.0": + version: 2.0.0 + resolution: "@changesets/pre@npm:2.0.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/errors": ^0.2.0 + "@changesets/types": ^6.0.0 + "@manypkg/get-packages": ^1.1.3 + fs-extra: ^7.0.1 + checksum: 6a01086405f4e4ce63abb8f222de39b69a5762c9c8c8f19c0d3c72f7798248d7a152937028f1be24be1f8a4a5e47e4cb23c54bc36f979539b24a728c893caf4e + languageName: node + linkType: hard + +"@changesets/read@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/read@npm:0.6.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/git": ^3.0.0 + "@changesets/logger": ^0.1.0 + "@changesets/parse": ^0.4.0 + "@changesets/types": ^6.0.0 + chalk: ^2.1.0 + fs-extra: ^7.0.1 + p-filter: ^2.1.0 + checksum: 3da6428124b4983f6ccbdae324c73044cd6a84269bfdbaff545331042e3d6845c647613b5d8f4ffdd48bad5b791623eca2be1b507652ea47b77e136cd2e26c70 + languageName: node + linkType: hard + +"@changesets/types@npm:^4.0.1": + version: 4.1.0 + resolution: "@changesets/types@npm:4.1.0" + checksum: 72c1f58044178ca867dd9349ecc4b7c233ce3781bb03b5b72a70c3166fbbab54a2f2cb19a81f96b4649ba004442c8734569fba238be4dd737fb4624a135c6098 + languageName: node + linkType: hard + +"@changesets/types@npm:^6.0.0": + version: 6.0.0 + resolution: "@changesets/types@npm:6.0.0" + checksum: d528b5d712f62c26ea422c7d34ccf6eac57a353c0733d96716db3c796ecd9bba5d496d48b37d5d46b784dc45b69c06ce3345fa3515df981bb68456cad68e6465 + languageName: node + linkType: hard + +"@changesets/write@npm:^0.3.0": + version: 0.3.0 + resolution: "@changesets/write@npm:0.3.0" + dependencies: + "@babel/runtime": ^7.20.1 + "@changesets/types": ^6.0.0 + fs-extra: ^7.0.1 + human-id: ^1.0.2 + prettier: ^2.7.1 + checksum: 37588eb3ef2af15b3ea09d46864c994780619d20b791ea5b654801a035a3a12540c7f953e6e4f36731678615edc6d1c32f8fe174d599d3e6ce2d68263865788b + 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": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@defi-wonderland/smock@npm:^2.3.4": + version: 2.3.5 + resolution: "@defi-wonderland/smock@npm:2.3.5" dependencies: - "@nomiclabs/ethereumjs-vm": ^4.2.2 + "@nomicfoundation/ethereumjs-evm": ^1.0.0-rc.3 + "@nomicfoundation/ethereumjs-util": ^8.0.0-rc.3 + "@nomicfoundation/ethereumjs-vm": ^6.0.0-rc.3 diff: ^5.0.0 lodash.isequal: ^4.5.0 lodash.isequalwith: ^4.4.0 @@ -22,155 +312,173 @@ __metadata: "@nomiclabs/hardhat-ethers": ^2 ethers: ^5 hardhat: ^2 - checksum: 2f4aa6c4a95f889d14c02c6b6041434b5a5f1b1558344e8d613246168b89d9f60f1cc0431d5bd0123d59a779f9f3f147e05048cefdabbab0e397215bbf8d3f2a + checksum: b3c408fb43cd7b02bf6f3b3a392758944ee4d4ad9d92a5bcb595b2bdf7ebe702d052b8631afba0b408e80185b1db22d655dc63feba82365f5f1f6786eb98d859 languageName: node linkType: hard -"@ensdomains/ens@npm:^0.4.4": - version: 0.4.5 - resolution: "@ensdomains/ens@npm:0.4.5" +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: - bluebird: ^3.5.2 - eth-ens-namehash: ^2.0.8 - solc: ^0.4.20 - testrpc: 0.0.1 - web3-utils: ^1.0.0-beta.31 - checksum: 3b4f6e34f3376f1b3cc60927d53d5951c4da0a9ff0f8856aaedba5a73bceccb7c08632bf6709b3bb9e43d6e83223d23928f574fc62dec12b2b1a692bcd3d45c6 + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 languageName: node linkType: hard -"@ensdomains/resolver@npm:^0.2.4": - version: 0.2.4 - resolution: "@ensdomains/resolver@npm:0.2.4" - checksum: 3827a3430cc8935a0839dac9dafcfa6011c6f71af229ff91cbc6cdcbaa35d20c6dbb1a8a901cdb00e66428578ce1675bd6fe6901778b5d0d828321fbec9e0f7f +"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.2.1": - version: 1.2.1 - resolution: "@eslint/eslintrc@npm:1.2.1" +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.3.1 - globals: ^13.9.0 + espree: ^9.6.0 + globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 - minimatch: ^3.0.4 + minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 1f797b9f94d71b965992cf6c44e3bcb574643014fd1e3d4862d25056bd5568f59c488461a7e9a1c1758ca7f0def5d3cb69c3d8b38581bcf4a53af74371243797 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.55.0": + version: 8.55.0 + resolution: "@eslint/js@npm:8.55.0" + checksum: fa33ef619f0646ed15649b0c2e313e4d9ccee8425884bdbfc78020d6b6b64c0c42fa9d83061d0e6158e1d4274f03f0f9008786540e2efab8fcdc48082259908c languageName: node linkType: hard -"@ethereum-waffle/chai@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/chai@npm:3.4.4" +"@ethereum-waffle/chai@npm:4.0.10": + version: 4.0.10 + resolution: "@ethereum-waffle/chai@npm:4.0.10" dependencies: - "@ethereum-waffle/provider": ^3.4.4 - ethers: ^5.5.2 - checksum: b2b9b6b839c3f6b4abf8489fe50549e6fda07bd81ae8e4250b20d9a76ce4a729ef47c741364387b1d2dbc7fac14b46a5d6dcc4d404344b9cce5f9698ff012251 + "@ethereum-waffle/provider": 4.0.5 + debug: ^4.3.4 + json-bigint: ^1.0.0 + peerDependencies: + ethers: "*" + checksum: 11a2fa51224e98ee4cbf346a731be68b17b3c172e68391b25fc0027545d7477dbeca916bbd10be0fa9de612eaed6115a0578f9d3e312e9fe95af2b7791fd0981 languageName: node linkType: hard -"@ethereum-waffle/compiler@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/compiler@npm:3.4.4" +"@ethereum-waffle/compiler@npm:4.0.3": + version: 4.0.3 + resolution: "@ethereum-waffle/compiler@npm:4.0.3" dependencies: "@resolver-engine/imports": ^0.3.3 "@resolver-engine/imports-fs": ^0.3.3 - "@typechain/ethers-v5": ^2.0.0 + "@typechain/ethers-v5": ^10.0.0 "@types/mkdirp": ^0.5.2 - "@types/node-fetch": ^2.5.5 - ethers: ^5.0.1 + "@types/node-fetch": ^2.6.1 mkdirp: ^0.5.1 - node-fetch: ^2.6.1 - solc: ^0.6.3 - ts-generator: ^0.1.1 - typechain: ^3.0.0 - checksum: ebffca732969253934c1e8cca6cc1f12d6294f848d44e6595af81460bc3230bc69096d0965b9deb2c7eecd472a1d536d8cbe993f95bfc76fbbe2114ddbabff70 + node-fetch: ^2.6.7 + peerDependencies: + ethers: "*" + solc: "*" + typechain: ^8.0.0 + checksum: ec7839b0f79a40a77fa05bb6941e00b2b3b1e0aa5514a617400c988b302bbbc5e9373b25ba52c7319bb00b83923dce42011384883c7a234c52f8c44eb5b571fc languageName: node linkType: hard -"@ethereum-waffle/ens@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/ens@npm:3.4.4" - dependencies: +"@ethereum-waffle/ens@npm:4.0.3": + version: 4.0.3 + resolution: "@ethereum-waffle/ens@npm:4.0.3" + peerDependencies: "@ensdomains/ens": ^0.4.4 "@ensdomains/resolver": ^0.2.4 - ethers: ^5.5.2 - checksum: 71d93c09ef3ab89a46f05b9e2a06e129e2109d160c3a819e4bf3b4414fc4707e7fc646c87c1d82f9ba769dc1ac3c6f4934fd72499654fcfc9db4abf46c21d118 + ethers: "*" + checksum: 84435c3dda78c416b332c481cfa9322f5bf06168d5887607d320cb30f20283ccde52eabd18adb5791485125d44d99ff7b5f84bd7bbdb1fde86465abb40a81966 languageName: node linkType: hard -"@ethereum-waffle/mock-contract@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/mock-contract@npm:3.4.4" - dependencies: - "@ethersproject/abi": ^5.5.0 - ethers: ^5.5.2 - checksum: 6e5c62b342e424cd1937f2f7eb424056ad143b238320880f378c0db61c6d694617f968687321a2f030d546aa5b4dde42681cbb419589d7f87452c82844a4488b +"@ethereum-waffle/mock-contract@npm:4.0.4": + version: 4.0.4 + resolution: "@ethereum-waffle/mock-contract@npm:4.0.4" + peerDependencies: + ethers: "*" + checksum: 45bea2ba4615a0bb81692c3d647ad39c2c37fcf250b577aeb6c5aad03fd4d0912d8d9ef5de638ab276ece1eb9ca1d09d23ed297d96da683fe34e0b01ba631da9 languageName: node linkType: hard -"@ethereum-waffle/provider@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/provider@npm:3.4.4" +"@ethereum-waffle/provider@npm:4.0.5": + version: 4.0.5 + resolution: "@ethereum-waffle/provider@npm:4.0.5" dependencies: - "@ethereum-waffle/ens": ^3.4.4 - ethers: ^5.5.2 - ganache-core: ^2.13.2 - patch-package: ^6.2.2 - postinstall-postinstall: ^2.1.0 - checksum: 9e251d7b0198c22e337b18368e3893de766a821e818702dbef0e0d603bad550c6e3a29676cff11272bc82762833586ee9659593d957ec8759a8cc93c2b0f3d00 + "@ethereum-waffle/ens": 4.0.3 + "@ganache/ethereum-options": 0.1.4 + debug: ^4.3.4 + ganache: 7.4.3 + peerDependencies: + ethers: "*" + checksum: b1282ea28cbfba05343cc101bceab3f72fdd9ed391f7c7e0f252aead81aec46b6a0ab7d7ca8504e080e306d6554c21e5420765965d92ed5b303a12543dc85cf4 languageName: node linkType: hard -"@ethereumjs/block@npm:^3.5.0, @ethereumjs/block@npm:^3.6.2": - version: 3.6.2 - resolution: "@ethereumjs/block@npm:3.6.2" +"@ethereumjs/block@npm:^3.5.0, @ethereumjs/block@npm:^3.6.0, @ethereumjs/block@npm:^3.6.2": + version: 3.6.3 + resolution: "@ethereumjs/block@npm:3.6.3" dependencies: - "@ethereumjs/common": ^2.6.3 - "@ethereumjs/tx": ^3.5.1 - ethereumjs-util: ^7.1.4 + "@ethereumjs/common": ^2.6.5 + "@ethereumjs/tx": ^3.5.2 + ethereumjs-util: ^7.1.5 merkle-patricia-tree: ^4.2.4 - checksum: 19af5fe3202ecadf8d7a4c49f1ec29e47227ee8257aebfd74defc9c252c2474c62475234e73d68d5a716956668c397d783a5a6acaa660a324d6bdbfd69dfdd74 + checksum: d08c78134d15bc09c08b9a355ab736faa0f6b04ab87d2962e60df9c8bf977ebc68fe10aec6ca50bc2486532f489d7968fb5046defcd839b3b5ce28ca9dbce40f languageName: node linkType: hard -"@ethereumjs/blockchain@npm:^5.5.2": - version: 5.5.2 - resolution: "@ethereumjs/blockchain@npm:5.5.2" +"@ethereumjs/blockchain@npm:^5.5.0": + version: 5.5.3 + resolution: "@ethereumjs/blockchain@npm:5.5.3" dependencies: "@ethereumjs/block": ^3.6.2 - "@ethereumjs/common": ^2.6.3 + "@ethereumjs/common": ^2.6.4 "@ethereumjs/ethash": ^1.1.0 debug: ^4.3.3 - ethereumjs-util: ^7.1.4 + ethereumjs-util: ^7.1.5 level-mem: ^5.0.1 lru-cache: ^5.1.1 semaphore-async-await: ^1.5.1 - checksum: 08402287dd70e316b23505ab37218c63b4a8ed285dadf55b5699e5e2819e184e6bf9cab8e0c1c5f4949975792e969487860f680971d9a745b0d01635d60c06b4 + checksum: eeefb4735ac06e6fe5ec5457eb9ac7aa26ced8651093d05067aee264f23704d79eacb1b2742e0651b73d2528aa8a9a40f3cc9e479f1837253c2dbb784a7a8e59 languageName: node linkType: hard -"@ethereumjs/common@npm:^2.3.0, @ethereumjs/common@npm:^2.4.0, @ethereumjs/common@npm:^2.6.3": - version: 2.6.3 - resolution: "@ethereumjs/common@npm:2.6.3" +"@ethereumjs/common@npm:2.5.0": + version: 2.5.0 + resolution: "@ethereumjs/common@npm:2.5.0" dependencies: crc-32: ^1.2.0 - ethereumjs-util: ^7.1.4 - checksum: 660deabc93c3a6fc7c03af864406dcb8d9a4a502e321ce455cc62c0ff4117e11ce5d42ad49c5ca16ddc5364c189a302f6a64bc055049606757f4324ce857ca60 + ethereumjs-util: ^7.1.1 + checksum: f08830c5b86f215e5bd9b80c7202beeeacfcd6094e493efb1cad75dd9d4605bae6c3d4a991447fc14e494c6c4ce99ea41f77e2032f3a9e1976f44308d3757ea7 languageName: node linkType: hard -"@ethereumjs/common@npm:^2.6.4": - version: 2.6.4 - resolution: "@ethereumjs/common@npm:2.6.4" +"@ethereumjs/common@npm:2.6.0": + version: 2.6.0 + resolution: "@ethereumjs/common@npm:2.6.0" dependencies: crc-32: ^1.2.0 - ethereumjs-util: ^7.1.4 - checksum: 2d3ef9e76c2dfb9fd1fc390834107ffd49e7074b893f3985f3d5996e217064cfe3617b16aff42fb7e8631a21ae32286ddf8ec21251589c4ac43d5b3c03217f9f + ethereumjs-util: ^7.1.3 + checksum: f1e775f0d3963011f84cd6f6de985b342064331c8fd41bc81a6497abe959078704bf4febd8c59a3fc51c3527b1261441436d55d032f85f0453ff1af4a8dbccb3 + languageName: node + linkType: hard + +"@ethereumjs/common@npm:^2.5.0, @ethereumjs/common@npm:^2.6.0, @ethereumjs/common@npm:^2.6.4, @ethereumjs/common@npm:^2.6.5": + version: 2.6.5 + resolution: "@ethereumjs/common@npm:2.6.5" + dependencies: + crc-32: ^1.2.0 + ethereumjs-util: ^7.1.5 + checksum: 0143386f267ef01b7a8bb1847596f964ad58643c084e5fd8e3a0271a7bf8428605dbf38cbb92c84f6622080ad095abeb765f178c02d86ec52abf9e8a4c0e4ecf languageName: node linkType: hard @@ -187,98 +495,77 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/tx@npm:^3.2.1, @ethereumjs/tx@npm:^3.5.1": - version: 3.5.1 - resolution: "@ethereumjs/tx@npm:3.5.1" - dependencies: - "@ethereumjs/common": ^2.6.3 - ethereumjs-util: ^7.1.4 - checksum: ed17780314592eca96f7aed392707b55af713964a9ac8e5a1ba5b1a0d7cd90ced80d3793bc24e2ce7a5b4852cefae31af8731c5cf54cece48ada16c5dcb2713b +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: 30db19c78faa2b6ff27275ab767646929207bb207f903f09eb3e4c273ce2738b45f3c82169ddacd67468b4f063d8d96035f2bf36f02b6b7e4d928eefe2e3ecbc languageName: node linkType: hard -"@ethereumjs/tx@npm:^3.5.2": - version: 3.5.2 - resolution: "@ethereumjs/tx@npm:3.5.2" +"@ethereumjs/tx@npm:3.3.2": + version: 3.3.2 + resolution: "@ethereumjs/tx@npm:3.3.2" dependencies: - "@ethereumjs/common": ^2.6.4 - ethereumjs-util: ^7.1.5 - checksum: a34a7228a623b40300484d15875b9f31f0a612cfeab64a845f6866cf0bfe439519e9455ac6396149f29bc527cf0ee277ace082ae013a1075dcbf7193220a0146 + "@ethereumjs/common": ^2.5.0 + ethereumjs-util: ^7.1.2 + checksum: e18c871fa223fcb23af1c3dde0ff9c82c91e962556fd531e1c75df63afb3941dd71e3def733d8c442a80224c6dcefb256f169cc286176e6ffb33c19349189c53 languageName: node linkType: hard -"@ethereumjs/vm@npm:^5.9.0": - version: 5.9.1 - resolution: "@ethereumjs/vm@npm:5.9.1" +"@ethereumjs/tx@npm:3.4.0": + version: 3.4.0 + resolution: "@ethereumjs/tx@npm:3.4.0" dependencies: - "@ethereumjs/block": ^3.6.2 - "@ethereumjs/blockchain": ^5.5.2 - "@ethereumjs/common": ^2.6.4 - "@ethereumjs/tx": ^3.5.2 - async-eventemitter: ^0.2.4 - core-js-pure: ^3.0.1 - debug: ^4.3.3 - ethereumjs-util: ^7.1.5 - functional-red-black-tree: ^1.0.1 - mcl-wasm: ^0.7.1 - merkle-patricia-tree: ^4.2.4 - rustbn.js: ~0.2.0 - checksum: a978e23cc0c557cb58984f17a0108206e3d3fdf3f5903501db54d4d8d087acd7688a60c7f02987622d2296fd064ce7516608e37eb14bdf3fa12aac0e3228414a + "@ethereumjs/common": ^2.6.0 + ethereumjs-util: ^7.1.3 + checksum: 381cbb872edb0ae83a56bf5d5657ac4f594f43ca0956b6577fb762840033081252345d67151d4feafde3f97caaab9a9826348780553c05d5a8ca2984259ad555 languageName: node linkType: hard -"@ethersproject/abi@npm:5.0.0-beta.153": - version: 5.0.0-beta.153 - resolution: "@ethersproject/abi@npm:5.0.0-beta.153" +"@ethereumjs/tx@npm:^3.3.2, @ethereumjs/tx@npm:^3.4.0, @ethereumjs/tx@npm:^3.5.2": + version: 3.5.2 + resolution: "@ethereumjs/tx@npm:3.5.2" dependencies: - "@ethersproject/address": ">=5.0.0-beta.128" - "@ethersproject/bignumber": ">=5.0.0-beta.130" - "@ethersproject/bytes": ">=5.0.0-beta.129" - "@ethersproject/constants": ">=5.0.0-beta.128" - "@ethersproject/hash": ">=5.0.0-beta.128" - "@ethersproject/keccak256": ">=5.0.0-beta.127" - "@ethersproject/logger": ">=5.0.0-beta.129" - "@ethersproject/properties": ">=5.0.0-beta.131" - "@ethersproject/strings": ">=5.0.0-beta.130" - checksum: 9f5c3c986a47c2bcc066e0ea1d8190be4358de6722d0eb75eaaacbc1f7610169691cc369085aa390bd88c731c6e539f309cb81face594feffac9336e369444c5 + "@ethereumjs/common": ^2.6.4 + ethereumjs-util: ^7.1.5 + checksum: a34a7228a623b40300484d15875b9f31f0a612cfeab64a845f6866cf0bfe439519e9455ac6396149f29bc527cf0ee277ace082ae013a1075dcbf7193220a0146 languageName: node linkType: hard -"@ethersproject/abi@npm:5.0.7": - version: 5.0.7 - resolution: "@ethersproject/abi@npm:5.0.7" +"@ethereumjs/util@npm:^8.1.0": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" dependencies: - "@ethersproject/address": ^5.0.4 - "@ethersproject/bignumber": ^5.0.7 - "@ethersproject/bytes": ^5.0.4 - "@ethersproject/constants": ^5.0.4 - "@ethersproject/hash": ^5.0.4 - "@ethersproject/keccak256": ^5.0.3 - "@ethersproject/logger": ^5.0.5 - "@ethersproject/properties": ^5.0.3 - "@ethersproject/strings": ^5.0.4 - checksum: 47bce732782187ef0343662aa0ffdabb98be752d3ede57234205b118df511f35d8cddabd468f139e367d908ce7fbb0555f5af943f4b47cf3165c8fd61811183d + "@ethereumjs/rlp": ^4.0.1 + ethereum-cryptography: ^2.0.0 + micro-ftch: ^0.3.1 + checksum: 9ae5dee8f12b0faf81cd83f06a41560e79b0ba96a48262771d897a510ecae605eb6d84f687da001ab8ccffd50f612ae50f988ef76e6312c752897f462f3ac08d languageName: node linkType: hard -"@ethersproject/abi@npm:5.6.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.0": +"@ethereumjs/vm@npm:5.6.0": version: 5.6.0 - resolution: "@ethersproject/abi@npm:5.6.0" - dependencies: - "@ethersproject/address": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/hash": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - checksum: d0cf0450d21ff5beff5593ac4b1749eb64d67fdd7d0e2d489ab1996218ec7242b9dadcd7a9896687e84784c83bf3e39cba6e77b3e813165d6b400e584a96f2fc + resolution: "@ethereumjs/vm@npm:5.6.0" + dependencies: + "@ethereumjs/block": ^3.6.0 + "@ethereumjs/blockchain": ^5.5.0 + "@ethereumjs/common": ^2.6.0 + "@ethereumjs/tx": ^3.4.0 + async-eventemitter: ^0.2.4 + core-js-pure: ^3.0.1 + debug: ^2.2.0 + ethereumjs-util: ^7.1.3 + functional-red-black-tree: ^1.0.1 + mcl-wasm: ^0.7.1 + merkle-patricia-tree: ^4.2.2 + rustbn.js: ~0.2.0 + checksum: 67f803f7dc851aeed9996cdab6751dc3f7565146ff8a24982526d33a07c173e84dd449b2fbb9202a479c7446b628105af41465b75c1f9143e1e68cf573fed4c3 languageName: node linkType: hard -"@ethersproject/abi@npm:5.6.3, @ethersproject/abi@npm:^5.6.3": +"@ethersproject/abi@npm:5.6.3": version: 5.6.3 resolution: "@ethersproject/abi@npm:5.6.3" dependencies: @@ -295,22 +582,24 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abstract-provider@npm:5.6.0, @ethersproject/abstract-provider@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/abstract-provider@npm:5.6.0" +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" dependencies: - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/networks": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - "@ethersproject/web": ^5.6.0 - checksum: 42ec4148217f7643f667f46235266100a1b31b8e87b6d540b6e8667703f56f633d25ec2e5d9b0f95556de0d0620189488e9d77dafc058c61e45872fef620ac5a + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e languageName: node linkType: hard -"@ethersproject/abstract-provider@npm:5.6.1, @ethersproject/abstract-provider@npm:^5.6.1": +"@ethersproject/abstract-provider@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/abstract-provider@npm:5.6.1" dependencies: @@ -325,20 +614,22 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abstract-signer@npm:5.6.0, @ethersproject/abstract-signer@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/abstract-signer@npm:5.6.0" +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.6.1, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" dependencies: - "@ethersproject/abstract-provider": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - checksum: 91722f3ad449da1a26898132b53e0130deac19ab8dbef55c5fd3c6d2b9ddb0428f539021c9b7085f3fc5e8615bdf1fddcbe4f6c5365f6b6cfd5d3952816d27b7 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 languageName: node linkType: hard -"@ethersproject/abstract-signer@npm:5.6.2, @ethersproject/abstract-signer@npm:^5.6.2": +"@ethersproject/abstract-signer@npm:5.6.2": version: 5.6.2 resolution: "@ethersproject/abstract-signer@npm:5.6.2" dependencies: @@ -351,20 +642,20 @@ __metadata: languageName: node linkType: hard -"@ethersproject/address@npm:5.6.0, @ethersproject/address@npm:>=5.0.0-beta.128, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.4, @ethersproject/address@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/address@npm:5.6.0" +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.6.2, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" dependencies: - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/rlp": ^5.6.0 - checksum: 504cddd422ec9890eda61da0421991ace7c5cd9f365cbc9761305013621915dc5ff5247f4b04699b7060fc272a7a8c9dc88f993bc6fa6e0f6e9e4fa30d6f3c0f + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 languageName: node linkType: hard -"@ethersproject/address@npm:5.6.1, @ethersproject/address@npm:^5.6.1": +"@ethersproject/address@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/address@npm:5.6.1" dependencies: @@ -377,16 +668,20 @@ __metadata: languageName: node linkType: hard -"@ethersproject/base64@npm:5.6.0, @ethersproject/base64@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/base64@npm:5.6.0" +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.6.1, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - checksum: 5f316367acf18fdba82d50868171251f75218740a1c9bad8b11c6c3372c86ae323f91bc6727e78e527866357974d19fcced12f666fb067ffba2be638d54d36f7 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 languageName: node linkType: hard -"@ethersproject/base64@npm:5.6.1, @ethersproject/base64@npm:^5.6.1": +"@ethersproject/base64@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/base64@npm:5.6.1" dependencies: @@ -395,17 +690,16 @@ __metadata: languageName: node linkType: hard -"@ethersproject/basex@npm:5.6.0, @ethersproject/basex@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/basex@npm:5.6.0" +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.6.1, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - checksum: 144bb1d500ffd111045aee376ee86cacba6bc0b4169941f5532c3598aaa7590db0679793f4a6572585fae91a5e2200e0b8c782b155855138654aa6917527c975 + "@ethersproject/bytes": ^5.7.0 + checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b languageName: node linkType: hard -"@ethersproject/basex@npm:5.6.1, @ethersproject/basex@npm:^5.6.1": +"@ethersproject/basex@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/basex@npm:5.6.1" dependencies: @@ -415,18 +709,17 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.6.0, @ethersproject/bignumber@npm:>=5.0.0-beta.130, @ethersproject/bignumber@npm:^5.0.7, @ethersproject/bignumber@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/bignumber@npm:5.6.0" +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.6.1, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - bn.js: ^4.11.9 - checksum: cb1e0d712a1d991d7c74c66d34522413a2fd832e10bc15158b24e07f61e80a221689947936790334137c11c582f3f4d184d3ccf3036e09e4df1b2026923962b4 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.6.2, @ethersproject/bignumber@npm:^5.6.2": +"@ethersproject/bignumber@npm:5.6.2": version: 5.6.2 resolution: "@ethersproject/bignumber@npm:5.6.2" dependencies: @@ -437,7 +730,18 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bytes@npm:5.6.1, @ethersproject/bytes@npm:>=5.0.0-beta.129, @ethersproject/bytes@npm:^5.0.4, @ethersproject/bytes@npm:^5.6.0, @ethersproject/bytes@npm:^5.6.1": +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.6.2, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + bn.js: ^5.2.1 + checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/bytes@npm:5.6.1" dependencies: @@ -446,16 +750,16 @@ __metadata: languageName: node linkType: hard -"@ethersproject/constants@npm:5.6.0, @ethersproject/constants@npm:>=5.0.0-beta.128, @ethersproject/constants@npm:^5.0.4, @ethersproject/constants@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/constants@npm:5.6.0" +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.6.1, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: - "@ethersproject/bignumber": ^5.6.0 - checksum: da54458a0133b64c02052b86fefa6118ed88c449b02a61ba57745bf08029658214291935b0500461bde3f734ea98e6d8edc586eed9ce9fa7e6a16d9397716ff7 + "@ethersproject/logger": ^5.7.0 + checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 languageName: node linkType: hard -"@ethersproject/constants@npm:5.6.1, @ethersproject/constants@npm:^5.6.1": +"@ethersproject/constants@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/constants@npm:5.6.1" dependencies: @@ -464,21 +768,12 @@ __metadata: languageName: node linkType: hard -"@ethersproject/contracts@npm:5.6.0": - version: 5.6.0 - resolution: "@ethersproject/contracts@npm:5.6.0" - dependencies: - "@ethersproject/abi": ^5.6.0 - "@ethersproject/abstract-provider": ^5.6.0 - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/address": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - checksum: 9b149da295f0c063252185b94a907bbb3af2faac5a464947bca383a620b9cf8a4faa0e742c16d37a89d262547c645609ab91fbf87266a9e50ad4c17e65569e0d +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.6.1, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a languageName: node linkType: hard @@ -500,23 +795,25 @@ __metadata: languageName: node linkType: hard -"@ethersproject/hash@npm:5.6.0, @ethersproject/hash@npm:>=5.0.0-beta.128, @ethersproject/hash@npm:^5.0.4, @ethersproject/hash@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/hash@npm:5.6.0" +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" dependencies: - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/address": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - checksum: 7a3b9180963765fff1a307adeb2138219d1585fc979ee2d14888739102ae2b223759cf456a88da554b4043475ec459d3a8dd67a844e39a896f0584c5a9556a06 + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 languageName: node linkType: hard -"@ethersproject/hash@npm:5.6.1, @ethersproject/hash@npm:^5.6.1": +"@ethersproject/hash@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/hash@npm:5.6.1" dependencies: @@ -532,27 +829,24 @@ __metadata: languageName: node linkType: hard -"@ethersproject/hdnode@npm:5.6.0, @ethersproject/hdnode@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/hdnode@npm:5.6.0" +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.6.1, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" dependencies: - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/basex": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/pbkdf2": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/sha2": ^5.6.0 - "@ethersproject/signing-key": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - "@ethersproject/wordlists": ^5.6.0 - checksum: 399919d8d43ed18e2ebfa7b9c1fab469d817d2146187b4a12eaa76508b8ec95ec80d1d64048831b7cbd7f7163b35fb13f8c26a1fe078319f7365d74e23c1c117 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef languageName: node linkType: hard -"@ethersproject/hdnode@npm:5.6.2, @ethersproject/hdnode@npm:^5.6.2": +"@ethersproject/hdnode@npm:5.6.2": version: 5.6.2 resolution: "@ethersproject/hdnode@npm:5.6.2" dependencies: @@ -572,28 +866,27 @@ __metadata: languageName: node linkType: hard -"@ethersproject/json-wallets@npm:5.6.0, @ethersproject/json-wallets@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/json-wallets@npm:5.6.0" +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.6.2, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" dependencies: - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/address": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/hdnode": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/pbkdf2": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/random": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - checksum: 8dda507745736bf37708af93df72727b4f375ff0f548e9496a39725fee5618955b3c4ce4850e667eca8b5b8576face747bb79be2f49a445b3228f99456675d3d + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 languageName: node linkType: hard -"@ethersproject/json-wallets@npm:5.6.1, @ethersproject/json-wallets@npm:^5.6.1": +"@ethersproject/json-wallets@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/json-wallets@npm:5.6.1" dependencies: @@ -614,17 +907,28 @@ __metadata: languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.6.0, @ethersproject/keccak256@npm:>=5.0.0-beta.127, @ethersproject/keccak256@npm:^5.0.3, @ethersproject/keccak256@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/keccak256@npm:5.6.0" +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.6.1, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - js-sha3: 0.8.0 - checksum: 8683ee5c665ae23c9e1a46be4efb9f208f256abc1885844ec653452ad6dd58d08e5df0d78fc01eef33dc10bca38e27a94390b71a86fae666ef7eddf49860e047 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.6.1, @ethersproject/keccak256@npm:^5.6.1": +"@ethersproject/keccak256@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/keccak256@npm:5.6.1" dependencies: @@ -634,23 +938,31 @@ __metadata: languageName: node linkType: hard -"@ethersproject/logger@npm:5.6.0, @ethersproject/logger@npm:>=5.0.0-beta.129, @ethersproject/logger@npm:^5.0.5, @ethersproject/logger@npm:^5.6.0": +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.6.1, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + js-sha3: 0.8.0 + checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.6.0": version: 5.6.0 resolution: "@ethersproject/logger@npm:5.6.0" checksum: 6eee38a973c7a458552278971c109a3e5df3c257e433cb959da9a287ea04628d1f510d41b83bd5f9da5ddc05d97d307ed2162a9ba1b4fcc50664e4f60061636c languageName: node linkType: hard -"@ethersproject/networks@npm:5.6.1, @ethersproject/networks@npm:^5.6.0": - version: 5.6.1 - resolution: "@ethersproject/networks@npm:5.6.1" - dependencies: - "@ethersproject/logger": ^5.6.0 - checksum: e894369e58b45563653155df6f6db9a919448fc077a74a8fcc3fa10423335250372243868bcc2cc08857f081af6320a3a62d322340d2e5364fb25c258c978b9e +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.6.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d languageName: node linkType: hard -"@ethersproject/networks@npm:5.6.3, @ethersproject/networks@npm:^5.6.3": +"@ethersproject/networks@npm:5.6.3": version: 5.6.3 resolution: "@ethersproject/networks@npm:5.6.3" dependencies: @@ -659,17 +971,16 @@ __metadata: languageName: node linkType: hard -"@ethersproject/pbkdf2@npm:5.6.0, @ethersproject/pbkdf2@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/pbkdf2@npm:5.6.0" +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.6.3, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/sha2": ^5.6.0 - checksum: 7d70b46f39373a07abb5512f38ce2c9f3e05640a07c658b584909e22d51c8c47882396427b9ab6ce80a1aa3f2074fd0a2aa6ac03290e2d7505089aa5ebccb55c + "@ethersproject/logger": ^5.7.0 + checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d languageName: node linkType: hard -"@ethersproject/pbkdf2@npm:5.6.1, @ethersproject/pbkdf2@npm:^5.6.1": +"@ethersproject/pbkdf2@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/pbkdf2@npm:5.6.1" dependencies: @@ -679,7 +990,17 @@ __metadata: languageName: node linkType: hard -"@ethersproject/properties@npm:5.6.0, @ethersproject/properties@npm:>=5.0.0-beta.131, @ethersproject/properties@npm:^5.0.3, @ethersproject/properties@npm:^5.6.0": +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.6.1, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.6.0": version: 5.6.0 resolution: "@ethersproject/properties@npm:5.6.0" dependencies: @@ -688,30 +1009,12 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.6.2": - version: 5.6.2 - resolution: "@ethersproject/providers@npm:5.6.2" - dependencies: - "@ethersproject/abstract-provider": ^5.6.0 - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/address": ^5.6.0 - "@ethersproject/basex": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/hash": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/networks": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/random": ^5.6.0 - "@ethersproject/rlp": ^5.6.0 - "@ethersproject/sha2": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - "@ethersproject/web": ^5.6.0 - bech32: 1.1.4 - ws: 7.4.6 - checksum: 30409755c227eab65a94ec3d7834560af5d0c7a2359855e597c0ecdfd312e851324ab8d47d0afcf60efa7a008b75c23be1a1a9d219872f99aa165283139f543a +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.6.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f languageName: node linkType: hard @@ -743,17 +1046,35 @@ __metadata: languageName: node linkType: hard -"@ethersproject/random@npm:5.6.0, @ethersproject/random@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/random@npm:5.6.0" - dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - checksum: 0d21ce97503f2764b01402093ba73afec69d2631611fe0bda35690e1e2aea0eda39f32dc868123c87505cf5e0618dd32c4aed933203d8011e234889e455212b3 +"@ethersproject/providers@npm:5.7.2": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bech32: 1.1.4 + ws: 7.4.6 + checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 languageName: node linkType: hard -"@ethersproject/random@npm:5.6.1, @ethersproject/random@npm:^5.6.1": +"@ethersproject/random@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/random@npm:5.6.1" dependencies: @@ -763,17 +1084,17 @@ __metadata: languageName: node linkType: hard -"@ethersproject/rlp@npm:5.6.0, @ethersproject/rlp@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/rlp@npm:5.6.0" +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.6.1, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - checksum: 3697871cec540e3bf3fd7a6a65ef3e5ca223f684ac928ecf028619eee251c6c5427b02493c152f057f5e9b07ea216d24f807ec84e5df80414511f8aff5505359 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 languageName: node linkType: hard -"@ethersproject/rlp@npm:5.6.1, @ethersproject/rlp@npm:^5.6.1": +"@ethersproject/rlp@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/rlp@npm:5.6.1" dependencies: @@ -783,18 +1104,17 @@ __metadata: languageName: node linkType: hard -"@ethersproject/sha2@npm:5.6.0, @ethersproject/sha2@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/sha2@npm:5.6.0" +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.6.1, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - hash.js: 1.1.7 - checksum: 8f424f52720e9127e015afca948412289f97444bc9c3e38c06a43fb1635aa29a7e98976ee4dab7044ba51b25836092377c0691ccbcae6fe7349ca38ca3ab8d80 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e languageName: node linkType: hard -"@ethersproject/sha2@npm:5.6.1, @ethersproject/sha2@npm:^5.6.1": +"@ethersproject/sha2@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/sha2@npm:5.6.1" dependencies: @@ -805,21 +1125,18 @@ __metadata: languageName: node linkType: hard -"@ethersproject/signing-key@npm:5.6.0, @ethersproject/signing-key@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/signing-key@npm:5.6.0" +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.6.1, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - bn.js: ^4.11.9 - elliptic: 6.5.4 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 hash.js: 1.1.7 - checksum: c61118ff1ff89560da59cf77ca6553762e94b9d2757542be15dcf7eb4962327faede941d8461272afb8550cc2e28d38e7e89d199650ebae07a596df3c2059e08 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc languageName: node linkType: hard -"@ethersproject/signing-key@npm:5.6.2, @ethersproject/signing-key@npm:^5.6.2": +"@ethersproject/signing-key@npm:5.6.2": version: 5.6.2 resolution: "@ethersproject/signing-key@npm:5.6.2" dependencies: @@ -833,17 +1150,17 @@ __metadata: languageName: node linkType: hard -"@ethersproject/solidity@npm:5.6.0": - version: 5.6.0 - resolution: "@ethersproject/solidity@npm:5.6.0" +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.6.2, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" dependencies: - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/sha2": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - checksum: e23475603167291b0589cc7d1187e45f3bc5042de958153503e7a259a5d1677ce336d5cdb570805529e50d0bb5b9ade6ce6c0553ec7ea7bed5ecae603262701d + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a languageName: node linkType: hard @@ -861,18 +1178,21 @@ __metadata: languageName: node linkType: hard -"@ethersproject/strings@npm:5.6.0, @ethersproject/strings@npm:>=5.0.0-beta.130, @ethersproject/strings@npm:^5.0.4, @ethersproject/strings@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/strings@npm:5.6.0" +"@ethersproject/solidity@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - checksum: 0b69bdd2c2767049599e1b6bbf34782166a1b901fd00a09b2dab0f4a92a6a1e85bb28d498f40f138a68baf62714831b6398e170358c861b4b1e54bfac375b655 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 languageName: node linkType: hard -"@ethersproject/strings@npm:5.6.1, @ethersproject/strings@npm:^5.6.1": +"@ethersproject/strings@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/strings@npm:5.6.1" dependencies: @@ -883,24 +1203,18 @@ __metadata: languageName: node linkType: hard -"@ethersproject/transactions@npm:5.6.0, @ethersproject/transactions@npm:^5.0.0-beta.135, @ethersproject/transactions@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/transactions@npm:5.6.0" +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.6.1, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" dependencies: - "@ethersproject/address": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/rlp": ^5.6.0 - "@ethersproject/signing-key": ^5.6.0 - checksum: b01a3a9ce1e2d945825adbecfc71b992293e0274b77caf2c0b3c45bb76919ce64aa888a5705e6745a84448c50fc4eb58ff5e0ad11c37b1aae33c7a7d3b8af883 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df languageName: node linkType: hard -"@ethersproject/transactions@npm:5.6.2, @ethersproject/transactions@npm:^5.6.2": +"@ethersproject/transactions@npm:5.6.2": version: 5.6.2 resolution: "@ethersproject/transactions@npm:5.6.2" dependencies: @@ -917,14 +1231,20 @@ __metadata: languageName: node linkType: hard -"@ethersproject/units@npm:5.6.0": - version: 5.6.0 - resolution: "@ethersproject/units@npm:5.6.0" +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.6.2, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" dependencies: - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/constants": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - checksum: 4bca3d4797de2f204d6c23f64e417f60580008139067cf971ff0da3c03c20921f006933a6ae035b53df0e2522f8f999596dcd9df385b22b4b6f9479409f46b13 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 languageName: node linkType: hard @@ -939,26 +1259,14 @@ __metadata: languageName: node linkType: hard -"@ethersproject/wallet@npm:5.6.0": - version: 5.6.0 - resolution: "@ethersproject/wallet@npm:5.6.0" - dependencies: - "@ethersproject/abstract-provider": ^5.6.0 - "@ethersproject/abstract-signer": ^5.6.0 - "@ethersproject/address": ^5.6.0 - "@ethersproject/bignumber": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/hash": ^5.6.0 - "@ethersproject/hdnode": ^5.6.0 - "@ethersproject/json-wallets": ^5.6.0 - "@ethersproject/keccak256": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/random": ^5.6.0 - "@ethersproject/signing-key": ^5.6.0 - "@ethersproject/transactions": ^5.6.0 - "@ethersproject/wordlists": ^5.6.0 - checksum: 2e0900f136ffd0418a161d708116d6b966596c001a7f55861ceeea28282ce6ad61180cce24589c9b4df001d096352d57128a401edfc613af9daed3724b2a0ec9 +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc languageName: node linkType: hard @@ -985,20 +1293,30 @@ __metadata: languageName: node linkType: hard -"@ethersproject/web@npm:5.6.0, @ethersproject/web@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/web@npm:5.6.0" +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" dependencies: - "@ethersproject/base64": ^5.6.0 - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - checksum: 42b6e71658393e5abf8341c6bea0deb22cc744b4d22b3a979ed876bc772723b800c18e5180e223f77c47fb045828ef16ba5a01e8dd346474cf430533d1f053bc + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd languageName: node linkType: hard -"@ethersproject/web@npm:5.6.1, @ethersproject/web@npm:^5.6.1": +"@ethersproject/web@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/web@npm:5.6.1" dependencies: @@ -1011,20 +1329,20 @@ __metadata: languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.6.0, @ethersproject/wordlists@npm:^5.6.0": - version: 5.6.0 - resolution: "@ethersproject/wordlists@npm:5.6.0" +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.6.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" dependencies: - "@ethersproject/bytes": ^5.6.0 - "@ethersproject/hash": ^5.6.0 - "@ethersproject/logger": ^5.6.0 - "@ethersproject/properties": ^5.6.0 - "@ethersproject/strings": ^5.6.0 - checksum: 648d948d884aff09cfc11f1db404fff0489a49d50f4d878f2dbda14e02214c24e2e2efec7a3215929a5e433232413c435e41d47f2f405a46408cfd79c7f2ae78 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.6.1, @ethersproject/wordlists@npm:^5.6.1": +"@ethersproject/wordlists@npm:5.6.1": version: 5.6.1 resolution: "@ethersproject/wordlists@npm:5.6.1" dependencies: @@ -1037,55 +1355,238 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.6.1, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.0 + resolution: "@fastify/busboy@npm:2.1.0" + checksum: 3233abd10f73e50668cb4bb278a79b7b3fadd30215ac6458299b0e5a09a29c3586ec07597aae6bd93f5cbedfcef43a8aeea51829cd28fc13850cdbcd324c28d5 + languageName: node + linkType: hard + +"@ganache/ethereum-address@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-address@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + checksum: 0e07102c67aa2c25233e30f8ca359cbd012ad0e0b9580b8e6aff6f87dd46daee89bbc60d9518f2204f36f943e7bd5d20e571646c85e6a68a98784c3ede2ccec0 + languageName: node + linkType: hard + +"@ganache/ethereum-options@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-options@npm:0.1.4" + dependencies: + "@ganache/ethereum-address": 0.1.4 + "@ganache/ethereum-utils": 0.1.4 + "@ganache/options": 0.1.4 + "@ganache/utils": 0.1.4 + bip39: 3.0.4 + seedrandom: 3.0.5 + checksum: 597b32502654ce9f3fec02fdf308f1e6b2c657b5e25c6d4219d71ecbea94e45faa4135c6d4e25cacf1faac1509f2b7546f3d8bbdba1e9121975d820999d3aa76 + languageName: node + linkType: hard + +"@ganache/ethereum-utils@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-utils@npm:0.1.4" + dependencies: + "@ethereumjs/common": 2.6.0 + "@ethereumjs/tx": 3.4.0 + "@ethereumjs/vm": 5.6.0 + "@ganache/ethereum-address": 0.1.4 + "@ganache/rlp": 0.1.4 + "@ganache/utils": 0.1.4 + emittery: 0.10.0 + ethereumjs-abi: 0.6.8 + ethereumjs-util: 7.1.3 + checksum: 74bc7b7fb62e9dc2f114f6f428c465d9365c0bb84c85144d34935d24a2893c5471c8cae263ae4bea51f1335803b6b1771f57c25a276e9c0539a08a90c3289bca + languageName: node + linkType: hard + +"@ganache/options@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/options@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + bip39: 3.0.4 + seedrandom: 3.0.5 + checksum: 4f1cda646f5599b18a0eeaf27286499c78c3e2e0eb2541db756c27f2ca16e58539c9db99aab8441e593f9fe586269940d800900f63312fcb10231ab95ebdc3dc + languageName: node + linkType: hard + +"@ganache/rlp@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/rlp@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + rlp: 2.2.6 + checksum: 425c5d4a0a36b834cfac005d05679b3df970a6d8d953f385a5f9bd003a326ba23c1bce06095729879136699b70389d7f2627f939f712ed8897c96e542766771f + languageName: node + linkType: hard + +"@ganache/utils@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/utils@npm:0.1.4" + dependencies: + "@trufflesuite/bigint-buffer": 1.1.9 + emittery: 0.10.0 + keccak: 3.0.1 + seedrandom: 3.0.5 + dependenciesMeta: + "@trufflesuite/bigint-buffer": + optional: true + checksum: c81b7380d56292a44e9cdb0e581d815b9510fb1be87661fe135e2d3611b495f1cd01aa4b91e287bfc28d08d1b4b4210f7b54e32ea28e054faa006cf232fb3dcc languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.9.2": - version: 0.9.5 - resolution: "@humanwhocodes/config-array@npm:0.9.5" +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.13 + resolution: "@humanwhocodes/config-array@npm:0.11.13" dependencies: - "@humanwhocodes/object-schema": ^1.2.1 + "@humanwhocodes/object-schema": ^2.0.1 debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 8ba6281bc0590f6c6eadeefc14244b5a3e3f5903445aadd1a32099ed80e753037674026ce1b3c945ab93561bea5eb29e3c5bff67060e230c295595ba517a3492 + minimatch: ^3.0.5 + checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805 languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.1": + version: 2.0.1 + resolution: "@humanwhocodes/object-schema@npm:2.0.1" + checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + 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": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@manypkg/find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "@manypkg/find-root@npm:1.1.0" + dependencies: + "@babel/runtime": ^7.5.5 + "@types/node": ^12.7.1 + find-up: ^4.1.0 + fs-extra: ^8.1.0 + checksum: f0fd881a5a81a351cb6561cd24117e8ee9481bbf3b6d1c7d9d10bef1f4744ca2ba3d064713e83c0a0574416d1e5b4a4c6c414aad91913c4a1c6040d87283ac50 + languageName: node + linkType: hard + +"@manypkg/get-packages@npm:^1.1.3": + version: 1.1.3 + resolution: "@manypkg/get-packages@npm:1.1.3" + dependencies: + "@babel/runtime": ^7.5.5 + "@changesets/types": ^4.0.1 + "@manypkg/find-root": ^1.1.0 + fs-extra: ^8.1.0 + globby: ^11.0.0 + read-yaml-file: ^1.1.0 + checksum: f5a756e5a659e0e1c33f48852d56826d170d5b10a3cdea89ce4fcaa77678d8799aa4004b30e1985c87b73dbc390b95bb6411b78336dd1e0db87c08c74b5c0e74 languageName: node linkType: hard "@metamask/eth-sig-util@npm:^4.0.0": - version: 4.0.0 - resolution: "@metamask/eth-sig-util@npm:4.0.0" + version: 4.0.1 + resolution: "@metamask/eth-sig-util@npm:4.0.1" dependencies: ethereumjs-abi: ^0.6.8 ethereumjs-util: ^6.2.1 ethjs-util: ^0.1.6 tweetnacl: ^1.0.3 tweetnacl-util: ^0.15.1 - checksum: 983fc1d4ba2d23d8d87024013edc38660456be978641087fa4c9ca4a1c8ea0cb33e5b6845153e3f8d76adf297d38479fcfd16ed871916fee8814cca05b85b458 + checksum: 740df4c92a1282e6be4c00c86c1a8ccfb93e767596e43f6da895aa5bab4a28fc3c2209f0327db34924a4a1e9db72bc4d3dddfcfc45cca0b218c9ccbf7d1b1445 languageName: node linkType: hard -"@noble/hashes@npm:1.0.0, @noble/hashes@npm:~1.0.0": - version: 1.0.0 - resolution: "@noble/hashes@npm:1.0.0" - checksum: bdf1c28a4b587e72ec6b0c504903239c6f96680b2c15a6d90d367512f468eeca12f2ee7bd25967a9529be2bedbf3f8d0a50c33368937f8dfef2a973d0661c7b5 +"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": + version: 1.1.0 + resolution: "@noble/curves@npm:1.1.0" + dependencies: + "@noble/hashes": 1.3.1 + checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 + 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" + checksum: 8ca080ce557b8f40fb2f78d3aedffd95825a415ac8e13d7ffe3643f8626a8c2d99a3e5975b555027ac24316d8b3c02a35b8358567c0c23af681e6573602aa434 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.1": + version: 1.3.1 + resolution: "@noble/hashes@npm:1.3.1" + checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 + languageName: node + linkType: hard + +"@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 languageName: node linkType: hard -"@noble/secp256k1@npm:1.5.5, @noble/secp256k1@npm:~1.5.2": - version: 1.5.5 - resolution: "@noble/secp256k1@npm:1.5.5" - checksum: 8a144e8469b29e94107ca4bcf442fc5d9410974239f8e42013f8604d602ab73cfc0c113c24170d41c25e2c40d6d1c46319c439c3bc26a7581c79060fabc3ea8c +"@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb languageName: node linkType: hard @@ -1106,7 +1607,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -1116,200 +1617,472 @@ __metadata: languageName: node linkType: hard -"@nomiclabs/ethereumjs-vm@npm:^4.2.2": +"@nomicfoundation/ethereumjs-block@npm:4.2.2, @nomicfoundation/ethereumjs-block@npm:^4.0.0": version: 4.2.2 - resolution: "@nomiclabs/ethereumjs-vm@npm:4.2.2" + resolution: "@nomicfoundation/ethereumjs-block@npm:4.2.2" dependencies: - async: ^2.1.2 - async-eventemitter: ^0.2.2 - core-js-pure: ^3.0.1 - ethereumjs-account: ^3.0.0 - ethereumjs-block: ^2.2.2 - ethereumjs-blockchain: ^4.0.3 - ethereumjs-common: ^1.5.0 - ethereumjs-tx: ^2.1.2 - ethereumjs-util: ^6.2.0 - fake-merkle-patricia-tree: ^1.0.1 - functional-red-black-tree: ^1.0.1 - merkle-patricia-tree: 3.0.0 - rustbn.js: ~0.2.0 - safe-buffer: ^5.1.1 - util.promisify: ^1.0.0 - checksum: 958e003813081947db14579af83f20139dc72c826fc128fade44cb87856eac32b9ff04be7ee20e708aa9ab8f2050df625d8edf298fbed5fbdbcc316c69ddd2fa + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-trie": 5.0.5 + "@nomicfoundation/ethereumjs-tx": 4.1.2 + "@nomicfoundation/ethereumjs-util": 8.0.6 + ethereum-cryptography: 0.1.3 + checksum: 174a251d9c4e0bb9c1a7a6e77c52f1b2b4708d8135dba55c1025776248258ce905e4383a79da0ce7ac4e67e03b6c56351ca634a771b5eae976ed97498fc163f9 languageName: node linkType: hard -"@nomiclabs/hardhat-ethers@npm:^2.0.5": - version: 2.0.5 - resolution: "@nomiclabs/hardhat-ethers@npm:2.0.5" - peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 - checksum: 07a5916f9fbb1efd24effc0d3949c70d1f45240d0bc4705653f1d378573c419c72d9a00f8db48b19c4aa27bd6c9dc0033aa40717cc9d77025a2cceeb59668463 +"@nomicfoundation/ethereumjs-blockchain@npm:6.2.2, @nomicfoundation/ethereumjs-blockchain@npm:^6.0.0": + version: 6.2.2 + resolution: "@nomicfoundation/ethereumjs-blockchain@npm:6.2.2" + dependencies: + "@nomicfoundation/ethereumjs-block": 4.2.2 + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-ethash": 2.0.5 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-trie": 5.0.5 + "@nomicfoundation/ethereumjs-util": 8.0.6 + abstract-level: ^1.0.3 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + level: ^8.0.0 + lru-cache: ^5.1.1 + memory-level: ^1.0.0 + checksum: 5933600bf005ec3e33f6fdd0b3582b80ed7eac8fa776fc86f21de8a6ac3614e3262c48ad3737015c19558165aecd7b13a8056e96afd61511d0605411e0264871 languageName: node linkType: hard -"@nomiclabs/hardhat-etherscan@npm:3.0.3": - version: 3.0.3 - resolution: "@nomiclabs/hardhat-etherscan@npm:3.0.3" +"@nomicfoundation/ethereumjs-common@npm:3.1.2, @nomicfoundation/ethereumjs-common@npm:^3.0.0": + version: 3.1.2 + resolution: "@nomicfoundation/ethereumjs-common@npm:3.1.2" dependencies: - "@ethersproject/abi": ^5.1.2 - "@ethersproject/address": ^5.0.2 - cbor: ^5.0.2 - debug: ^4.1.1 - fs-extra: ^7.0.1 - semver: ^6.3.0 - undici: ^4.14.1 - peerDependencies: - hardhat: ^2.0.4 - checksum: 6ce0856ad989c4cff5c90f7673d80fb7778ac1941db2bdf0998afca31c2439ed2e840fbad123a6f5958768243179af33a56f7b45919a598c8361b9a7cfdbaea6 + "@nomicfoundation/ethereumjs-util": 8.0.6 + crc-32: ^1.2.0 + checksum: b886e47bb4da26b42bf9e905c5f073db62d2ad1b740d50898012580b501868839fcf08430debe3fca927b4d73e01628c1b0b2e84401feb551245dacfac045404 languageName: node linkType: hard -"@nomiclabs/hardhat-waffle@npm:^2.0.3": - version: 2.0.3 - resolution: "@nomiclabs/hardhat-waffle@npm:2.0.3" +"@nomicfoundation/ethereumjs-ethash@npm:2.0.5": + version: 2.0.5 + resolution: "@nomicfoundation/ethereumjs-ethash@npm:2.0.5" dependencies: - "@types/sinon-chai": ^3.2.3 - "@types/web3": 1.0.19 - peerDependencies: - "@nomiclabs/hardhat-ethers": ^2.0.0 - ethereum-waffle: ^3.2.0 - ethers: ^5.0.0 - hardhat: ^2.0.0 - checksum: e68c9e13905caa54a10fa68d9ad7dc905c86469c879f91e999a1c4d039dd2f9fa43a8ed90ab975afb14a79cd6badeb60a7cf50dc6564660edd192614c55875ca + "@nomicfoundation/ethereumjs-block": 4.2.2 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-util": 8.0.6 + abstract-level: ^1.0.3 + bigint-crypto-utils: ^3.0.23 + ethereum-cryptography: 0.1.3 + checksum: 0b03c8771602cfa64c9d35e5686326d0bfecb7dc0874cd9ff737cae0ec401396187d8499c103b8858fed5b9bd930e132b8fd09d19b3f0649df36d7d0fdf4d27c languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/fs@npm:2.1.0" +"@nomicfoundation/ethereumjs-evm@npm:1.3.2, @nomicfoundation/ethereumjs-evm@npm:^1.0.0, @nomicfoundation/ethereumjs-evm@npm:^1.0.0-rc.3": + version: 1.3.2 + resolution: "@nomicfoundation/ethereumjs-evm@npm:1.3.2" dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-util": 8.0.6 + "@types/async-eventemitter": ^0.2.1 + async-eventemitter: ^0.2.4 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + mcl-wasm: ^0.7.1 + rustbn.js: ~0.2.0 + checksum: 4a051f36968574ffbee5d3c401ebf1c81899b69a0692c372fced67691fe18f26741f26d1781e79dfa52136af888e561d80de4fd7dd59000d640c51bd8b130023 languageName: node linkType: hard -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/move-file@npm:2.0.0" +"@nomicfoundation/ethereumjs-rlp@npm:4.0.3, @nomicfoundation/ethereumjs-rlp@npm:^4.0.0": + version: 4.0.3 + resolution: "@nomicfoundation/ethereumjs-rlp@npm:4.0.3" + bin: + rlp: bin/rlp + checksum: 14fc83701dd52323fae705786549ab07482ace315de69a586bb948b6f21ec529794cef8248af0b5c7e8f8b05fbadfbe222754b305841fa2189bfbc8f1eb064a2 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-statemanager@npm:1.0.5, @nomicfoundation/ethereumjs-statemanager@npm:^1.0.0": + version: 1.0.5 + resolution: "@nomicfoundation/ethereumjs-statemanager@npm:1.0.5" dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-trie": 5.0.5 + "@nomicfoundation/ethereumjs-util": 8.0.6 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + functional-red-black-tree: ^1.0.1 + checksum: 0f88743900b2211deb5d2393bf111ef63411ce533387a6d06c48cc9ac1f4fc38f968cdecc4712ebdafdebc3c4c2ce6bd1abd82989f4f4f515d3f571981d38f9f languageName: node linkType: hard -"@openzeppelin/contracts@npm:^4.5.0": - version: 4.5.0 - resolution: "@openzeppelin/contracts@npm:4.5.0" - checksum: 1c9c5dff041905771d2a83ac29c64dbf0b48603de43f74a34fb1358813d7c7bf259efe2f64e2112b410c5cca7a0b41aaedd882368be5f01a6d50a3ee0740f962 +"@nomicfoundation/ethereumjs-trie@npm:5.0.5, @nomicfoundation/ethereumjs-trie@npm:^5.0.0": + version: 5.0.5 + resolution: "@nomicfoundation/ethereumjs-trie@npm:5.0.5" + dependencies: + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-util": 8.0.6 + ethereum-cryptography: 0.1.3 + readable-stream: ^3.6.0 + checksum: bed56b55093275166c40d0aa097b32d348b3795cbfdc3797d48d136a578161431e70f30bcf453b74b52f77b897d79b61a3fb9d1abd10187c0cb7f25e40dea9c5 languageName: node linkType: hard -"@resolver-engine/core@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/core@npm:0.3.3" +"@nomicfoundation/ethereumjs-tx@npm:4.1.2, @nomicfoundation/ethereumjs-tx@npm:^4.0.0": + version: 4.1.2 + resolution: "@nomicfoundation/ethereumjs-tx@npm:4.1.2" dependencies: - debug: ^3.1.0 - is-url: ^1.2.4 - request: ^2.85.0 - checksum: e5ac586da2aeb7e384f6841821e528771fca533bf5cf38d7fd0851733bd9b70939e960459f2b841534ecdca6507c9aff71bd317f7481137d7b1d2e87ba15978a + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-util": 8.0.6 + ethereum-cryptography: 0.1.3 + checksum: 209622bdc56e5f1267e5d2de69ed18388b141edc568f739f0ed865aecfe96e07c381aab779ed0adacefeae4da5be64fa1110a02e481e9a7c343bf0d53f4fd1b9 languageName: node linkType: hard -"@resolver-engine/fs@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/fs@npm:0.3.3" +"@nomicfoundation/ethereumjs-util@npm:8.0.6, @nomicfoundation/ethereumjs-util@npm:^8.0.0, @nomicfoundation/ethereumjs-util@npm:^8.0.0-rc.3": + version: 8.0.6 + resolution: "@nomicfoundation/ethereumjs-util@npm:8.0.6" dependencies: - "@resolver-engine/core": ^0.3.3 - debug: ^3.1.0 - checksum: 734577b7864c3aceaaa80b4b74c252d92fb14a6f3c46dfc0a2d4658288dce1b38797578dd6a4ecbde88cbc4a366e8bdbc46451e282cb25dde8479548453c37a3 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + ethereum-cryptography: 0.1.3 + checksum: 7a51c2069702750d94bf6bc5afd4a26c50321fe42504339d5275b60974941451eb41232f8a08c307797bcd498f20a3b27074351a76abdfc36a5e74473a7eda01 languageName: node linkType: hard -"@resolver-engine/imports-fs@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/imports-fs@npm:0.3.3" +"@nomicfoundation/ethereumjs-vm@npm:^6.0.0, @nomicfoundation/ethereumjs-vm@npm:^6.0.0-rc.3": + version: 6.4.2 + resolution: "@nomicfoundation/ethereumjs-vm@npm:6.4.2" dependencies: - "@resolver-engine/fs": ^0.3.3 - "@resolver-engine/imports": ^0.3.3 - debug: ^3.1.0 - checksum: d24778788959f8a201bda0a91527cd1703dfbbf3675fd16bd3891046e3f12378be73233bb9d4da19c7247488be38daeab2bdf800317f70553a16fb62208ba2c7 + "@nomicfoundation/ethereumjs-block": 4.2.2 + "@nomicfoundation/ethereumjs-blockchain": 6.2.2 + "@nomicfoundation/ethereumjs-common": 3.1.2 + "@nomicfoundation/ethereumjs-evm": 1.3.2 + "@nomicfoundation/ethereumjs-rlp": 4.0.3 + "@nomicfoundation/ethereumjs-statemanager": 1.0.5 + "@nomicfoundation/ethereumjs-trie": 5.0.5 + "@nomicfoundation/ethereumjs-tx": 4.1.2 + "@nomicfoundation/ethereumjs-util": 8.0.6 + "@types/async-eventemitter": ^0.2.1 + async-eventemitter: ^0.2.4 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + functional-red-black-tree: ^1.0.1 + mcl-wasm: ^0.7.1 + rustbn.js: ~0.2.0 + checksum: 9138b8cce872a51fe2e378942c52fc6c54d8126ff094ba6bb78cbb630cafa20d7fbaa2b08bdcf7cad6de78e19ce68493ddbcc2e02acb7c803b866dc121274ea7 languageName: node linkType: hard -"@resolver-engine/imports@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/imports@npm:0.3.3" +"@nomicfoundation/hardhat-verify@npm:2.0.3": + version: 2.0.3 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.3" dependencies: - "@resolver-engine/core": ^0.3.3 - debug: ^3.1.0 - hosted-git-info: ^2.6.0 - path-browserify: ^1.0.0 - url: ^0.11.0 - checksum: 690cf550fd0608e849fcb9c20a08479ce405173f8d0b09141a5bd140c4ae7c887ebcb0532c4ca64b5c1d3039fe77cc94172b7afb51c1a8fe7722475c429e6944 + "@ethersproject/abi": ^5.1.2 + "@ethersproject/address": ^5.0.2 + cbor: ^8.1.0 + chalk: ^2.4.2 + debug: ^4.1.1 + lodash.clonedeep: ^4.5.0 + semver: ^6.3.0 + table: ^6.8.0 + undici: ^5.14.0 + peerDependencies: + hardhat: ^2.0.4 + checksum: 5cc3513d3385eb45c19081e79b1b2a67b13376f0d2c5dc2da07ee41886f82110b0af5b46e7fae6204db8a9d4dcda7e568a630a254bd5567779068bc29c22c86f languageName: node linkType: hard -"@scure/base@npm:~1.0.0": - version: 1.0.0 - resolution: "@scure/base@npm:1.0.0" - checksum: 4bff6fd46fa4afeff58410a157edbb93e6d1aaeca8be18ecd9ec439d5e86e297e52d9288ab269d0ec5f861d55cf1664f26bd14812dd631784f6a9cc11276ff91 +"@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 -"@scure/bip32@npm:1.0.1": - version: 1.0.1 - resolution: "@scure/bip32@npm:1.0.1" - dependencies: - "@noble/hashes": ~1.0.0 - "@noble/secp256k1": ~1.5.2 - "@scure/base": ~1.0.0 - checksum: 7b9f653b0db87264ccfd3b744b848997b3a5fd1b9b33565b4bb9e73dbebeaa2ad0c4278fc5d7ec509546a38507b82de961a6cf1af05caaf1b2e48ce65a77b00e +"@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 -"@scure/bip39@npm:1.0.0": - version: 1.0.0 - resolution: "@scure/bip39@npm:1.0.0" - dependencies: - "@noble/hashes": ~1.0.0 - "@scure/base": ~1.0.0 - checksum: e8711e4f22e5cb14a6e60874dba37a1c012ed26cf99f945454d8d0363441b0fe030b7861cc9e045539b1ba227ae262704fd58c2f46db1dd78af15d595d10316a +"@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 -"@sentry/core@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/core@npm:5.30.0" - dependencies: - "@sentry/hub": 5.30.0 - "@sentry/minimal": 5.30.0 - "@sentry/types": 5.30.0 - "@sentry/utils": 5.30.0 - tslib: ^1.9.3 - checksum: 8a2b22687e70d76fa4381bce215d770b6c08561c5ff5d6afe39c8c3c509c18ee7384ad0be3aee18d3a858a3c88e1d2821cf10eb5e05646376a33200903b56da2 +"@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 languageName: node linkType: hard -"@sentry/hub@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/hub@npm:5.30.0" - dependencies: - "@sentry/types": 5.30.0 - "@sentry/utils": 5.30.0 - tslib: ^1.9.3 - checksum: 09f778cc78765213f1e35a3ee6da3a8e02a706e8a7e5b7f84614707f4b665c7297b700a1849ab2ca1f02ede5884fd9ae893e58dc65f04f35ccdfee17e99ee93d +"@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 languageName: node linkType: hard -"@sentry/minimal@npm:5.30.0": - version: 5.30.0 - resolution: "@sentry/minimal@npm:5.30.0" - dependencies: - "@sentry/hub": 5.30.0 +"@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 + 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 + 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 + 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 + 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 + 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": 0.1.1 + "@nomicfoundation/solidity-analyzer-darwin-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-freebsd-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": 0.1.1 + 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": + optional: true + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": + 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: 038cffafd5769e25256b5b8bef88d95cc1c021274a65c020cf84aceb3237752a3b51645fdb0687f5516a2bdfebf166fcf50b08ab64857925100213e0654b266b + languageName: node + linkType: hard + +"@nomiclabs/hardhat-ethers@npm:^2.0.5": + version: 2.2.3 + resolution: "@nomiclabs/hardhat-ethers@npm:2.2.3" + peerDependencies: + ethers: ^5.0.0 + hardhat: ^2.0.0 + checksum: 72321317e55eb510306e04c42353c5f7ceb42d086fc76cc740120da6e1635b7ad5bbf23a8d6b02bd590754adcf646618933111624085ab249b1ff3482e773226 + languageName: node + linkType: hard + +"@nomiclabs/hardhat-waffle@npm:^2.0.3": + version: 2.0.6 + resolution: "@nomiclabs/hardhat-waffle@npm:2.0.6" + peerDependencies: + "@nomiclabs/hardhat-ethers": ^2.0.0 + "@types/sinon-chai": ^3.2.3 + ethereum-waffle: "*" + ethers: ^5.0.0 + hardhat: ^2.0.0 + checksum: e43592b135739c7f077a9d0a38a479a5512000e58f91d684e6a0d4f0894f8f826821d0b637e2cd7b646669ba12300fcb5e180bcc2473f5cc67d55f44ab809770 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:4.9.3, @openzeppelin/contracts@npm:^4.9.3": + version: 4.9.3 + resolution: "@openzeppelin/contracts@npm:4.9.3" + checksum: 4932063e733b35fa7669b9fe2053f69b062366c5c208b0c6cfa1ac451712100c78acff98120c3a4b88d94154c802be05d160d71f37e7d74cadbe150964458838 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@resolver-engine/core@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/core@npm:0.3.3" + dependencies: + debug: ^3.1.0 + is-url: ^1.2.4 + request: ^2.85.0 + checksum: e5ac586da2aeb7e384f6841821e528771fca533bf5cf38d7fd0851733bd9b70939e960459f2b841534ecdca6507c9aff71bd317f7481137d7b1d2e87ba15978a + languageName: node + linkType: hard + +"@resolver-engine/fs@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/fs@npm:0.3.3" + dependencies: + "@resolver-engine/core": ^0.3.3 + debug: ^3.1.0 + checksum: 734577b7864c3aceaaa80b4b74c252d92fb14a6f3c46dfc0a2d4658288dce1b38797578dd6a4ecbde88cbc4a366e8bdbc46451e282cb25dde8479548453c37a3 + languageName: node + linkType: hard + +"@resolver-engine/imports-fs@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/imports-fs@npm:0.3.3" + dependencies: + "@resolver-engine/fs": ^0.3.3 + "@resolver-engine/imports": ^0.3.3 + debug: ^3.1.0 + checksum: d24778788959f8a201bda0a91527cd1703dfbbf3675fd16bd3891046e3f12378be73233bb9d4da19c7247488be38daeab2bdf800317f70553a16fb62208ba2c7 + languageName: node + linkType: hard + +"@resolver-engine/imports@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/imports@npm:0.3.3" + dependencies: + "@resolver-engine/core": ^0.3.3 + debug: ^3.1.0 + hosted-git-info: ^2.6.0 + path-browserify: ^1.0.0 + url: ^0.11.0 + checksum: 690cf550fd0608e849fcb9c20a08479ce405173f8d0b09141a5bd140c4ae7c887ebcb0532c4ca64b5c1d3039fe77cc94172b7afb51c1a8fe7722475c429e6944 + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.1.5": + version: 1.1.5 + resolution: "@scure/bip32@npm:1.1.5" + dependencies: + "@noble/hashes": ~1.2.0 + "@noble/secp256k1": ~1.7.0 + "@scure/base": ~1.1.0 + checksum: b08494ab0d2b1efee7226d1b5100db5157ebea22a78bb87126982a76a186cb3048413e8be0ba2622d00d048a20acbba527af730de86c132a77de616eb9907a3b + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.1": + version: 1.3.1 + resolution: "@scure/bip32@npm:1.3.1" + dependencies: + "@noble/curves": ~1.1.0 + "@noble/hashes": ~1.3.1 + "@scure/base": ~1.1.0 + checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.1.1": + version: 1.1.1 + resolution: "@scure/bip39@npm:1.1.1" + dependencies: + "@noble/hashes": ~1.2.0 + "@scure/base": ~1.1.0 + checksum: fbb594c50696fa9c14e891d872f382e50a3f919b6c96c55ef2fb10c7102c546dafb8f099a62bd114c12a00525b595dcf7381846f383f0ddcedeaa6e210747d2f + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@sentry/core@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/core@npm:5.30.0" + dependencies: + "@sentry/hub": 5.30.0 + "@sentry/minimal": 5.30.0 + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + tslib: ^1.9.3 + checksum: 8a2b22687e70d76fa4381bce215d770b6c08561c5ff5d6afe39c8c3c509c18ee7384ad0be3aee18d3a858a3c88e1d2821cf10eb5e05646376a33200903b56da2 + languageName: node + linkType: hard + +"@sentry/hub@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/hub@npm:5.30.0" + dependencies: + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + tslib: ^1.9.3 + checksum: 09f778cc78765213f1e35a3ee6da3a8e02a706e8a7e5b7f84614707f4b665c7297b700a1849ab2ca1f02ede5884fd9ae893e58dc65f04f35ccdfee17e99ee93d + languageName: node + linkType: hard + +"@sentry/minimal@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/minimal@npm:5.30.0" + dependencies: + "@sentry/hub": 5.30.0 "@sentry/types": 5.30.0 tslib: ^1.9.3 checksum: 934650f6989ce51f425c7c4b4d4d9bfecface8162a36d21df8a241f780ab1716dd47b81e2170e4cc624797ed1eebe10f71e4876c1e25b787860daaef75ca7a0c @@ -1370,12 +2143,19 @@ __metadata: languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.14.0, @solidity-parser/parser@npm:^0.14.1": - version: 0.14.1 - resolution: "@solidity-parser/parser@npm:0.14.1" +"@sindresorhus/is@npm:^4.0.0, @sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + 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: ^0.5.0-alpha.4 - checksum: 616df6c31007710f2a99f8022fa5917968bbe83293cdc0154ba378aad405c0fc0b7af45cf2c99d159ff0b24b67c7a9bc01f80178d086c705682f2f8c7f771137 + checksum: 9e85a0d4f8a05a11db6022444b70b2f353e2358467b1cce44cdda703ae1e3c7337e1b8cbc2eec8e14a8f34f9c60b42f325e5fe9b3c934cc980e35091e292d7ee languageName: node linkType: hard @@ -1388,105 +2168,151 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: ^2.0.0 + checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 languageName: node linkType: hard -"@truffle/error@npm:^0.1.0": - version: 0.1.0 - resolution: "@truffle/error@npm:0.1.0" - checksum: bb4765ec18b0e3cc0d1a4d879bbd1ed84e2354cc976a721909b52d7659eb8d0eadc40c5e1011b167896e3967cfaa6af8d9f74e28c8c17d66e4aef02ca821ec24 +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: ^2.0.1 + checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + languageName: node + linkType: hard + +"@truffle/error@npm:^0.1.1": + version: 0.1.1 + resolution: "@truffle/error@npm:0.1.1" + checksum: 32c6faca2d221560456e54709b344533bacdbd575506c9feaeffe27ffb8720839a36fd2c0318da2be5bb824c7aa253d2697e4f5ff5d5b0674e937fdd6f024e07 languageName: node linkType: hard -"@truffle/interface-adapter@npm:^0.5.13": - version: 0.5.13 - resolution: "@truffle/interface-adapter@npm:0.5.13" +"@truffle/interface-adapter@npm:^0.5.25": + version: 0.5.37 + resolution: "@truffle/interface-adapter@npm:0.5.37" dependencies: bn.js: ^5.1.3 ethers: ^4.0.32 - web3: 1.5.3 - checksum: e8a4e2a3891a53f39372bc8de3dea801e8368cb37c678b98029cad8b408bab2f60124ccf0bc56642b886aed18da7fa1a5fd2cc312264250a294d398e54cb9e47 + web3: 1.10.0 + checksum: 96e8cd17fdf5561df04d2aad2943e7b0f599afb07c0ba750c26e5db0c069cbd2e4a545f2185f5362ccd9b0a46f936dd5b96b879a9fc51b73a5b6d0919c99e5cf languageName: node linkType: hard "@truffle/provider@npm:^0.2.24": - version: 0.2.51 - resolution: "@truffle/provider@npm:0.2.51" + version: 0.2.64 + resolution: "@truffle/provider@npm:0.2.64" + dependencies: + "@truffle/error": ^0.1.1 + "@truffle/interface-adapter": ^0.5.25 + debug: ^4.3.1 + web3: 1.7.4 + checksum: 049ed3d152dbca4c37e0f84e5b17ec866ace0cf642ffdf9d8328b05f37f87dee27dcbae1a6871e757628bd24480e4d29b97a120b0d86614c4b0068547b2381a6 + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.10": + version: 1.1.10 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" + dependencies: + node-gyp: latest + node-gyp-build: 4.4.0 + checksum: e1dc5e4fbf348a55e660c0055267021eb04cbbdb7f6b0ee983ad32cd4aae1200be448a2ca3963c7d19c7c936d42f66c1ff8b5e4e2332cb1a9e3f870ff818dce4 + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.9": + version: 1.1.9 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.9" dependencies: - "@truffle/error": ^0.1.0 - "@truffle/interface-adapter": ^0.5.13 - web3: 1.5.3 - checksum: 507c036fe30e225a33fbfe36d8e7841c5e54b71c48706c919f2db776d2604e7a3f7ecb1bccdb87e094857dd9936a3aeb47ef2015ff3e840027a819fd83f3da10 + node-gyp: latest + node-gyp-build: 4.3.0 + checksum: 627dcff2cae7afe31432646232518363869e89b300f90f88ca68d903d0bdc79119975a5bc338223c03c1a4484cfac6d9cf4413ef20933a69eee48dd925519165 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff languageName: node linkType: hard "@typechain/ethers-v5@npm:^10.0.0": - version: 10.0.0 - resolution: "@typechain/ethers-v5@npm:10.0.0" + version: 10.2.1 + resolution: "@typechain/ethers-v5@npm:10.2.1" dependencies: lodash: ^4.17.15 ts-essentials: ^7.0.1 peerDependencies: "@ethersproject/abi": ^5.0.0 - "@ethersproject/bytes": ^5.0.0 "@ethersproject/providers": ^5.0.0 ethers: ^5.1.3 - typechain: ^8.0.0 + typechain: ^8.1.1 typescript: ">=4.3.0" - checksum: f89a442829398d00e6c10c4cdebb16af3195cfbf6b0c062f24503ee1befc01c121a6d46edfd7b54aaf00c81b2e845730d2b556ecbaa6e15f360456f42fedb44d - languageName: node - linkType: hard - -"@typechain/ethers-v5@npm:^2.0.0": - version: 2.0.0 - resolution: "@typechain/ethers-v5@npm:2.0.0" - dependencies: - ethers: ^5.0.2 - peerDependencies: - ethers: ^5.0.0 - typechain: ^3.0.0 - checksum: 785430547f11de358c4018338f6f72aac113ece70d743aad410fff4eacbc3b4876d2e0d3389e1a56123afcf156f5c044ee72275342e45218448c23fe93d23915 + checksum: 852da4b1ff368ef87251111a5d50077de3d0fc12c519529269a74223740f8bda89297e67a5eb6c1f5b04ee23119566d6cbccf58264d32a83132be0f328a58d22 languageName: node linkType: hard "@typechain/hardhat@npm:^6.0.0": - version: 6.0.0 - resolution: "@typechain/hardhat@npm:6.0.0" + version: 6.1.6 + resolution: "@typechain/hardhat@npm:6.1.6" dependencies: fs-extra: ^9.1.0 - lodash: ^4.17.15 peerDependencies: "@ethersproject/abi": ^5.4.7 "@ethersproject/providers": ^5.4.7 - "@typechain/ethers-v5": ^10.0.0 + "@typechain/ethers-v5": ^10.2.1 ethers: ^5.4.7 - hardhat: ^2.0.10 - typechain: ^8.0.0 - checksum: 9011ad633cf96ccbf29c3ce458f2f7cd058f0635493d179dfe1fa47512cceaad7597f051525379edcd5db48910a79b910fbe58bd75e5ae43979833bbf34d5a15 + hardhat: ^2.9.9 + typechain: ^8.1.1 + checksum: f214bebf7860956230478cb92696ba757829cfd9dc65ac99c3bc7e539378310318d92b009054186f446595c8ffc1a81e9c6d028da0eb04253253049ea1b6e8d3 languageName: node linkType: hard "@types/abstract-leveldown@npm:*": - version: 7.2.0 - resolution: "@types/abstract-leveldown@npm:7.2.0" - checksum: f719ce076f65e47386ad412dbc6c89a6833a812ee2b2361b89a97480c69180cf9686effdabd0c76819ee5eaefeb18b19ae7dc54c06855261db0070a849124d90 + version: 7.2.5 + resolution: "@types/abstract-leveldown@npm:7.2.5" + checksum: 3a99b13c81a53a62b42bea9cff326880de3146b4eeff528b039be69a268515b3120a6c12142e96646fcb0a03c463f298998581e86d9ddb29fbea3612f40edb2b languageName: node linkType: hard -"@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0": - version: 5.1.0 - resolution: "@types/bn.js@npm:5.1.0" +"@types/async-eventemitter@npm:^0.2.1": + version: 0.2.4 + resolution: "@types/async-eventemitter@npm:0.2.4" dependencies: - "@types/node": "*" - checksum: 1dc1cbbd7a1e8bf3614752e9602f558762a901031f499f3055828b5e3e2bba16e5b88c27b3c4152ad795248fbe4086c731a5c4b0f29bb243f1875beeeabee59c + "@types/events": "*" + checksum: cee62e258cf02a45688a3f6f517b623270a9c2779dfd2f53b52e0efbcb0282d7078c3ce1fafb2af257aefdb892acc09ba51d93647930885414ec719437430bf7 languageName: node linkType: hard -"@types/bn.js@npm:^4.11.3, @types/bn.js@npm:^4.11.5": +"@types/bn.js@npm:^4.11.3": version: 4.11.6 resolution: "@types/bn.js@npm:4.11.6" dependencies: @@ -1495,17 +2321,31 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*": - version: 4.3.0 - resolution: "@types/chai@npm:4.3.0" - checksum: 3e393e094263db65df28a0123dc13f342937c1bab6cd173eae913d593c5b9a16b555713a08c34863a1fbf079aa7222b96197c70380a5c130549d6b2f6845a989 +"@types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.1": + version: 5.1.5 + resolution: "@types/bn.js@npm:5.1.5" + dependencies: + "@types/node": "*" + checksum: c87b28c4af74545624f8a3dae5294b16aa190c222626e8d4b2e327b33b1a3f1eeb43e7a24d914a9774bca43d8cd6e1cb0325c1f4b3a244af6693a024e1d918e6 + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.1, @types/cacheable-request@npm:^6.0.2": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": ^3.1.4 + "@types/node": "*" + "@types/responselike": ^1.0.0 + checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 languageName: node linkType: hard "@types/chai@npm:^4.3.1": - version: 4.3.1 - resolution: "@types/chai@npm:4.3.1" - checksum: 2ee246b76c469cd620a7a1876a73bc597074361b67d547b4bd96a0c1adb43597ede2d8589ab626192e14349d83cbb646cc11e2c179eeeb43ff11596de94d82c4 + version: 4.3.11 + resolution: "@types/chai@npm:4.3.11" + checksum: d0c05fe5d02b2e6bbca2bd4866a2ab20a59cf729bc04af0060e7a3277eaf2fb65651b90d4c74b0ebf1d152b4b1d49fa8e44143acef276a2bbaa7785fbe5642d3 languageName: node linkType: hard @@ -1518,6 +2358,13 @@ __metadata: languageName: node linkType: hard +"@types/events@npm:*": + version: 3.0.3 + resolution: "@types/events@npm:3.0.3" + checksum: 50af9312fab001fd6bd4bb3ff65830f940877e6778de140a92481a0d9bf5f4853d44ec758a8800ef60e0598ac43ed1b5688116a3c65906ae54e989278d6c7c82 + languageName: node + linkType: hard + "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -1537,10 +2384,27 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:*": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8 + languageName: node + linkType: hard + +"@types/inquirer@npm:^8.2.1": + version: 8.2.10 + resolution: "@types/inquirer@npm:8.2.10" + dependencies: + "@types/through": "*" + rxjs: ^7.2.0 + checksum: e576823345146e939e93e06fc5a81baa5231f0113b669191155cd5f5925b3e897d3a3c42c0be8b3e7b0b188b7e05d1cf42011cc2da4d123f7e58940caf9cd17f + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard @@ -1551,7 +2415,7 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:^3.1.1": +"@types/keyv@npm:^3.1.1, @types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" dependencies: @@ -1561,9 +2425,9 @@ __metadata: linkType: hard "@types/level-errors@npm:*": - version: 3.0.0 - resolution: "@types/level-errors@npm:3.0.0" - checksum: ad9392663439306677ac9cb704f8fa0b64c300dfea4f3494369eb78a2e09c194156cbab2b52c71a361a09b735d54a2de65195dcadba0ec7db1d14a320198133e + version: 3.0.2 + resolution: "@types/level-errors@npm:3.0.2" + checksum: 3d9b801f6499f795b60ac723c1b3f93ca105f20ed26966eeb606c804b10c65984c3233fb99914644d75a3223f80f220eca74fda316640a85a5b3d7572cd86925 languageName: node linkType: hard @@ -1578,7 +2442,7 @@ __metadata: languageName: node linkType: hard -"@types/lru-cache@npm:^5.1.0": +"@types/lru-cache@npm:5.1.1, @types/lru-cache@npm:^5.1.0": version: 5.1.1 resolution: "@types/lru-cache@npm:5.1.1" checksum: e1d6c0085f61b16ec5b3073ec76ad1be4844ea036561c3f145fc19f71f084b58a6eb600b14128aa95809d057d28f1d147c910186ae51219f58366ffd2ff2e118 @@ -1586,9 +2450,16 @@ __metadata: linkType: hard "@types/minimatch@npm:*": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 languageName: node linkType: hard @@ -1601,27 +2472,36 @@ __metadata: languageName: node linkType: hard -"@types/mocha@npm:^9.1.1": - version: 9.1.1 - resolution: "@types/mocha@npm:9.1.1" - checksum: 516077c0acd9806dc78317f88aaac0df5aaf0bdc2f63dfdadeabdf0b0137953b6ca65472e6ff7c30bc93ce4e0ae76eae70e8d46764b9a8eae4877a928b6ef49a +"@types/mocha@npm:^10.0.1": + version: 10.0.6 + resolution: "@types/mocha@npm:10.0.6" + checksum: f7c836cf6cf27dc0f5970d262591b56f2a3caeaec8cfdc612c12e1cfbb207f601f710ece207e935164d4e3343b93be5054d0db5544f31f453b3923775d82099f languageName: node linkType: hard -"@types/node-fetch@npm:^2.5.5": - version: 2.6.1 - resolution: "@types/node-fetch@npm:2.6.1" +"@types/node-fetch@npm:^2.6.1": + version: 2.6.9 + resolution: "@types/node-fetch@npm:2.6.9" dependencies: "@types/node": "*" - form-data: ^3.0.0 - checksum: a3e5d7f413d1638d795dff03f7b142b1b0e0c109ed210479000ce7b3ea11f9a6d89d9a024c96578d9249570c5fe5287a5f0f4aaba98199222230196ff2d6b283 + form-data: ^4.0.0 + checksum: 212269aff4b251477c13c33cee6cea23e4fd630be6c0bfa3714968cce7efd7055b52f2f82aab3394596d8c758335cc802e7c5fa3f775e7f2a472fa914c90dc15 languageName: node linkType: hard "@types/node@npm:*": - version: 17.0.23 - resolution: "@types/node@npm:17.0.23" - checksum: a3517554737cbb042e76c30d0e5482192ac4d9bea0eeb086e2622d9cabf460a0eb52a696b99fcd18e7fcc93c96db6cc7ae507f6608f256ef0b5c1d8c87a5a470 + version: 20.10.4 + resolution: "@types/node@npm:20.10.4" + dependencies: + undici-types: ~5.26.4 + checksum: 054b296417e771ab524bea63cf3289559c6bdf290d45428f7cc68e9b00030ff7a0ece47b8c99a26b4f47a443919813bcf42beadff2f0bea7d8125fa541d92eb0 + languageName: node + linkType: hard + +"@types/node@npm:11.11.6": + version: 11.11.6 + resolution: "@types/node@npm:11.11.6" + checksum: 075f1c011cf568e49701419acbcb55c24906b3bb5a34d9412a3b88f228a7a78401a5ad4d3e1cd6855c99aaea5ef96e37fc86ca097e50f06da92cf822befc1fff languageName: node linkType: hard @@ -1632,17 +2512,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^12.12.6": - version: 12.20.47 - resolution: "@types/node@npm:12.20.47" - checksum: 97487af02fada4342e1bd47f9c9ebf601c12b85cbf17056ba73a315339ae996490403f2d4d1d799d8078cfe43a59e33370b4a5ae2d4fb79dd02359f4691934b4 +"@types/node@npm:^12.12.6, @types/node@npm:^12.7.1": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 languageName: node linkType: hard "@types/node@npm:^17.0.25": - version: 17.0.25 - resolution: "@types/node@npm:17.0.25" - checksum: 6a820bd624e69ea772f52a6cdb326484eff5829443dc981939373929ade109f58c21698b9f0a831bd6ceea799e722a75dc49c5fa7a6bc32a81e1cbdfc6507b64 + version: 17.0.45 + resolution: "@types/node@npm:17.0.45" + checksum: aa04366b9103b7d6cfd6b2ef64182e0eaa7d4462c3f817618486ea0422984c51fc69fd0d436eae6c9e696ddfdbec9ccaa27a917f7c2e8c75c5d57827fe3d95e8 languageName: node linkType: hard @@ -1653,111 +2533,90 @@ __metadata: languageName: node linkType: hard +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + "@types/pbkdf2@npm:^3.0.0": - version: 3.1.0 - resolution: "@types/pbkdf2@npm:3.1.0" + version: 3.1.2 + resolution: "@types/pbkdf2@npm:3.1.2" dependencies: "@types/node": "*" - checksum: d15024b1957c21cf3b8887329d9bd8dfde754cf13a09d76ae25f1391cfc62bb8b8d7b760773c5dbaa748172fba8b3e0c3dbe962af6ccbd69b76df12a48dfba40 + checksum: bebe1e596cbbe5f7d2726a58859e61986c5a42459048e29cb7f2d4d764be6bbb0844572fd5d70ca8955a8a17e8b4ed80984fc4903e165d9efb8807a3fbb051aa languageName: node linkType: hard "@types/prettier@npm:^2.1.1": - version: 2.6.0 - resolution: "@types/prettier@npm:2.6.0" - checksum: 946f1f82ce6f31664e023a5d65931c31b7d677b454f528f67dce851d72e7fcfe713076f4251b16c3646eecf1545f5f5b909b4962966341ed9ddf5b80113b3674 + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 languageName: node linkType: hard "@types/qs@npm:^6.2.31": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba - languageName: node - linkType: hard - -"@types/resolve@npm:^0.0.8": - version: 0.0.8 - resolution: "@types/resolve@npm:0.0.8" - dependencies: - "@types/node": "*" - checksum: f241bb773ab14b14500623ac3b57c52006ce32b20426b6d8bf2fe5fdc0344f42c77ac0f94ff57b443ae1d320a1a86c62b4e47239f0321699404402fbeb24bad6 + version: 6.9.10 + resolution: "@types/qs@npm:6.9.10" + checksum: 3e479ee056bd2b60894baa119d12ecd33f20a25231b836af04654e784c886f28a356477630430152a86fba253da65d7ecd18acffbc2a8877a336e75aa0272c67 languageName: node linkType: hard "@types/responselike@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/responselike@npm:1.0.0" + version: 1.0.3 + resolution: "@types/responselike@npm:1.0.3" dependencies: "@types/node": "*" - checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 + checksum: 6ac4b35723429b11b117e813c7acc42c3af8b5554caaf1fc750404c1ae59f9b7376bc69b9e9e194a5a97357a597c2228b7173d317320f0360d617b6425212f58 languageName: node linkType: hard "@types/secp256k1@npm:^4.0.1": - version: 4.0.3 - resolution: "@types/secp256k1@npm:4.0.3" + version: 4.0.6 + resolution: "@types/secp256k1@npm:4.0.6" dependencies: "@types/node": "*" - checksum: 1bd10b9afa724084b655dc81b7b315def3d2d0e272014ef16009fa76e17537411c07c0695fdea412bc7b36d2a02687f5fea33522d55b8ef29eda42992f812913 - languageName: node - linkType: hard - -"@types/sinon-chai@npm:^3.2.3": - version: 3.2.8 - resolution: "@types/sinon-chai@npm:3.2.8" - dependencies: - "@types/chai": "*" - "@types/sinon": "*" - checksum: a0f7a8cef24904db25a695f3c3adcc03ae72bab89a954c9b6e23fe7e541228e67fe4119cec069e8b36c80e9af33102b626129ff538efade9391cc0f65f1d4933 - languageName: node - linkType: hard - -"@types/sinon@npm:*": - version: 10.0.11 - resolution: "@types/sinon@npm:10.0.11" - dependencies: - "@types/sinonjs__fake-timers": "*" - checksum: 196f3e26985dca5dfb593592e4b64463e536c047a9f43aa2b328b16024a3b0e3fb27b7a3f3972c6ef75749f55012737eb6c63a1c2e9782b7fe5cbbd25f75fd62 + checksum: 984494caf49a4ce99fda2b9ea1840eb47af946b8c2737314108949bcc0c06b4880e871296bd49ed6ea4c8423e3a302ad79fec43abfc987330e7eb98f0c4e8ba4 languageName: node linkType: hard -"@types/sinonjs__fake-timers@npm:*": - version: 8.1.2 - resolution: "@types/sinonjs__fake-timers@npm:8.1.2" - checksum: bbc73a5ab6c0ec974929392f3d6e1e8db4ebad97ec506d785301e1c3d8a4f98a35b1aa95b97035daef02886fd8efd7788a2fa3ced2ec7105988bfd8dce61eedd +"@types/seedrandom@npm:3.0.1": + version: 3.0.1 + resolution: "@types/seedrandom@npm:3.0.1" + checksum: d9755452f224a4f5072a1d8738da6c9de3039fc59a2a449b1f658e51087be7b48ada49bcabc8b0f16633c095f55598c32fcd072c448858422a2f6a0566569e4c languageName: node linkType: hard -"@types/underscore@npm:*": - version: 1.11.4 - resolution: "@types/underscore@npm:1.11.4" - checksum: db9f8486bc851b732259e51f42d62aad1ae2158be5724612dc125ece5f5d61c51447f9dea28284c2a0f79cb95e788d01cb5ce97709880019213e69fab0dd1696 +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": + version: 7.5.6 + resolution: "@types/semver@npm:7.5.6" + checksum: 563a0120ec0efcc326567db2ed920d5d98346f3638b6324ea6b50222b96f02a8add3c51a916b6897b51523aad8ac227d21d3dcf8913559f1bfc6c15b14d23037 languageName: node linkType: hard -"@types/web3@npm:1.0.19": - version: 1.0.19 - resolution: "@types/web3@npm:1.0.19" +"@types/through@npm:*": + version: 0.0.33 + resolution: "@types/through@npm:0.0.33" dependencies: - "@types/bn.js": "*" - "@types/underscore": "*" - checksum: 25a78e80052cca8abe5edf15c0ae92854d00d1bec15283486a2535ab673345b0be090e39cc9a86822be17ddd812fa76cbfd869be21bb944d2faaf2922e2a836a + "@types/node": "*" + checksum: fd0b73f873a64ed5366d1d757c42e5dbbb2201002667c8958eda7ca02fff09d73de91360572db465ee00240c32d50c6039ea736d8eca374300f9664f93e8da39 languageName: node linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.20.0" + version: 5.62.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" dependencies: - "@typescript-eslint/scope-manager": 5.20.0 - "@typescript-eslint/type-utils": 5.20.0 - "@typescript-eslint/utils": 5.20.0 - debug: ^4.3.2 - functional-red-black-tree: ^1.0.1 - ignore: ^5.1.8 - regexpp: ^3.2.0 - semver: ^7.3.5 + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/type-utils": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: "@typescript-eslint/parser": ^5.0.0 @@ -1765,108 +2624,122 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 276251535b38dc5e9165c86d7f9b0a6d601cef82f02dc2a94b4133ad08d8825cb3e27bfd3b686b21b0627e05fa25c5e456c89cc3a66583b109637d1cf2d6c06a + checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:^5.0.0": + version: 5.62.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/utils": 5.62.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ce55d9f74eac5cb94d66d5db9ead9a5d734f4301519fb5956a57f4b405a5318a115b0316195a3c039e0111489138680411709cb769085d71e1e1db1376ea0949 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/parser@npm:5.20.0" + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" dependencies: - "@typescript-eslint/scope-manager": 5.20.0 - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/typescript-estree": 5.20.0 - debug: ^4.3.2 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 + debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 0a72c5c0fbea3ef30332a20a7fc673461a4106225d7d4b78e1d4eb3cd0343d26132deb0cdaa17fd31b90711c63978996216faf1fb9a7abdee367e3b42f812e21 + checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/scope-manager@npm:5.20.0" +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/visitor-keys": 5.20.0 - checksum: 904fd43f559dc2579958496ffad837eca124940b4a172666f0ea54ed606074d9ec7d2bec0f2141c3f9a8b894dd2644817cb86809e79a7a73ecba2b7babcdb5c9 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/type-utils@npm:5.20.0" +"@typescript-eslint/type-utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/type-utils@npm:5.62.0" dependencies: - "@typescript-eslint/utils": 5.20.0 - debug: ^4.3.2 + "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: eslint: "*" peerDependenciesMeta: typescript: optional: true - checksum: c9c436122b715d144edae9d36ebd34e9b02b282ada829382770e15170c58f4f27cfde2d5847ea3c4a1b70ca42e2460a204e920eea50b3d05e9d342e8836d4d12 + checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/types@npm:5.20.0" - checksum: d7f6e51e23f59feee8857340828c47a98a0dd5eaa1b045e936dc11199b55754cf78ae5cd8d56c1fafb1b5a40a6f472c1ac921072951217caffe3f06a717fa61c +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.20.0" +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/visitor-keys": 5.20.0 - debug: ^4.3.2 - globby: ^11.0.4 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + debug: ^4.3.4 + globby: ^11.1.0 is-glob: ^4.0.3 - semver: ^7.3.5 + semver: ^7.3.7 tsutils: ^3.21.0 peerDependenciesMeta: typescript: optional: true - checksum: 2b709292b7df3675d1f8eaf2f4e1ecf491f70fc525012c6a0fb5164aa893c165317b0a419022b8b00aaed502864d5b5b84092b58a9950d2633248e8d7627abd8 + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/utils@npm:5.20.0" +"@typescript-eslint/utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" dependencies: + "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.20.0 - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/typescript-estree": 5.20.0 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: e387cf96124e34d079804220c5cb9134148fb3efc68d852a344453e285e3016e0b7e37b11308ef58c0e7afc638f145002cebc27c5da0fd03e0c074ff97d8210e + checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.20.0" +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.20.0 - eslint-visitor-keys: ^3.0.0 - checksum: 1e1aa5f14fd60f1846ee26947d571953898dc82eb635a7eab3984c6b7db9bb8897743416713a129cc95c8cd63325cc0c64b3935d264f73100911fc5da76fc65f + "@typescript-eslint/types": 5.62.0 + eslint-visitor-keys: ^3.3.0 + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 languageName: node linkType: hard -"@ungap/promise-all-settled@npm:1.1.2": - version: 1.1.2 - resolution: "@ungap/promise-all-settled@npm:1.1.2" - checksum: 08d37fdfa23a6fe8139f1305313562ebad973f3fac01bcce2773b2bda5bcb0146dfdcf3cb6a722cf0a5f2ca0bc56a827eac8f1e7b3beddc548f654addf1fc34c +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 languageName: node linkType: hard @@ -1894,28 +2767,30 @@ __metadata: languageName: node linkType: hard -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a +"@zetachain/networks@npm:^4.0.0": + version: 4.0.0 + resolution: "@zetachain/networks@npm:4.0.0" + dependencies: + dotenv: ^16.1.4 + checksum: 2013304de6959e9b33a2e4a23f49dd13ce9747bf4084332fda700ca32f719931998985a65e6e7c017c0919ff9167899a0529dbfaec274917aa8c28e6ac4faa0a languageName: node linkType: hard -"@zetachain/addresses@workspace:^, @zetachain/addresses@workspace:packages/addresses": - version: 0.0.0-use.local - resolution: "@zetachain/addresses@workspace:packages/addresses" - languageName: unknown - linkType: soft +"@zetachain/protocol-contracts@npm:^4.0.1": + version: 4.0.1 + resolution: "@zetachain/protocol-contracts@npm:4.0.1" + checksum: 8d21c901001a735a4a43c4dd9eb90bc8121822bec1d51f0267061f771431691b4bcd7fcdaedb0e7b8bbd0d318937c86972076bf846e5c67506dbab389f9407ff + languageName: node + linkType: hard -"@zetachain/example-contracts@workspace:packages/example-contracts": +"@zetachain/zeta-app-contracts@workspace:packages/zeta-app-contracts": version: 0.0.0-use.local - resolution: "@zetachain/example-contracts@workspace:packages/example-contracts" + resolution: "@zetachain/zeta-app-contracts@workspace:packages/zeta-app-contracts" dependencies: - "@defi-wonderland/smock": ^2.0.7 - "@openzeppelin/contracts": ^4.5.0 - "@uniswap/v2-periphery": 1.1.0-beta.0 - "@zetachain/addresses": "workspace:^" - "@zetachain/protocol-contracts": "workspace:^" + "@defi-wonderland/smock": ^2.3.4 + "@openzeppelin/contracts": ^4.9.3 + "@zetachain/networks": ^4.0.0 + "@zetachain/protocol-contracts": ^4.0.1 ethers: 5.6.8 hardhat-gas-reporter: ^1.0.8 solidity-coverage: ^0.7.20 @@ -1923,12 +2798,17 @@ __metadata: languageName: unknown linkType: soft -"@zetachain/protocol-contracts@workspace:^, @zetachain/protocol-contracts@workspace:packages/protocol-contracts": +"@zetachain/zevm-app-contracts@workspace:packages/zevm-app-contracts": version: 0.0.0-use.local - resolution: "@zetachain/protocol-contracts@workspace:packages/protocol-contracts" + resolution: "@zetachain/zevm-app-contracts@workspace:packages/zevm-app-contracts" dependencies: - "@openzeppelin/contracts": ^4.5.0 + "@openzeppelin/contracts": 4.9.3 + "@uniswap/v2-periphery": 1.1.0-beta.0 + "@zetachain/networks": ^4.0.0 + "@zetachain/protocol-contracts": ^4.0.1 ethers: 5.6.8 + hardhat-gas-reporter: ^1.0.8 + solidity-coverage: ^0.7.20 tsconfig-paths: ^3.14.1 languageName: unknown linkType: soft @@ -1947,6 +2827,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" @@ -1956,30 +2843,25 @@ __metadata: languageName: node linkType: hard -"abstract-leveldown@npm:3.0.0": - version: 3.0.0 - resolution: "abstract-leveldown@npm:3.0.0" - dependencies: - xtend: ~4.0.0 - checksum: 1d3e65fc2288fd17955df3b0887fdd3d4fa7fcd816062014f872ea12a1e86e886151cbdc36abd2f243a810b7999252eaa30adf636ffe1be3103493ab37277e49 +"abortcontroller-polyfill@npm:^1.7.3": + version: 1.7.5 + resolution: "abortcontroller-polyfill@npm:1.7.5" + checksum: daf4169f4228ae0e4f4dbcfa782e501b923667f2666b7c55bd3b7664e5d6b100e333a93371173985fdf21f65d7dfba15bdb2e6031bdc9e57e4ce0297147da3aa languageName: node linkType: hard -"abstract-leveldown@npm:^2.4.1, abstract-leveldown@npm:~2.7.1": - version: 2.7.2 - resolution: "abstract-leveldown@npm:2.7.2" - dependencies: - xtend: ~4.0.0 - checksum: 97c45a05d8b5d24edf3855c1f9a19f919c4a189e387929745289a53116c80638339a7d4e50ad76d0ad2900166adaeaf2e0350dcdcd453e783cd8f04fd9bea17a - languageName: node - linkType: hard - -"abstract-leveldown@npm:^5.0.0, abstract-leveldown@npm:~5.0.0": - version: 5.0.0 - resolution: "abstract-leveldown@npm:5.0.0" +"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": + version: 1.0.3 + resolution: "abstract-level@npm:1.0.3" dependencies: - xtend: ~4.0.0 - checksum: d55d03cc7fad011d5fea30d26504b1a76123ec8edd3623d21f80ce0561c610b7ed1e00eb037c14746ec2b7ad8638586024f11d4a1476beee2c470c8cf27e3586 + buffer: ^6.0.3 + catering: ^2.1.0 + is-buffer: ^2.0.5 + level-supports: ^4.0.0 + level-transcoder: ^1.0.1 + module-error: ^1.0.1 + queue-microtask: ^1.2.3 + checksum: 70d61a3924526ebc257b138992052f9ff571a6cee5a7660836e37a1cc7081273c3acf465dd2f5e1897b38dc743a6fd9dba14a5d8a2a9d39e5787cd3da99f301d languageName: node linkType: hard @@ -1996,12 +2878,17 @@ __metadata: languageName: node linkType: hard -"abstract-leveldown@npm:~2.6.0": - version: 2.6.3 - resolution: "abstract-leveldown@npm:2.6.3" +"abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" dependencies: - xtend: ~4.0.0 - checksum: 87b18580467c303c34c305620e2c3227010f64187d6b1cd60c2d1b9adc058b0c4de716e111e9493aaad0080cb7836601032c5084990cd713f86b6a78f1fab791 + buffer: ^6.0.3 + catering: ^2.0.0 + is-buffer: ^2.0.5 + level-concat-iterator: ^3.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 languageName: node linkType: hard @@ -2028,7 +2915,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1": +"acorn-jsx@npm:^5.2.0, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -2037,19 +2924,35 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.7.0": - version: 8.7.0 - resolution: "acorn@npm:8.7.0" +"acorn-walk@npm:^8.1.1": + version: 8.3.1 + resolution: "acorn-walk@npm:8.3.1" + checksum: 5c8926ddb5400bc825b6baca782931f9df4ace603ba1a517f5243290fd9cdb089d52877840687b5d5c939591ebc314e2e63721514feaa37c6829c828f2b940ce + languageName: node + linkType: hard + +"acorn@npm:^7.1.1": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" bin: acorn: bin/acorn - checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0 + checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.11.2 + resolution: "acorn@npm:8.11.2" + bin: + acorn: bin/acorn + checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 languageName: node linkType: hard "address@npm:^1.0.1": - version: 1.1.2 - resolution: "address@npm:1.1.2" - checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 + version: 1.2.2 + resolution: "address@npm:1.2.2" + checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 languageName: node linkType: hard @@ -2067,14 +2970,7 @@ __metadata: languageName: node linkType: hard -"aes-js@npm:^3.1.1": - version: 3.1.2 - resolution: "aes-js@npm:3.1.2" - checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": +"agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -2083,14 +2979,12 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f languageName: node linkType: hard @@ -2104,7 +2998,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4": +"ajv@npm:^6.12.3, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -2116,6 +3010,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.1": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + "amdefine@npm:>=0.0.4": version: 1.0.1 resolution: "amdefine@npm:1.0.1" @@ -2123,21 +3029,21 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:3.2.3": - version: 3.2.3 - resolution: "ansi-colors@npm:3.2.3" - checksum: 018a92fbf8b143feb9e00559655072598902ff2cdfa07dbe24b933c70ae04845e3dda2c091ab128920fc50b3db06c3f09947f49fcb287d53beb6c5869b8bb32b - languageName: node - linkType: hard - -"ansi-colors@npm:4.1.1, ansi-colors@npm:^4.1.1": +"ansi-colors@npm:4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 languageName: node linkType: hard -"ansi-escapes@npm:^4.3.0": +"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -2146,13 +3052,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - "ansi-regex@npm:^3.0.0": version: 3.0.1 resolution: "ansi-regex@npm:3.0.1" @@ -2160,13 +3059,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2174,14 +3066,14 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -2199,37 +3091,36 @@ __metadata: languageName: node linkType: hard -"antlr4ts@npm:^0.5.0-alpha.4": - version: 0.5.0-alpha.4 - resolution: "antlr4ts@npm:0.5.0-alpha.4" - checksum: 37948499d59477f5b5a8ea71dfb8b5330e71d5a7cee60f57351dd744219b8619fa6aac1a5b6ec1a9991846e8ddc9ca47680eb166c59b44333369b3115e7aa358 +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard -"anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": - version: 3.1.2 - resolution: "anymatch@npm:3.1.2" +"antlr4ts@npm:^0.5.0-alpha.4": + version: 0.5.0-dev + resolution: "antlr4ts@npm:0.5.0-dev" dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 + source-map-support: ^0.5.16 + checksum: 640dae2229124372b0329315e9614ae983bb80b1af237d8c0b3e90a2d85fb534e851c51d65d1897c92b36d27851d041ad8d95aab44af19cf7355b3ad11a3ddbf languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard -"are-we-there-yet@npm:^3.0.0": - version: 3.0.0 - resolution: "are-we-there-yet@npm:3.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 languageName: node linkType: hard @@ -2249,45 +3140,6 @@ __metadata: languageName: node linkType: hard -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.1.0": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 - languageName: node - linkType: hard - -"array-back@npm:^1.0.3, array-back@npm:^1.0.4": - version: 1.0.4 - resolution: "array-back@npm:1.0.4" - dependencies: - typical: ^2.6.0 - checksum: 37a8be4cd4920b3d07bdbef40dae83bb37948f5d49601da98a6e48ba5496e9a0008e7f3f2184bcf4d3501bd371a048c9bdca7dc3cc5c3d5b1eb189bbba7b55db - languageName: node - linkType: hard - -"array-back@npm:^2.0.0": - version: 2.0.0 - resolution: "array-back@npm:2.0.0" - dependencies: - typical: ^2.6.1 - checksum: ab36ab3504b25116b47541fb0ac78ff13d1e991f33d98c361edd3aada3ed818a900b619bd67b195dd4e41b9256c27e8cdd6a69ece507e482f1207d07670ed6bd - 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" @@ -2295,13 +3147,23 @@ __metadata: languageName: node linkType: hard -"array-back@npm:^4.0.1": +"array-back@npm:^4.0.1, array-back@npm:^4.0.2": version: 4.0.2 resolution: "array-back@npm:4.0.2" checksum: f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -2309,16 +3171,16 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.4": - version: 3.1.4 - resolution: "array-includes@npm:3.1.4" +"array-includes@npm:^3.1.7": + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 is-string: ^1.0.7 - checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 + checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc languageName: node linkType: hard @@ -2336,25 +3198,59 @@ __metadata: languageName: node linkType: hard -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.flat@npm:1.2.5" +"array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.2": + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-array-buffer: ^3.0.2 + is-shared-array-buffer: ^1.0.2 + checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 languageName: node linkType: hard -"arrify@npm:^1.0.0": +"arrify@npm:^1.0.0, arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 @@ -2403,14 +3299,14 @@ __metadata: languageName: node linkType: hard -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 languageName: node linkType: hard -"async-eventemitter@npm:^0.2.2, async-eventemitter@npm:^0.2.4": +"async-eventemitter@npm:^0.2.4": version: 0.2.4 resolution: "async-eventemitter@npm:0.2.4" dependencies: @@ -2419,717 +3315,72 @@ __metadata: languageName: node linkType: hard -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b - languageName: node - linkType: hard - -"async@npm:1.x, async@npm:^1.4.2": - version: 1.5.2 - resolution: "async@npm:1.5.2" - checksum: fe5d6214d8f15bd51eee5ae8ec5079b228b86d2d595f47b16369dec2e11b3ff75a567bb5f70d12d79006665fbbb7ee0a7ec0e388524eefd454ecbe651c124ebd - languageName: node - linkType: hard - -"async@npm:2.6.2": - version: 2.6.2 - resolution: "async@npm:2.6.2" - dependencies: - lodash: ^4.17.11 - checksum: e5e90a3bcc4d9bf964bfc6b77d63b8f5bee8c14e9a51c3317dbcace44d5b6b1fe01cd4fd347449704a107da7fcd25e1382ee8545957b2702782ae720605cf7a4 - languageName: node - linkType: hard - -"async@npm:^2.0.1, async@npm:^2.1.2, async@npm:^2.4.0, async@npm:^2.5.0, async@npm:^2.6.1": - version: 2.6.3 - resolution: "async@npm:2.6.3" - dependencies: - lodash: ^4.17.14 - checksum: 5e5561ff8fca807e88738533d620488ac03a5c43fce6c937451f7e35f943d33ad06c24af3f681a48cca3d2b0002b3118faff0a128dc89438a9bf0226f712c499 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.11.0 - resolution: "aws4@npm:1.11.0" - checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f - languageName: node - linkType: hard - -"babel-code-frame@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-code-frame@npm:6.26.0" - dependencies: - chalk: ^1.1.3 - esutils: ^2.0.2 - js-tokens: ^3.0.2 - checksum: 9410c3d5a921eb02fa409675d1a758e493323a49e7b9dddb7a2a24d47e61d39ab1129dd29f9175836eac9ce8b1d4c0a0718fcdc57ce0b865b529fd250dbab313 - languageName: node - linkType: hard - -"babel-core@npm:^6.0.14, babel-core@npm:^6.26.0": - version: 6.26.3 - resolution: "babel-core@npm:6.26.3" - dependencies: - babel-code-frame: ^6.26.0 - babel-generator: ^6.26.0 - babel-helpers: ^6.24.1 - babel-messages: ^6.23.0 - babel-register: ^6.26.0 - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - convert-source-map: ^1.5.1 - debug: ^2.6.9 - json5: ^0.5.1 - lodash: ^4.17.4 - minimatch: ^3.0.4 - path-is-absolute: ^1.0.1 - private: ^0.1.8 - slash: ^1.0.0 - source-map: ^0.5.7 - checksum: 3d6a37e5c69ea7f7d66c2a261cbd7219197f2f938700e6ebbabb6d84a03f2bf86691ffa066866dcb49ba6c4bd702d347c9e0e147660847d709705cf43c964752 - languageName: node - linkType: hard - -"babel-generator@npm:^6.26.0": - version: 6.26.1 - resolution: "babel-generator@npm:6.26.1" - dependencies: - babel-messages: ^6.23.0 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - detect-indent: ^4.0.0 - jsesc: ^1.3.0 - lodash: ^4.17.4 - source-map: ^0.5.7 - trim-right: ^1.0.1 - checksum: 5397f4d4d1243e7157e3336be96c10fcb1f29f73bf2d9842229c71764d9a6431397d249483a38c4d8b1581459e67be4df6f32d26b1666f02d0f5bfc2c2f25193 - languageName: node - linkType: hard - -"babel-helper-builder-binary-assignment-operator-visitor@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-builder-binary-assignment-operator-visitor@npm:6.24.1" - dependencies: - babel-helper-explode-assignable-expression: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 6ef49597837d042980e78284df014972daac7f1f1f2635d978bb2d13990304322f5135f27b8f2d6eb8c4c2459b496ec76e21544e26afbb5dec88f53089e17476 - languageName: node - linkType: hard - -"babel-helper-call-delegate@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-call-delegate@npm:6.24.1" - dependencies: - babel-helper-hoist-variables: ^6.24.1 - babel-runtime: ^6.22.0 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: b6277d6e48c10cf416632f6dfbac77bdf6ba8ec4ac2f6359a77d6b731dae941c2a3ec7f35e1eba78aad2a7e0838197731d1ef75af529055096c4cb7d96432c88 - languageName: node - linkType: hard - -"babel-helper-define-map@npm:^6.24.1": - version: 6.26.0 - resolution: "babel-helper-define-map@npm:6.26.0" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: 08e201eb009a7dbd020232fb7468ac772ebb8cfd33ec9a41113a54f4c90fd1e3474497783d635b8f87d797706323ca0c1758c516a630b0c95277112fc2fe4f13 - languageName: node - linkType: hard - -"babel-helper-explode-assignable-expression@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-explode-assignable-expression@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: 1bafdb51ce3dd95cf25d712d24a0c3c2ae02ff58118c77462f14ede4d8161aaee42c5c759c3d3a3344a5851b8b0f8d16b395713413b8194e1c3264fc5b12b754 - languageName: node - linkType: hard - -"babel-helper-function-name@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-function-name@npm:6.24.1" - dependencies: - babel-helper-get-function-arity: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: d651db9e0b29e135877e90e7858405750a684220d22a6f7c78bb163305a1b322cc1c8bea1bc617625c34d92d0927fdbaa49ee46822e2f86b524eced4c88c7ff0 - languageName: node - linkType: hard - -"babel-helper-get-function-arity@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-get-function-arity@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 37e344d6c5c00b67a3b378490a5d7ba924bab1c2ccd6ecf1b7da96ca679be12d75fbec6279366ae9772e482fb06a7b48293954dd79cbeba9b947e2db67252fbd - languageName: node - linkType: hard - -"babel-helper-hoist-variables@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-hoist-variables@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 6af1c165d5f0ad192df07daa194d13de77572bd914d2fc9a270d56b93b2705d98eebabf412b1211505535af131fbe95886fcfad8b3a07b4d501c24b9cb8e57fe - languageName: node - linkType: hard - -"babel-helper-optimise-call-expression@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-optimise-call-expression@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 16e6aba819b473dbf013391f759497df9f57bc7060bc4e5f7f6b60fb03670eb1dec65dd2227601d58f151e9d647e1f676a12466f5e6674379978820fa02c0fbb - languageName: node - linkType: hard - -"babel-helper-regex@npm:^6.24.1": - version: 6.26.0 - resolution: "babel-helper-regex@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: ab949a4c90ab255abaafd9ec11a4a6dc77dba360875af2bb0822b699c058858773792c1e969c425c396837f61009f30c9ee5ba4b9a8ca87b0779ae1622f89fb3 - languageName: node - linkType: hard - -"babel-helper-remap-async-to-generator@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-remap-async-to-generator@npm:6.24.1" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: f330943104b61e7f9248d222bd5fe5d3238904ee20643b76197571e14a724723d64a8096b292a60f64788f0efe30176882c376eeebde00657925678e304324f0 - languageName: node - linkType: hard - -"babel-helper-replace-supers@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-replace-supers@npm:6.24.1" - dependencies: - babel-helper-optimise-call-expression: ^6.24.1 - babel-messages: ^6.23.0 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: ca1d216c5c6afc6af2ef55ea16777ba99e108780ea25da61d93edb09fd85f5e96c756306e2a21e737c3b0c7a16c99762b62a0e5f529d3865b14029fef7351cba - languageName: node - linkType: hard - -"babel-helpers@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helpers@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 751c6010e18648eebae422adfea5f3b5eff70d592d693bfe0f53346227d74b38e6cd2553c4c18de1e64faac585de490eccbd3ab86ba0885bdac42ed4478bc6b0 - languageName: node - linkType: hard - -"babel-messages@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-messages@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: c8075c17587a33869e1a5bd0a5b73bbe395b68188362dacd5418debbc7c8fd784bcd3295e81ee7e410dc2c2655755add6af03698c522209f6a68334c15e6d6ca - languageName: node - linkType: hard - -"babel-plugin-check-es2015-constants@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-check-es2015-constants@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 39168cb4ff078911726bfaf9d111d1e18f3e99d8b6f6101d343249b28346c3869e415c97fe7e857e7f34b913f8a052634b2b9dcfb4c0272e5f64ed22df69c735 - languageName: node - linkType: hard - -"babel-plugin-syntax-async-functions@npm:^6.8.0": - version: 6.13.0 - resolution: "babel-plugin-syntax-async-functions@npm:6.13.0" - checksum: e982d9756869fa83eb6a4502490a90b0d31e8a41e2ee582045934f022ac8ff5fa6a3386366976fab3a391d5a7ab8ea5f9da623f35ed8ab328b8ab6d9b2feb1d3 - languageName: node - linkType: hard - -"babel-plugin-syntax-exponentiation-operator@npm:^6.8.0": - version: 6.13.0 - resolution: "babel-plugin-syntax-exponentiation-operator@npm:6.13.0" - checksum: cbcb3aeae7005240325f72d55c3c90575033123e8a1ddfa6bf9eac4ee7e246c2a23f5b5ab1144879590d947a3ed1d88838169d125e5d7c4f53678526482b020e - languageName: node - linkType: hard - -"babel-plugin-syntax-trailing-function-commas@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-syntax-trailing-function-commas@npm:6.22.0" - checksum: d8b9039ded835bb128e8e14eeeb6e0ac2a876b85250924bdc3a8dc2a6984d3bfade4de04d40fb15ea04a86d561ac280ae0d7306d7d4ef7a8c52c43b6a23909c6 - languageName: node - linkType: hard - -"babel-plugin-transform-async-to-generator@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-async-to-generator@npm:6.24.1" - dependencies: - babel-helper-remap-async-to-generator: ^6.24.1 - babel-plugin-syntax-async-functions: ^6.8.0 - babel-runtime: ^6.22.0 - checksum: ffe8b4b2ed6db1f413ede385bd1a36f39e02a64ed79ce02779440049af75215c98f8debdc70eb01430bfd889f792682b0136576fe966f7f9e1b30e2a54695a8d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-arrow-functions@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-arrow-functions@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 746e2be0fed20771c07f0984ba79ef0bab37d6e98434267ec96cef57272014fe53a180bfb9047bf69ed149d367a2c97baad54d6057531cd037684f371aab2333 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-block-scoped-functions@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-block-scoped-functions@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: f251611f723d94b4068d2a873a2783e019bd81bd7144cfdbcfc31ef166f4d82fa2f1efba64342ba2630dab93a2b12284067725c0aa08315712419a2bc3b92a75 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-block-scoping@npm:^6.23.0": - version: 6.26.0 - resolution: "babel-plugin-transform-es2015-block-scoping@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: 5e4dee33bf4aab0ce7751a9ae845c25d3bf03944ffdfc8d784e1de2123a3eec19657dd59274c9969461757f5e2ab75c517e978bafe5309a821a41e278ad38a63 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-classes@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-classes@npm:6.24.1" - dependencies: - babel-helper-define-map: ^6.24.1 - babel-helper-function-name: ^6.24.1 - babel-helper-optimise-call-expression: ^6.24.1 - babel-helper-replace-supers: ^6.24.1 - babel-messages: ^6.23.0 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: 999392b47a83cf9297e49fbde00bc9b15fb6d71bc041f7b3d621ac45361486ec4b66f55c47f98dca6c398ceaa8bfc9f3c21257854822c4523e7475a92e6c000a - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-computed-properties@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-computed-properties@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 34e466bfd4b021aa3861db66cf10a9093fa6a4fcedbc8c82a55f6ca1fcbd212a9967f2df6c5f9e9a20046fa43c8967633a476f2bbc15cb8d3769cbba948a5c16 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-destructuring@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-destructuring@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 1343d27f09846e6e1e48da7b83d0d4f2d5571559c468ad8ad4c3715b8ff3e21b2d553e90ad420dc6840de260b7f3b9f9c057606d527e3d838a52a3a7c5fffdbe - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-duplicate-keys@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-duplicate-keys@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 756a7a13517c3e80c8312137b9872b9bc32fbfbb905e9f1e45bf321e2b464d0e6a6e6deca22c61b62377225bd8136b73580897cccb394995d6e00bc8ce882ba4 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-for-of@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-for-of@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 0124e320c32b25de84ddaba951a6f0ad031fa5019de54de32bd317d2a97b3f967026008f32e8c88728330c1cce7c4f1d0ecb15007020d50bd5ca1438a882e205 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-function-name@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-function-name@npm:6.24.1" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 629ecd824d53ec973a3ef85e74d9fd8c710203084ca2f7ac833879ddfa3b83a28f0270fe2ee5f3b8c078bb4b3e4b843173a646a7cd4abc49e8c1c563d31fb711 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-literals@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-literals@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 40e270580a0236990f2555f5dc7ae24b4db9f4709ca455ed1a6724b0078592482274be7448579b14122bd06481641a38e7b2e48d0b49b8c81c88e154a26865b4 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-amd@npm:^6.22.0, babel-plugin-transform-es2015-modules-amd@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-amd@npm:6.24.1" - dependencies: - babel-plugin-transform-es2015-modules-commonjs: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 084c7a1ef3bd0b2b9f4851b27cfb65f8ea1408349af05b4d88f994c23844a0754abfa4799bbc5f3f0ec94232b3a54a2e46d7f1dff1bdd40fa66a46f645197dfa - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-commonjs@npm:^6.23.0, babel-plugin-transform-es2015-modules-commonjs@npm:^6.24.1": - version: 6.26.2 - resolution: "babel-plugin-transform-es2015-modules-commonjs@npm:6.26.2" - dependencies: - babel-plugin-transform-strict-mode: ^6.24.1 - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-types: ^6.26.0 - checksum: 9cd93a84037855c1879bcc100229bee25b44c4805a9a9f040e8927f772c4732fa17a0706c81ea0db77b357dd9baf84388eec03ceb36597932c48fe32fb3d4171 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-systemjs@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-systemjs@npm:6.24.1" - dependencies: - babel-helper-hoist-variables: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: b34877e201d7b4d293d87c04962a3575fe7727a9593e99ce3a7f8deea3da8883a08bd87a6a12927083ac26f47f6944a31cdbfe3d6eb4d18dd884cb2d304ee943 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-umd@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-umd@npm:6.24.1" - dependencies: - babel-plugin-transform-es2015-modules-amd: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 735857b9f2ad0c41ceda31a1594fe2a063025f4428f9e243885a437b5bd415aca445a5e8495ff34b7120617735b1c3a2158033f0be23f1f5a90e655fff742a01 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-object-super@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-object-super@npm:6.24.1" - dependencies: - babel-helper-replace-supers: ^6.24.1 - babel-runtime: ^6.22.0 - checksum: 97b2968f699ac94cb55f4f1e7ea53dc9e4264ec99cab826f40f181da9f6db5980cd8b4985f05c7b6f1e19fbc31681e6e63894dfc5ecf4b3a673d736c4ef0f9db - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-parameters@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-parameters@npm:6.24.1" - dependencies: - babel-helper-call-delegate: ^6.24.1 - babel-helper-get-function-arity: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: bb6c047dc10499be8ccebdffac22c77f14aee5d3106da8f2e96c801d2746403c809d8c6922e8ebd2eb31d8827b4bb2321ba43378fcdc9dca206417bb345c4f93 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-shorthand-properties@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-shorthand-properties@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 9302c5de158a28432e932501a783560094c624c3659f4e0a472b6b2e9d6e8ab2634f82ef74d3e75363d46ccff6aad119267dbc34f67464c70625e24a651ad9e5 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-spread@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-spread@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 8694a8a7802d905503194ab81c155354b36d39fc819ad2148f83146518dd37d2c6926c8568712f5aa890169afc9353fd4bcc49397959c6dc9da3480b449c0ae9 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-sticky-regex@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-sticky-regex@npm:6.24.1" - dependencies: - babel-helper-regex: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: d9c45401caf0d74779a1170e886976d4c865b7de2e90dfffc7557481b9e73b6e37e9f1028aa07b813896c4df88f4d7e89968249a74547c7875e6c499c90c801d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-template-literals@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-template-literals@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 4fad2b7b383a2e784858ee7bf837419ee8ff9602afe218e1472f8c33a0c008f01d06f23ff2f2322fb23e1ed17e37237a818575fe88ecc5417d85331973b0ea4d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-typeof-symbol@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-typeof-symbol@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 68a1609c6abcddf5f138c56bafcd9fad7c6b3b404fe40910148ab70eb21d6c7807a343a64eb81ce45daf4b70c384c528c55fad45e0d581e4b09efa4d574a6a1b - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-unicode-regex@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-unicode-regex@npm:6.24.1" - dependencies: - babel-helper-regex: ^6.24.1 - babel-runtime: ^6.22.0 - regexpu-core: ^2.0.0 - checksum: 739ddb02e5f77904f83ea45323c9a636e3aed34b2a49c7c68208b5f2834eecb6b655e772f870f16a7aaf09ac8219f754ad69d61741d088f5b681d13cda69265d - languageName: node - linkType: hard - -"babel-plugin-transform-exponentiation-operator@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-exponentiation-operator@npm:6.24.1" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor: ^6.24.1 - babel-plugin-syntax-exponentiation-operator: ^6.8.0 - babel-runtime: ^6.22.0 - checksum: 533ad53ba2cd6ff3c0f751563e1beea429c620038dc2efeeb8348ab4752ebcc95d1521857abfd08047400f1921b2d4df5e0cd266e65ddbe4c3edc58b9ad6fd3c - languageName: node - linkType: hard - -"babel-plugin-transform-regenerator@npm:^6.22.0": - version: 6.26.0 - resolution: "babel-plugin-transform-regenerator@npm:6.26.0" - dependencies: - regenerator-transform: ^0.10.0 - checksum: 41a51d8f692bf4a5cbd705fa70f3cb6abebae66d9ba3dccfb5921da262f8c30f630e1fe9f7b132e29b96fe0d99385a801f6aa204278c5bd0af4284f7f93a665a - languageName: node - linkType: hard - -"babel-plugin-transform-strict-mode@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-plugin-transform-strict-mode@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 32d70ce9d8c8918a6a840e46df03dfe1e265eb9b25df5a800fedb5065ef1b4b5f24d7c62d92fca0e374db8b0b9b6f84e68edd02ad21883d48f608583ec29f638 +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b languageName: node linkType: hard -"babel-preset-env@npm:^1.7.0": - version: 1.7.0 - resolution: "babel-preset-env@npm:1.7.0" - dependencies: - babel-plugin-check-es2015-constants: ^6.22.0 - babel-plugin-syntax-trailing-function-commas: ^6.22.0 - babel-plugin-transform-async-to-generator: ^6.22.0 - babel-plugin-transform-es2015-arrow-functions: ^6.22.0 - babel-plugin-transform-es2015-block-scoped-functions: ^6.22.0 - babel-plugin-transform-es2015-block-scoping: ^6.23.0 - babel-plugin-transform-es2015-classes: ^6.23.0 - babel-plugin-transform-es2015-computed-properties: ^6.22.0 - babel-plugin-transform-es2015-destructuring: ^6.23.0 - babel-plugin-transform-es2015-duplicate-keys: ^6.22.0 - babel-plugin-transform-es2015-for-of: ^6.23.0 - babel-plugin-transform-es2015-function-name: ^6.22.0 - babel-plugin-transform-es2015-literals: ^6.22.0 - babel-plugin-transform-es2015-modules-amd: ^6.22.0 - babel-plugin-transform-es2015-modules-commonjs: ^6.23.0 - babel-plugin-transform-es2015-modules-systemjs: ^6.23.0 - babel-plugin-transform-es2015-modules-umd: ^6.23.0 - babel-plugin-transform-es2015-object-super: ^6.22.0 - babel-plugin-transform-es2015-parameters: ^6.23.0 - babel-plugin-transform-es2015-shorthand-properties: ^6.22.0 - babel-plugin-transform-es2015-spread: ^6.22.0 - babel-plugin-transform-es2015-sticky-regex: ^6.22.0 - babel-plugin-transform-es2015-template-literals: ^6.22.0 - babel-plugin-transform-es2015-typeof-symbol: ^6.23.0 - babel-plugin-transform-es2015-unicode-regex: ^6.22.0 - babel-plugin-transform-exponentiation-operator: ^6.22.0 - babel-plugin-transform-regenerator: ^6.22.0 - browserslist: ^3.2.6 - invariant: ^2.2.2 - semver: ^5.3.0 - checksum: 6e459a6c76086a2a377707680148b94c3d0aba425b039b427ca01171ebada7f5db5d336b309548462f6ba015e13176a4724f912875c15084d4aa88d77020d185 - languageName: node - linkType: hard - -"babel-register@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-register@npm:6.26.0" - dependencies: - babel-core: ^6.26.0 - babel-runtime: ^6.26.0 - core-js: ^2.5.0 - home-or-tmp: ^2.0.0 - lodash: ^4.17.4 - mkdirp: ^0.5.1 - source-map-support: ^0.4.15 - checksum: 75d5fe060e4850dbdbd5f56db2928cd0b6b6c93a65ba5f2a991465af4dc3f4adf46d575138f228b2169b1e25e3b4a7cdd16515a355fea41b873321bf56467583 +"async@npm:1.x": + version: 1.5.2 + resolution: "async@npm:1.5.2" + checksum: fe5d6214d8f15bd51eee5ae8ec5079b228b86d2d595f47b16369dec2e11b3ff75a567bb5f70d12d79006665fbbb7ee0a7ec0e388524eefd454ecbe651c124ebd languageName: node linkType: hard -"babel-runtime@npm:^6.18.0, babel-runtime@npm:^6.22.0, babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" +"async@npm:^2.4.0": + version: 2.6.4 + resolution: "async@npm:2.6.4" dependencies: - core-js: ^2.4.0 - regenerator-runtime: ^0.11.0 - checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 languageName: node linkType: hard -"babel-template@npm:^6.24.1, babel-template@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-template@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - lodash: ^4.17.4 - checksum: 028dd57380f09b5641b74874a19073c53c4fb3f1696e849575aae18f8c80eaf21db75209057db862f3b893ce2cd9b795d539efa591b58f4a0fb011df0a56fbed +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be languageName: node linkType: hard -"babel-traverse@npm:^6.24.1, babel-traverse@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-traverse@npm:6.26.0" - dependencies: - babel-code-frame: ^6.26.0 - babel-messages: ^6.23.0 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - debug: ^2.6.8 - globals: ^9.18.0 - invariant: ^2.2.2 - lodash: ^4.17.4 - checksum: fca037588d2791ae0409f1b7aa56075b798699cccc53ea04d82dd1c0f97b9e7ab17065f7dd3ecd69101d7874c9c8fd5e0f88fa53abbae1fe94e37e6b81ebcb8d +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e languageName: node linkType: hard -"babel-types@npm:^6.19.0, babel-types@npm:^6.24.1, babel-types@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-types@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - esutils: ^2.0.2 - lodash: ^4.17.4 - to-fast-properties: ^1.0.3 - checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76 +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a languageName: node linkType: hard -"babelify@npm:^7.3.0": - version: 7.3.0 - resolution: "babelify@npm:7.3.0" - dependencies: - babel-core: ^6.0.14 - object-assign: ^4.0.0 - checksum: 4e169606ed0f2ff6f886d2367c72243d36b3b354490ccc916b913f6b4afd14102c91f771d71d485857feb134581dd48702f25431e19b5c7035f474f9898c3c2e +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 languageName: node linkType: hard -"babylon@npm:^6.18.0": - version: 6.18.0 - resolution: "babylon@npm:6.18.0" - bin: - babylon: ./bin/babylon.js - checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d +"aws4@npm:^1.8.0": + version: 1.12.0 + resolution: "aws4@npm:1.12.0" + checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc languageName: node linkType: hard -"backoff@npm:^2.5.0": - version: 2.5.0 - resolution: "backoff@npm:2.5.0" +"axios@npm:^1.5.1": + version: 1.6.2 + resolution: "axios@npm:1.6.2" dependencies: - precond: 0.2 - checksum: ccdcf2a26acd9379d0d4f09e3fb3b7ee34dee94f07ab74d1e38b38f89a3675d9f3cbebb142d9c61c655f4c9eb63f1d6ec28cebeb3dc9215efd8fe7cef92725b9 + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 4a7429e2b784be0f2902ca2680964391eae7236faa3967715f30ea45464b98ae3f1c6f631303b13dfe721b17126b01f486c7644b9ef276bfc63112db9fd379f8 languageName: node linkType: hard @@ -3156,21 +3407,6 @@ __metadata: languageName: node linkType: hard -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - dependencies: - cache-base: ^1.0.1 - class-utils: ^0.3.5 - component-emitter: ^1.2.1 - define-property: ^1.0.0 - isobject: ^3.0.1 - mixin-deep: ^1.2.0 - pascalcase: ^0.1.1 - checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd - languageName: node - linkType: hard - "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -3187,10 +3423,26 @@ __metadata: languageName: node linkType: hard -"bignumber.js@npm:^9.0.0, bignumber.js@npm:^9.0.1": - version: 9.0.2 - resolution: "bignumber.js@npm:9.0.2" - checksum: 8637b71d0a99104b20413c47578953970006fec6b4df796b9dcfd9835ea9c402ea0e727eba9a5ca9f9a393c1d88b6168c5bbe0887598b708d4f8b4870ad62e1f +"better-path-resolve@npm:1.0.0": + version: 1.0.0 + resolution: "better-path-resolve@npm:1.0.0" + dependencies: + is-windows: ^1.0.0 + checksum: 5392dbe04e7fe68b944eb37961d9dfa147aaac3ee9ee3f6e13d42e2c9fbe949e68d16e896c14ee9016fa5f8e6e53ec7fd8b5f01b50a32067a7d94ac9cfb9a050 + languageName: node + linkType: hard + +"bigint-crypto-utils@npm:^3.0.23": + version: 3.3.0 + resolution: "bigint-crypto-utils@npm:3.3.0" + checksum: 9598ce57b23f776c8936d44114c9f051e62b5fa654915b664784cbcbacc5aa0485f4479571c51ff58008abb1210c0d6a234853742f07cf84bda890f2a1e01000 + languageName: node + linkType: hard + +"bignumber.js@npm:^9.0.0": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf languageName: node linkType: hard @@ -3210,16 +3462,15 @@ __metadata: languageName: node linkType: hard -"bip39@npm:2.5.0": - version: 2.5.0 - resolution: "bip39@npm:2.5.0" +"bip39@npm:3.0.4": + version: 3.0.4 + resolution: "bip39@npm:3.0.4" dependencies: + "@types/node": 11.11.6 create-hash: ^1.1.0 pbkdf2: ^3.0.9 randombytes: ^2.0.1 - safe-buffer: ^5.0.1 - unorm: ^1.3.3 - checksum: 26e83583c43a8430afea1c385328b447005c74ddaf997cd8d3e416057f4968360b08ebf7de32374d605295c3abdd7ddd448d8078a2aa3d951735f4499c23875b + checksum: 79ce1600a03d1ba5053bdd4e6323f9463ec340764c7e52918b6c6b9dca81221940f2d9a65656447f108f9bc2c8d9ae8df319cca83bbd1dad63f53ef2768d9bae languageName: node linkType: hard @@ -3232,6 +3483,17 @@ __metadata: languageName: node linkType: hard +"bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + "blakejs@npm:^1.1.0": version: 1.2.1 resolution: "blakejs@npm:1.2.1" @@ -3239,7 +3501,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.5.0, bluebird@npm:^3.5.2": +"bluebird@npm:^3.5.0": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef @@ -3253,62 +3515,57 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.10.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.6, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9, bn.js@npm:^4.8.0": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.1, bn.js@npm:^4.11.6, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1, bn.js@npm:^5.1.2, bn.js@npm:^5.1.3, bn.js@npm:^5.2.0": - version: 5.2.0 - resolution: "bn.js@npm:5.2.0" - checksum: 6117170393200f68b35a061ecbf55d01dd989302e7b3c798a3012354fa638d124f0b2f79e63f77be5556be80322a09c40339eda6413ba7468524c0b6d4b4cb7a - languageName: node - linkType: hard - -"bn.js@npm:^5.2.1": +"bn.js@npm:^5.0.0, bn.js@npm:^5.1.2, bn.js@npm:^5.1.3, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard -"body-parser@npm:1.19.2": - version: 1.19.2 - resolution: "body-parser@npm:1.19.2" +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" dependencies: bytes: 3.1.2 content-type: ~1.0.4 debug: 2.6.9 - depd: ~1.1.2 - http-errors: 1.8.1 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 iconv-lite: 0.4.24 - on-finished: ~2.3.0 - qs: 6.9.7 - raw-body: 2.4.3 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 type-is: ~1.6.18 - checksum: 7f777ea65670e2622ca4a785b5dcb2a68451b3bb8d4d0f41091d307d56b640dba588a9ae04d85dda2cdd5e42788266a783528d5417e5643720fd611fd52522e7 + unpipe: 1.0.0 + checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 languageName: node linkType: hard "body-parser@npm:^1.16.0": - version: 1.20.0 - resolution: "body-parser@npm:1.20.0" + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: bytes: 3.1.2 - content-type: ~1.0.4 + content-type: ~1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.10.3 - raw-body: 2.5.1 + qs: 6.11.0 + raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 12fffdeac82fe20dddcab7074215d5156e7d02a69ae90cbe9fee1ca3efa2f28ef52097cbea76685ee0a1509c71d85abd0056a08e612c09077cad6277a644cf88 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 languageName: node linkType: hard @@ -3322,21 +3579,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^2.3.1": - version: 2.3.2 - resolution: "braces@npm:2.3.2" +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" dependencies: - arr-flatten: ^1.1.0 - array-unique: ^0.3.2 - extend-shallow: ^2.0.1 - fill-range: ^4.0.0 - isobject: ^3.0.1 - repeat-element: ^1.1.2 - snapdragon: ^0.8.1 - snapdragon-node: ^2.0.1 - split-string: ^3.0.2 - to-regex: ^3.0.1 - checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 languageName: node linkType: hard @@ -3349,6 +3597,15 @@ __metadata: languageName: node linkType: hard +"breakword@npm:^1.0.5": + version: 1.0.6 + resolution: "breakword@npm:1.0.6" + dependencies: + wcwidth: ^1.0.1 + checksum: e8a3f308c0214986e1b768ca4460a798ffe4bbe08c375576de526431a01a9738318710cc05e309486ac5809d77d9f33d957f80939a890e07be5e89baad9816f8 + languageName: node + linkType: hard + "brorand@npm:^1.0.1, brorand@npm:^1.1.0": version: 1.1.0 resolution: "brorand@npm:1.1.0" @@ -3356,6 +3613,18 @@ __metadata: languageName: node linkType: hard +"browser-level@npm:^1.0.1": + version: 1.0.1 + resolution: "browser-level@npm:1.0.1" + dependencies: + abstract-level: ^1.0.2 + catering: ^2.1.1 + module-error: ^1.0.2 + run-parallel-limit: ^1.1.0 + checksum: 67fbc77ce832940bfa25073eccff279f512ad56f545deb996a5b23b02316f5e76f4a79d381acc27eda983f5c9a2566aaf9c97e4fdd0748288c4407307537a29b + languageName: node + linkType: hard + "browser-stdout@npm:1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" @@ -3400,7 +3669,7 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": version: 4.1.0 resolution: "browserify-rsa@npm:4.1.0" dependencies: @@ -3411,31 +3680,19 @@ __metadata: linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" + version: 4.2.2 + resolution: "browserify-sign@npm:4.2.2" dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 + bn.js: ^5.2.1 + browserify-rsa: ^4.1.0 create-hash: ^1.2.0 create-hmac: ^1.1.7 - elliptic: ^6.5.3 + elliptic: ^6.5.4 inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 - languageName: node - linkType: hard - -"browserslist@npm:^3.2.6": - version: 3.2.8 - resolution: "browserslist@npm:3.2.8" - dependencies: - caniuse-lite: ^1.0.30000844 - electron-to-chromium: ^1.3.47 - bin: - browserslist: ./cli.js - checksum: 74d9ab1089a3813f54a7c4f9f6612faa6256799c8e42c7e00e4aae626c17f199049a01707a525a05b1673cd1493936583e51aad295e25249166e7e8fbd0273ba + parse-asn1: ^5.1.6 + readable-stream: ^3.6.2 + safe-buffer: ^5.2.1 + checksum: b622730c0fc183328c3a1c9fdaaaa5118821ed6822b266fa6b0375db7e20061ebec87301d61931d79b9da9a96ada1cab317fce3c68f233e5e93ed02dbb35544c languageName: node linkType: hard @@ -3489,7 +3746,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.0.5, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.0.5, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -3499,82 +3756,74 @@ __metadata: languageName: node linkType: hard -"bufferutil@npm:^4.0.1": - version: 4.0.6 - resolution: "bufferutil@npm:4.0.6" +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: dd107560947445280af7820c3d0534127b911577d85d537e1d7e0aa30fd634853cef8a994d6e8aed3d81388ab1a20257de776164afe6a6af8e78f5f17968ebd6 + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 languageName: node linkType: hard -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e +"bufferutil@npm:4.0.5": + version: 4.0.5 + resolution: "bufferutil@npm:4.0.5" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 37d5bef7cb38d29f9377b8891ff8a57f53ae6057313d77a8aa2a7417df37a72f16987100796cb2f1e1862f3eb80057705f3c052615ec076a0dcc7aa6c83b68c9 languageName: node linkType: hard -"bytewise-core@npm:^1.2.2": - version: 1.2.3 - resolution: "bytewise-core@npm:1.2.3" +"bufferutil@npm:^4.0.1": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" dependencies: - typewise-core: ^1.2 - checksum: e0d28fb7ff5bb6fd9320eef31c6b37e98da3b9a24d9893e2c17e0ee544457e0c76c2d3fc642c99d82daa0f18dcd49e7dce8dcc338711200e9ced79107cb78e8e + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 7e9a46f1867dca72fda350966eb468eca77f4d623407b0650913fadf73d5750d883147d6e5e21c56f9d3b0bdc35d5474e80a600b9f31ec781315b4d2469ef087 languageName: node linkType: hard -"bytewise@npm:~1.1.0": - version: 1.1.0 - resolution: "bytewise@npm:1.1.0" - dependencies: - bytewise-core: ^1.2.2 - typewise: ^1.0.3 - checksum: 20d7387ecf8c29adc4740e626fb02eaa27f34ae4c5ca881657d403e792730c0625ba4fed824462b3ddb7d3ebe41b7abbfe24f1cd3bf07cecc5a631f154d2d8d2 +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e languageName: node linkType: hard -"cacache@npm:^16.0.2": - version: 16.0.4 - resolution: "cacache@npm:16.0.4" +"cacache@npm:^18.0.0": + version: 18.0.1 + resolution: "cacache@npm:18.0.1" dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^7.2.0 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 + ssri: ^10.0.0 tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: f5ddd45e5b1ff5001f9d1fcbc95f1dc210e6b04fbaf92782dd16a514e9a8082efba6eac43dac3d881e2ab5829f5ad857d7deda58cbef235e93d075e8f378214a + unique-filename: ^3.0.0 + checksum: 5a0b3b2ea451a0379814dc1d3c81af48c7c6db15cd8f7d72e028501ae0036a599a99bbac9687bfec307afb2760808d1c7708e9477c8c70d2b166e7d80b162a23 languageName: node linkType: hard -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - dependencies: - collection-visit: ^1.0.0 - component-emitter: ^1.2.1 - get-value: ^2.0.6 - has-value: ^1.0.0 - isobject: ^3.0.1 - set-value: ^2.0.0 - to-object-path: ^0.3.0 - union-value: ^1.0.0 - unset-value: ^1.0.0 - checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d + languageName: node + linkType: hard + +"cacheable-lookup@npm:^6.0.4": + version: 6.1.0 + resolution: "cacheable-lookup@npm:6.1.0" + checksum: 4e37afe897219b1035335b0765106a2c970ffa930497b43cac5000b860f3b17f48d004187279fae97e2e4cbf6a3693709b6d64af65279c7d6c8453321d36d118 languageName: node linkType: hard @@ -3593,23 +3842,29 @@ __metadata: languageName: node linkType: hard -"cachedown@npm:1.0.0": - version: 1.0.0 - resolution: "cachedown@npm:1.0.0" +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" dependencies: - abstract-leveldown: ^2.4.1 - lru-cache: ^3.2.0 - checksum: ffd229839ca7efbfa14e35321fb8df444421e192bdf7be16048a303d2a24f3ed86cbe6c7a8cca91761423e4c53c3ed1098d337bbb9d3448801d4792172b4ab3e + clone-response: ^1.0.2 + get-stream: ^5.1.0 + http-cache-semantics: ^4.0.0 + keyv: ^4.0.0 + lowercase-keys: ^2.0.0 + normalize-url: ^6.0.1 + responselike: ^2.0.0 + checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4 languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:~1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": + version: 1.0.5 + resolution: "call-bind@npm:1.0.5" dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.1 + set-function-length: ^1.1.1 + checksum: 449e83ecbd4ba48e7eaac5af26fea3b50f8f6072202c2dd7c5a6e7a6308f2421abe5e13a3bbd55221087f76320c5e09f25a8fdad1bab2b77c68ae74d92234ea5 languageName: node linkType: hard @@ -3620,14 +3875,18 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^3.0.0": - version: 3.0.0 - resolution: "camelcase@npm:3.0.0" - checksum: ae4fe1c17c8442a3a345a6b7d2393f028ab7a7601af0c352ad15d1ab97ca75112e19e29c942b2a214898e160194829b68923bce30e018d62149c6d84187f1673 +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a languageName: node linkType: hard -"camelcase@npm:^5.0.0": +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b @@ -3641,13 +3900,6 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30000844": - version: 1.0.30001327 - resolution: "caniuse-lite@npm:1.0.30001327" - checksum: 789076fb889bd03515c4a3e2bfa09cd5b28439645173445147eb6ddfd8105c755e46dfda3de4b75edd2b71490864188bbfe8a2efe920c7998960b4e98916f518 - languageName: node - linkType: hard - "caseless@npm:^0.12.0, caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -3655,52 +3907,38 @@ __metadata: languageName: node linkType: hard -"cbor@npm:^5.0.2": - version: 5.2.0 - resolution: "cbor@npm:5.2.0" - dependencies: - bignumber.js: ^9.0.1 - nofilter: ^1.0.4 - checksum: b3c39dae64370f361526dbec88f51d0f1b47027224cdd21dbd64c228f0fe7eaa945932d349ec5324068a6c6dcdbb1e3b46242852524fd53c526d14cb60514bdc +"catering@npm:^2.0.0, catering@npm:^2.1.0, catering@npm:^2.1.1": + version: 2.1.1 + resolution: "catering@npm:2.1.1" + checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 languageName: node linkType: hard -"chai-bignumber@npm:^3.0.0": - version: 3.0.0 - resolution: "chai-bignumber@npm:3.0.0" - checksum: 1a671beb93cf9775abf1a0640c6ec938b2952a89793b2c9dab9a5fa24fb7df5520cc9a20db84446f622ae5d28029e2bac140601786e0d9e821b4c37e22e9d433 +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" + dependencies: + nofilter: ^3.1.0 + checksum: a90338435dc7b45cc01461af979e3bb6ddd4f2a08584c437586039cd5f2235014c06e49d664295debbfb3514d87b2f06728092ab6aa6175e2e85e9cd7dc0c1fd languageName: node linkType: hard "chai@npm:^4.3.6": - version: 4.3.6 - resolution: "chai@npm:4.3.6" + version: 4.3.10 + resolution: "chai@npm:4.3.10" dependencies: assertion-error: ^1.1.0 - check-error: ^1.0.2 - deep-eql: ^3.0.1 - get-func-name: ^2.0.0 - loupe: ^2.3.1 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.0.5 - checksum: acff93fd537f96d4a4d62dd83810285dffcfccb5089e1bf2a1205b28ec82d93dff551368722893cf85004282df10ee68802737c33c90c5493957ed449ed7ce71 - languageName: node - linkType: hard - -"chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: ^2.2.1 - escape-string-regexp: ^1.0.2 - has-ansi: ^2.0.0 - strip-ansi: ^3.0.0 - supports-color: ^2.0.0 - checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + type-detect: ^4.0.8 + checksum: 536668c60a0d985a0fbd94418028e388d243a925d7c5e858c7443e334753511614a3b6a124bac9ca077dfc4c37acc367d62f8c294960f440749536dc181dfc6d languageName: node linkType: hard -"chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.1.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -3711,7 +3949,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -3721,6 +3959,13 @@ __metadata: languageName: node linkType: hard +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + "charenc@npm:>= 0.0.1": version: 0.0.2 resolution: "charenc@npm:0.0.2" @@ -3728,38 +3973,12 @@ __metadata: languageName: node linkType: hard -"check-error@npm:^1.0.2": - version: 1.0.2 - resolution: "check-error@npm:1.0.2" - checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e - languageName: node - linkType: hard - -"checkpoint-store@npm:^1.1.0": - version: 1.1.0 - resolution: "checkpoint-store@npm:1.1.0" - dependencies: - functional-red-black-tree: ^1.0.1 - checksum: 94e921ccb222c7970615e8b2bcd956dbd52f15a1c397af0447dbdef8ecd32ffe342e394d39e55f2912278a460f3736de777b5b57a5baf229c0a6bd04d2465511 - languageName: node - linkType: hard - -"chokidar@npm:3.3.0": - version: 3.3.0 - resolution: "chokidar@npm:3.3.0" +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" dependencies: - anymatch: ~3.1.1 - braces: ~3.0.2 - fsevents: ~2.1.1 - glob-parent: ~5.1.0 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.2.0 - dependenciesMeta: - fsevents: - optional: true - checksum: e9863256ebb29dbc5e58a7e2637439814beb63b772686cb9e94478312c24dcaf3d0570220c5e75ea29029f43b664f9956d87b716120d38cf755f32124f047e8e + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 languageName: node linkType: hard @@ -3803,6 +4022,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.7.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + "cids@npm:^0.7.1": version: 0.7.5 resolution: "cids@npm:0.7.5" @@ -3833,15 +4059,17 @@ __metadata: languageName: node linkType: hard -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" +"classic-level@npm:^1.2.0": + version: 1.3.0 + resolution: "classic-level@npm:1.3.0" dependencies: - arr-union: ^3.1.0 - define-property: ^0.2.5 - isobject: ^3.0.0 - static-extend: ^0.1.1 - checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 + abstract-level: ^1.0.2 + catering: ^2.1.0 + module-error: ^1.0.1 + napi-macros: ^2.2.2 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 773da48aef52a041115d413fee8340b357a4da2eb505764f327183b155edd7cc9d24819eb4f707c83dbdae8588024f5dddeb322125567c59d5d1f6f16334cdb9 languageName: node linkType: hard @@ -3852,6 +4080,22 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + "cli-table3@npm:^0.5.0": version: 0.5.1 resolution: "cli-table3@npm:0.5.1" @@ -3866,25 +4110,21 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^3.2.0": - version: 3.2.0 - resolution: "cliui@npm:3.2.0" - dependencies: - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wrap-ansi: ^2.0.0 - checksum: c68d1dbc3e347bfe79ed19cc7f48007d5edd6cd8438342e32073e0b4e311e3c44e1f4f19221462bc6590de56c2df520e427533a9dde95dee25710bec322746ad +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 languageName: node linkType: hard -"cliui@npm:^5.0.0": - version: 5.0.0 - resolution: "cliui@npm:5.0.0" +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" dependencies: - string-width: ^3.1.0 - strip-ansi: ^5.2.0 - wrap-ansi: ^5.1.0 - checksum: 0bb8779efe299b8f3002a73619eaa8add4081eb8d1c17bc4fedc6240557fb4eacdc08fe87c39b002eacb6cfc117ce736b362dbfd8bf28d90da800e010ee97df4 + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 languageName: node linkType: hard @@ -3899,36 +4139,30 @@ __metadata: languageName: node linkType: hard -"clone-response@npm:^1.0.2": - version: 1.0.2 - resolution: "clone-response@npm:1.0.2" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: - mimic-response: ^1.0.0 - checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda - languageName: node - linkType: hard - -"clone@npm:2.1.2, clone@npm:^2.0.0": - version: 2.1.2 - resolution: "clone@npm:2.1.2" - checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: ^1.0.0 + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e languageName: node linkType: hard -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: ^1.0.0 - object-visit: ^1.0.0 - checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd languageName: node linkType: hard @@ -3964,15 +4198,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "colors@npm:1.4.0, colors@npm:^1.1.2": version: 1.4.0 resolution: "colors@npm:1.4.0" @@ -3996,19 +4221,6 @@ __metadata: languageName: node linkType: hard -"command-line-args@npm:^4.0.7": - version: 4.0.7 - resolution: "command-line-args@npm:4.0.7" - dependencies: - array-back: ^2.0.0 - find-replace: ^1.0.3 - typical: ^2.6.1 - bin: - command-line-args: bin/cli.js - checksum: 618109143fbca741048d54a5d31a2a5e166fbda318ed1419c1ca66877ce92ed80d6768a52a2e6392eb751f16ca7755d4014ced6f5f858a68d0cbe793bab6e3ee - languageName: node - linkType: hard - "command-line-args@npm:^5.1.1": version: 5.2.1 resolution: "command-line-args@npm:5.2.1" @@ -4022,14 +4234,14 @@ __metadata: linkType: hard "command-line-usage@npm:^6.1.0": - version: 6.1.2 - resolution: "command-line-usage@npm:6.1.2" + version: 6.1.3 + resolution: "command-line-usage@npm:6.1.3" dependencies: - array-back: ^4.0.1 + array-back: ^4.0.2 chalk: ^2.4.2 - table-layout: ^1.0.1 + table-layout: ^1.0.2 typical: ^5.2.0 - checksum: 2491ec14efff47f0edefa99720cf77c6400666a63a592aba851f25659525387e8ca970ebdfcc89270b1f6490109972d473de58d21932aa27f5dc4eb7420473b4 + checksum: 8261d4e5536eb0bcddee0ec5e89c05bb2abd18e5760785c8078ede5020bc1c612cbe28eb6586f5ed4a3660689748e5aaad4a72f21566f4ef39393694e2fa1a0b languageName: node linkType: hard @@ -4040,10 +4252,10 @@ __metadata: languageName: node linkType: hard -"component-emitter@npm:^1.2.1": - version: 1.3.0 - resolution: "component-emitter@npm:1.3.0" - checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b +"commander@npm:^8.1.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 languageName: node linkType: hard @@ -4054,7 +4266,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.5.1, concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2": +"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -4066,13 +4278,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -4093,19 +4298,10 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4": - version: 1.0.4 - resolution: "content-type@npm:1.0.4" - checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 - languageName: node - linkType: hard - -"convert-source-map@npm:^1.5.1": - version: 1.8.0 - resolution: "convert-source-map@npm:1.8.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: 985d974a2d33e1a2543ada51c93e1ba2f73eaed608dc39f229afc78f71dcc4c8b7d7c684aa647e3c6a3a204027444d69e53e169ce94e8d1fa8d7dee80c9c8fed +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 languageName: node linkType: hard @@ -4116,38 +4312,31 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.4.2, cookie@npm:^0.4.1": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b - languageName: node - linkType: hard - -"cookiejar@npm:^2.1.1": - version: 2.1.3 - resolution: "cookiejar@npm:2.1.3" - checksum: 88259983ebc52ceb23cdacfa48762b6a518a57872eff1c7ed01d214fff5cf492e2660d7d5c04700a28f1787a76811df39e8639f8e17670b3cf94ecd86e161f07 +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 languageName: node linkType: hard -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b +"cookie@npm:^0.4.1": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b languageName: node linkType: hard -"core-js-pure@npm:^3.0.1": - version: 3.21.1 - resolution: "core-js-pure@npm:3.21.1" - checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 +"cookiejar@npm:^2.1.1": + version: 2.1.4 + resolution: "cookiejar@npm:2.1.4" + checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b languageName: node linkType: hard -"core-js@npm:^2.4.0, core-js@npm:^2.5.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 +"core-js-pure@npm:^3.0.1": + version: 3.34.0 + resolution: "core-js-pure@npm:3.34.0" + checksum: 4c44ac4beff42e07f41eef3c9ecefc8ee3f9e91e1b9f278bf8520cc1fb37afb663cff77c182541dc42d58737f93ab0f30a33a5fe661fb161fdd8aa7fe78a5edf languageName: node linkType: hard @@ -4221,30 +4410,34 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^2.1.0, cross-fetch@npm:^2.1.1": - version: 2.2.6 - resolution: "cross-fetch@npm:2.2.6" +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" dependencies: - node-fetch: ^2.6.7 - whatwg-fetch: ^2.0.4 - checksum: df9c6728b314ff96022dca468a3d2a05b4546cd318d82a7e1f1445e7160472d39029bccbe5f20d319b8ba3793930592b0b956244aef6a87a133fbcfed85fc8ca + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 languageName: node linkType: hard -"cross-spawn@npm:^6.0.5": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" +"cross-spawn@npm:^5.1.0": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" dependencies: - nice-try: ^1.0.4 - path-key: ^2.0.1 - semver: ^5.5.0 + lru-cache: ^4.0.1 shebang-command: ^1.2.0 which: ^1.2.9 - checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 + checksum: 726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 languageName: node linkType: hard -"cross-spawn@npm:^7.0.2": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4281,6 +4474,39 @@ __metadata: languageName: node linkType: hard +"csv-generate@npm:^3.4.3": + version: 3.4.3 + resolution: "csv-generate@npm:3.4.3" + checksum: 868dc630e8bcabf42d3d1ef22c09fb783de72d7e5929854aad0323f44059b1747edf8a2724e32fdc5008396e2ea38d5c45df0b0e3a1b506e3ab34f76f3e2fb3a + languageName: node + linkType: hard + +"csv-parse@npm:^4.16.3": + version: 4.16.3 + resolution: "csv-parse@npm:4.16.3" + checksum: 5ad7790fc31c32ca1623bad1a54906134ba44fa109e8dd2dfda440bf7e9fd93610d9076a78f45c872701bfafdf7f93c9b75500c09d7efd6611d863f1d45ec69f + languageName: node + linkType: hard + +"csv-stringify@npm:^5.6.5": + version: 5.6.5 + resolution: "csv-stringify@npm:5.6.5" + checksum: f93e1444857416081de3d86765b62e4c4f7c110974ad6bbcb0031d7db39b6624847ac9ee5705726e7011346f32f3696f27299b74b23a6c2b083adff0dd2755fe + languageName: node + linkType: hard + +"csv@npm:^5.5.3": + version: 5.5.3 + resolution: "csv@npm:5.5.3" + dependencies: + csv-generate: ^3.4.3 + csv-parse: ^4.16.3 + csv-stringify: ^5.6.5 + stream-transform: ^2.1.3 + checksum: 0decc2d0d7a0abf127f4556d6f3cef5a54015b78d348608b5e8f42256c2bd0a021f34f1efc9723b2cd162680917de4c0b3967bfb65a07305eca0827654ca727e + languageName: node + linkType: hard + "d@npm:1, d@npm:^1.0.1": version: 1.0.1 resolution: "d@npm:1.0.1" @@ -4307,7 +4533,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.8, debug@npm:^2.6.9": +"debug@npm:2.6.9, debug@npm:^2.2.0": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -4316,16 +4542,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:3.2.6": - version: 3.2.6 - resolution: "debug@npm:3.2.6" - dependencies: - ms: ^2.1.1 - checksum: 07bc8b3a13ef3cfa6c06baf7871dfb174c291e5f85dbf566f086620c16b9c1a0e93bb8f1935ebbd07a683249e7e30286f2966e2ef461e8fd17b1b60732062d6b - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -4337,18 +4554,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.3": - version: 4.3.3 - resolution: "debug@npm:4.3.3" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 14472d56fe4a94dbcfaa6dbed2dd3849f1d72ba78104a1a328047bb564643ca49df0224c3a17fa63533fd11dd3d4c8636cd861191232a2c6735af00cc2d4de16 - languageName: node - linkType: hard - "debug@npm:^3.1.0, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -4358,7 +4563,17 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.1, decamelize@npm:^1.2.0": +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -4373,13 +4588,13 @@ __metadata: linkType: hard "decode-uri-component@npm:^0.2.0": - version: 0.2.0 - resolution: "decode-uri-component@npm:0.2.0" - checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94 + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 languageName: node linkType: hard -"decompress-response@npm:^3.2.0, decompress-response@npm:^3.3.0": +"decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" dependencies: @@ -4388,26 +4603,21 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^3.0.1": - version: 3.0.1 - resolution: "deep-eql@npm:3.0.1" +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" dependencies: - type-detect: ^4.0.0 - checksum: 4f4c9fb79eb994fb6e81d4aa8b063adc40c00f831588aa65e20857d5d52f15fb23034a6576ecf886f7ff6222d5ae42e71e9b7d57113e0715b1df7ea1e812b125 + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 languageName: node linkType: hard -"deep-equal@npm:~1.1.1": - version: 1.1.1 - resolution: "deep-equal@npm:1.1.1" +"deep-eql@npm:^4.1.3": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" dependencies: - is-arguments: ^1.0.4 - is-date-object: ^1.0.1 - is-regex: ^1.0.4 - object-is: ^1.0.1 - object-keys: ^1.1.1 - regexp.prototype.flags: ^1.2.0 - checksum: f92686f2c5bcdf714a75a5fa7a9e47cb374a8ec9307e717b8d1ce61f56a75aaebf5619c2a12b8087a705b5a2f60d0292c35f8b58cb1f72e3268a3a15cab9f78d + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f languageName: node linkType: hard @@ -4425,6 +4635,15 @@ __metadata: languageName: node linkType: hard +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + "defer-to-connect@npm:^1.0.1": version: 1.1.3 resolution: "defer-to-connect@npm:1.1.3" @@ -4432,22 +4651,10 @@ __metadata: languageName: node linkType: hard -"deferred-leveldown@npm:~1.2.1": - version: 1.2.2 - resolution: "deferred-leveldown@npm:1.2.2" - dependencies: - abstract-leveldown: ~2.6.0 - checksum: ad3a26d20dc80c702c85c4795cbb52ef25d8e500728c98098b468c499ca745051e6cc03bd12be97ff38c43466a7895879db76ffb761a75b0f009829d990a0ea9 - languageName: node - linkType: hard - -"deferred-leveldown@npm:~4.0.0": - version: 4.0.2 - resolution: "deferred-leveldown@npm:4.0.2" - dependencies: - abstract-leveldown: ~5.0.0 - inherits: ^2.0.3 - checksum: 6b3649bbb7a2617e08eecdddb516d0bde215bd376a37089df203ad78627f59c424c785afbcbfd3e53488d4f9e5d27d9d126d5645b7da53e8760cc34df2d2f13e +"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard @@ -4461,47 +4668,25 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3": - version: 1.1.3 - resolution: "define-properties@npm:1.1.3" - dependencies: - object-keys: ^1.0.12 - checksum: da80dba55d0cd76a5a7ab71ef6ea0ebcb7b941f803793e4e0257b384cb772038faa0c31659d244e82c4342edef841c1a1212580006a05a5068ee48223d787317 - languageName: node - linkType: hard - -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: ^0.1.0 - checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" dependencies: - is-descriptor: ^1.0.0 - checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d languageName: node linkType: hard -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: - is-descriptor: ^1.0.2 - isobject: ^3.0.1 - checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - -"defined@npm:~1.0.0": - version: 1.0.0 - resolution: "defined@npm:1.0.0" - checksum: 77672997c5001773371c4dbcce98da0b3dc43089d6da2ad87c4b800adb727633cea8723ea3889fe0c2112a2404e2fd07e3bfd0e55f7426aa6441d8992045dbd5 + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard @@ -4512,13 +4697,6 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -4526,20 +4704,13 @@ __metadata: languageName: node linkType: hard -"depd@npm:^1.1.2, depd@npm:~1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - "des.js@npm:^1.0.0": - version: 1.0.1 - resolution: "des.js@npm:1.0.1" + version: 1.1.0 + resolution: "des.js@npm:1.1.0" dependencies: inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - checksum: 1ec2eedd7ed6bd61dd5e0519fd4c96124e93bb22de8a9d211b02d63e5dd152824853d919bb2090f965cc0e3eb9c515950a9836b332020d810f9c71feb0fd7df4 + checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 languageName: node linkType: hard @@ -4550,46 +4721,51 @@ __metadata: languageName: node linkType: hard -"destroy@npm:~1.0.4": - version: 1.0.4 - resolution: "destroy@npm:1.0.4" - checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 - languageName: node - linkType: hard - -"detect-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "detect-indent@npm:4.0.0" - dependencies: - repeating: ^2.0.0 - checksum: 328f273915c1610899bc7d4784ce874413d0a698346364cd3ee5d79afba1c5cf4dbc97b85a801e20f4d903c0598bd5096af32b800dfb8696b81464ccb3dfda2c +"detect-indent@npm:^6.0.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d languageName: node linkType: hard "detect-port@npm:^1.3.0": - version: 1.3.0 - resolution: "detect-port@npm:1.3.0" + version: 1.5.1 + resolution: "detect-port@npm:1.5.1" dependencies: address: ^1.0.1 - debug: ^2.6.0 + debug: 4 bin: - detect: ./bin/detect-port - detect-port: ./bin/detect-port - checksum: 93c40febe714f56711d1fedc2b7a9cc4cbaa0fcddec0509876c46b9dd6099ed6bfd6662a4f35e5fa0301660f48ed516829253ab0fc90b9e79b823dd77786b379 + detect: bin/detect-port.js + detect-port: bin/detect-port.js + checksum: b48da9340481742547263d5d985e65d078592557863402ecf538511735e83575867e94f91fe74405ea19b61351feb99efccae7e55de9a151d5654e3417cea05b + languageName: node + linkType: hard + +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 languageName: node linkType: hard -"diff@npm:3.5.0, diff@npm:^3.1.0": +"diff@npm:^3.1.0": version: 3.5.0 resolution: "diff@npm:3.5.0" checksum: 00842950a6551e26ce495bdbce11047e31667deea546527902661f25cc2e73358967ebc78cf86b1a9736ec3e14286433225f9970678155753a6291c3bca5227b languageName: node linkType: hard -"diff@npm:5.0.0, diff@npm:^5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"diff@npm:^5.0.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 languageName: node linkType: hard @@ -4638,21 +4814,10 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.0.0": - version: 16.0.0 - resolution: "dotenv@npm:16.0.0" - checksum: 664cebb51f0a9a1d1b930f51f0271e72e26d62feaecc9dc03df39453dd494b4e724809ca480fb3ec3213382b1ed3f791aaeb83569a137f9329ce58efd4853dbf - languageName: node - linkType: hard - -"dotignore@npm:~0.1.2": - version: 0.1.2 - resolution: "dotignore@npm:0.1.2" - dependencies: - minimatch: ^3.0.4 - bin: - ignored: bin/ignored - checksum: 06bab15e2a2400c6f823a0edbcd73661180f6245a4041a3fe3b9fde4b22ae74b896604df4520a877093f05c656bd080087376c9f605bccdea847664c59910f37 +"dotenv@npm:^16.0.0, dotenv@npm:^16.1.4": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd languageName: node linkType: hard @@ -4668,9 +4833,16 @@ __metadata: linkType: hard "duplexer3@npm:^0.1.4": - version: 0.1.4 - resolution: "duplexer3@npm:0.1.4" - checksum: c2fd6969314607d23439c583699aaa43c4100d66b3e161df55dccd731acc57d5c81a64bb4f250805fbe434ddb1d2623fee2386fb890f5886ca1298690ec53415 + version: 0.1.5 + resolution: "duplexer3@npm:0.1.5" + checksum: e677cb4c48f031ca728601d6a20bf6aed4c629d69ef9643cb89c67583d673c4ec9317cc6427501f38bd8c368d3a18f173987cc02bd99d8cf8fe3d94259a22a20 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard @@ -4691,13 +4863,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.47": - version: 1.4.106 - resolution: "electron-to-chromium@npm:1.4.106" - checksum: 79eae050a775f6f674a24d4541d54cdb1c35e956d6e112ee9ec8d752fa9bcd94739e5f86c58d8e04f85199cf720146aee301b2e397932ad5c8d8e8cffe65a2ee - languageName: node - linkType: hard - "elliptic@npm:6.5.4, elliptic@npm:^6.4.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -4713,10 +4878,10 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e +"emittery@npm:0.10.0": + version: 0.10.0 + resolution: "emittery@npm:0.10.0" + checksum: 2616a802df51e3f412b9b33f1b43161f7bc96037142cada6ecdbf35ddef1368e30d4f8e47fddc10b0753ccf91d3483b20ebca535b4b1e47526440e13150e2bc7 languageName: node linkType: hard @@ -4727,6 +4892,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -4734,19 +4906,6 @@ __metadata: languageName: node linkType: hard -"encoding-down@npm:5.0.4, encoding-down@npm:~5.0.0": - version: 5.0.4 - resolution: "encoding-down@npm:5.0.4" - dependencies: - abstract-leveldown: ^5.0.0 - inherits: ^2.0.3 - level-codec: ^9.0.0 - level-errors: ^2.0.0 - xtend: ^4.0.1 - checksum: b8d9d4b058622c11e33d8ec0fb6432194925e109ed8e44e93555406496e8b77b294c8c338dd5ed9ab8d7bc50250a48bb93f9af62ecee3ce8d82f4ef78b2ca880 - languageName: node - linkType: hard - "encoding-down@npm:^6.3.0": version: 6.3.0 resolution: "encoding-down@npm:6.3.0" @@ -4759,7 +4918,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11, encoding@npm:^0.1.13": +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -4778,11 +4937,12 @@ __metadata: linkType: hard "enquirer@npm:^2.3.0": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" dependencies: ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 languageName: node linkType: hard @@ -4811,7 +4971,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.2.0": +"error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -4820,31 +4980,70 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.5, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": - version: 1.19.2 - resolution: "es-abstract@npm:1.19.2" +"es-abstract@npm:^1.22.1": + version: 1.22.3 + resolution: "es-abstract@npm:1.22.3" dependencies: - call-bind: ^1.0.2 + array-buffer-byte-length: ^1.0.0 + arraybuffer.prototype.slice: ^1.0.2 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.5 + es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - get-intrinsic: ^1.1.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.2 get-symbol-description: ^1.0.0 - has: ^1.0.3 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - is-callable: ^1.2.4 + hasown: ^2.0.0 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.1 + is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 + is-typed-array: ^1.1.12 is-weakref: ^1.0.2 - object-inspect: ^1.12.0 + object-inspect: ^1.13.1 object-keys: ^1.1.1 - object.assign: ^4.1.2 - string.prototype.trimend: ^1.0.4 - string.prototype.trimstart: ^1.0.4 - unbox-primitive: ^1.0.1 - checksum: 4724811fd54b2cea959a8b08e49cd41cc65c77363c37bf5b42dc64a7c730e16a0dca80edc73e46ebf90a8de311622009a5a8dbe47e9f4e129c35f52c5020fe4e + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 + typed-array-buffer: ^1.0.0 + typed-array-byte-length: ^1.0.0 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.13 + checksum: b1bdc962856836f6e72be10b58dc128282bdf33771c7a38ae90419d920fc3b36cc5d2b70a222ad8016e3fc322c367bf4e9e89fc2bc79b7e933c05b218e83d79a + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.2 + resolution: "es-set-tostringtag@npm:2.0.2" + dependencies: + get-intrinsic: ^1.2.2 + has-tostringtag: ^1.0.0 + hasown: ^2.0.0 + checksum: afcec3a4c9890ae14d7ec606204858441c801ff84f312538e1d1ccf1e5493c8b17bd672235df785f803756472cb4f2d49b87bde5237aef33411e74c22f194e07 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 languageName: node linkType: hard @@ -4860,13 +5059,13 @@ __metadata: linkType: hard "es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": - version: 0.10.60 - resolution: "es5-ext@npm:0.10.60" + version: 0.10.62 + resolution: "es5-ext@npm:0.10.62" dependencies: es6-iterator: ^2.0.3 es6-symbol: ^3.1.3 next-tick: ^1.1.0 - checksum: 382e7532ef480fbceb6f315bd394fab65aa5b00fbbc4f9adc2144eb1fd27cade6ba4c544289f10c74cf07f4e724a70e5dc374ac1504e667b72495bd244847763 + checksum: 25f42f6068cfc6e393cf670bc5bba249132c5f5ec2dd0ed6e200e6274aca2fed8e9aec8a31c76031744c78ca283c57f0b41c7e737804c6328c7b8d3fbcba7983 languageName: node linkType: hard @@ -4881,6 +5080,13 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^4.2.8": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d + languageName: node + linkType: hard + "es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": version: 3.1.3 resolution: "es6-symbol@npm:3.1.3" @@ -4905,13 +5111,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - "escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -4919,6 +5118,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + "escodegen@npm:1.8.x": version: 1.8.1 resolution: "escodegen@npm:1.8.1" @@ -4939,35 +5145,36 @@ __metadata: linkType: hard "eslint-config-prettier@npm:^8.5.0": - version: 8.5.0 - resolution: "eslint-config-prettier@npm:8.5.0" + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 0d0f5c32e7a0ad91249467ce71ca92394ccd343178277d318baf32063b79ea90216f4c81d1065d60f96366fdc60f151d4d68ae7811a58bd37228b84c2083f893 + checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 languageName: node linkType: hard "eslint-config-standard@npm:^17.0.0": - version: 17.0.0 - resolution: "eslint-config-standard@npm:17.0.0" + version: 17.1.0 + resolution: "eslint-config-standard@npm:17.1.0" peerDependencies: eslint: ^8.0.1 eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 + eslint-plugin-n: "^15.0.0 || ^16.0.0 " eslint-plugin-promise: ^6.0.0 - checksum: dc0ed51e186fd963ff2c0819d33ef580afce11b11036cbcf5e74427e26e514c2b1be96b8ffe74fd2fd00263554a0d49cc873fcf76f17c3dfdba614b45d7fd7da + checksum: 8ed14ffe424b8a7e67b85e44f75c46dc4c6954f7c474c871c56fb0daf40b6b2a7af2db55102b12a440158b2be898e1fb8333b05e3dbeaeaef066fdbc863eaa88 languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.6": - version: 0.3.6 - resolution: "eslint-import-resolver-node@npm:0.3.6" +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: debug: ^3.2.7 - resolve: ^1.20.0 - checksum: 6266733af1e112970e855a5bcc2d2058fb5ae16ad2a6d400705a86b29552b36131ffc5581b744c23d550de844206fb55e9193691619ee4dbf225c4bde526b1c8 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 languageName: node linkType: hard @@ -4987,13 +5194,15 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.3": - version: 2.7.3 - resolution: "eslint-module-utils@npm:2.7.3" +"eslint-module-utils@npm:^2.8.0": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" dependencies: debug: ^3.2.7 - find-up: ^2.1.0 - checksum: 77048263f309167a1e6a1e1b896bfb5ddd1d3859b2e2abbd9c32c432aee13d610d46e6820b1ca81b37fba437cf423a404bc6649be64ace9148a3062d1886a678 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 languageName: node linkType: hard @@ -5010,25 +5219,29 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.26.0": - version: 2.26.0 - resolution: "eslint-plugin-import@npm:2.26.0" + version: 2.29.0 + resolution: "eslint-plugin-import@npm:2.29.0" dependencies: - array-includes: ^3.1.4 - array.prototype.flat: ^1.2.5 - debug: ^2.6.9 + array-includes: ^3.1.7 + array.prototype.findlastindex: ^1.2.3 + array.prototype.flat: ^1.3.2 + array.prototype.flatmap: ^1.3.2 + debug: ^3.2.7 doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.6 - eslint-module-utils: ^2.7.3 - has: ^1.0.3 - is-core-module: ^2.8.1 + eslint-import-resolver-node: ^0.3.9 + eslint-module-utils: ^2.8.0 + hasown: ^2.0.0 + is-core-module: ^2.13.1 is-glob: ^4.0.3 minimatch: ^3.1.2 - object.values: ^1.1.5 - resolve: ^1.22.0 - tsconfig-paths: ^3.14.1 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 + semver: ^6.3.1 + tsconfig-paths: ^3.14.2 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655 + checksum: 19ee541fb95eb7a796f3daebe42387b8d8262bbbcc4fd8a6e92f63a12035f3d2c6cb8bc0b6a70864fa14b1b50ed6b8e6eed5833e625e16cb6bb98b665beff269 languageName: node linkType: hard @@ -5049,8 +5262,8 @@ __metadata: linkType: hard "eslint-plugin-prettier@npm:^4.0.0": - version: 4.0.0 - resolution: "eslint-plugin-prettier@npm:4.0.0" + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" dependencies: prettier-linter-helpers: ^1.0.0 peerDependencies: @@ -5059,16 +5272,16 @@ __metadata: peerDependenciesMeta: eslint-config-prettier: optional: true - checksum: 03d69177a3c21fa2229c7e427ce604429f0b20ab7f411e2e824912f572a207c7f5a41fd1f0a95b9b8afe121e291c1b1f1dc1d44c7aad4b0837487f9c19f5210d + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 languageName: node linkType: hard "eslint-plugin-promise@npm:^6.0.0": - version: 6.0.0 - resolution: "eslint-plugin-promise@npm:6.0.0" + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 7e761507c51267b77e4ad710e7c8938aa4f8f69b975886034e57497a1816e9527eda364e25aac03d1b4e0df2e738ba98e49ad075d028824fcfea533a1419751c + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a languageName: node linkType: hard @@ -5081,6 +5294,33 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-sort-keys-fix@npm:1.1.2": + version: 1.1.2 + resolution: "eslint-plugin-sort-keys-fix@npm:1.1.2" + dependencies: + espree: ^6.1.2 + esutils: ^2.0.2 + natural-compare: ^1.4.0 + requireindex: ~1.2.0 + checksum: d089e4ec4f8cea4ec239132f85c807ce71e500370e3ef778d684697da5011b413e625d6f5b9bf3b5b1cf7c4eafffc39d386bffca271b7c3e7983409fb0d7d2c6 + languageName: node + linkType: hard + +"eslint-plugin-typescript-sort-keys@npm:2.1.0": + version: 2.1.0 + resolution: "eslint-plugin-typescript-sort-keys@npm:2.1.0" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + json-schema: ^0.4.0 + natural-compare-lite: ^1.4.0 + peerDependencies: + "@typescript-eslint/parser": ^1 || ^2 || ^3 || ^4 || ^5 + eslint: ^5 || ^6 || ^7 || ^8 + typescript: ^3 || ^4 + checksum: 98ea442519ca9cdd36aa4d7d4e4f3d96d16a9287e32ea69209865ff3cd10ce33d9c4acb86ddc2cc0406a072aea319841496e66b512f79c58aaf3924d85f73683 + languageName: node + linkType: hard + "eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -5091,13 +5331,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.1.1": - version: 7.1.1 - resolution: "eslint-scope@npm:7.1.1" +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard @@ -5110,17 +5350,6 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^1.1.0": version: 1.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" @@ -5128,73 +5357,80 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard "eslint@npm:^8.13.0": - version: 8.13.0 - resolution: "eslint@npm:8.13.0" - dependencies: - "@eslint/eslintrc": ^1.2.1 - "@humanwhocodes/config-array": ^0.9.2 - ajv: ^6.10.0 + version: 8.55.0 + resolution: "eslint@npm:8.55.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.55.0 + "@humanwhocodes/config-array": ^0.11.13 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 - eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 - eslint-visitor-keys: ^3.3.0 - espree: ^9.3.1 - esquery: ^1.4.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 - functional-red-black-tree: ^1.0.1 - glob-parent: ^6.0.1 - globals: ^13.6.0 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 ignore: ^5.2.0 - import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 + is-path-inside: ^3.0.3 js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 - minimatch: ^3.0.4 + minimatch: ^3.1.2 natural-compare: ^1.4.0 - optionator: ^0.9.1 - regexpp: ^3.2.0 + optionator: ^0.9.3 strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: bc7d2fc9a046d42cb2c8987573ecaf534c1fae14747c4695e32388e179c5f21b83eefdb3e4f35924bf76152e226d7cc9dfb21f12348baf12c803109005b17439 + checksum: 83f82a604559dc1faae79d28fdf3dfc9e592ca221052e2ea516e1b379b37e77e4597705a16880e2f5ece4f79087c1dd13fd7f6e9746f794a401175519db18b41 languageName: node linkType: hard -"espree@npm:^9.3.1": - version: 9.3.1 - resolution: "espree@npm:9.3.1" +"espree@npm:^6.1.2": + version: 6.2.1 + resolution: "espree@npm:6.2.1" dependencies: - acorn: ^8.7.0 - acorn-jsx: ^5.3.1 - eslint-visitor-keys: ^3.3.0 - checksum: d7161db30b65427e0799383699ac4c441533a38faee005153694b68b933ba7a24666680edfc490fa77e3a84a22dbd955768034a6f811af5049774eead83063a5 + acorn: ^7.1.1 + acorn-jsx: ^5.2.0 + eslint-visitor-keys: ^1.1.0 + checksum: 99c508950b5b9f53d008d781d2abb7a4ef3496ea699306fb6eb737c7e513aa594644314364c50ec27abb220124c6851fff64a6b62c358479534369904849360b + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 languageName: node linkType: hard @@ -5218,12 +5454,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -5271,22 +5507,7 @@ __metadata: languageName: node linkType: hard -"eth-block-tracker@npm:^3.0.0": - version: 3.0.1 - resolution: "eth-block-tracker@npm:3.0.1" - dependencies: - eth-query: ^2.1.0 - ethereumjs-tx: ^1.3.3 - ethereumjs-util: ^5.1.3 - ethjs-util: ^0.1.3 - json-rpc-engine: ^3.6.0 - pify: ^2.3.0 - tape: ^4.6.3 - checksum: b68dda7a60e2c15fa7097f31277ebfce08852de83229c2c65879a5482db28610bc85248cfe6578971ad2357552d5ce6124fb0c2a29d18fd30c70f092beeda3b8 - languageName: node - linkType: hard - -"eth-ens-namehash@npm:2.0.8, eth-ens-namehash@npm:^2.0.8": +"eth-ens-namehash@npm:2.0.8": version: 2.0.8 resolution: "eth-ens-namehash@npm:2.0.8" dependencies: @@ -5296,64 +5517,29 @@ __metadata: languageName: node linkType: hard -"eth-gas-reporter@npm:^0.2.24": - version: 0.2.25 - resolution: "eth-gas-reporter@npm:0.2.25" +"eth-gas-reporter@npm:^0.2.25": + version: 0.2.27 + resolution: "eth-gas-reporter@npm:0.2.27" dependencies: - "@ethersproject/abi": ^5.0.0-beta.146 "@solidity-parser/parser": ^0.14.0 + axios: ^1.5.1 cli-table3: ^0.5.0 colors: 1.4.0 ethereum-cryptography: ^1.0.3 - ethers: ^4.0.40 + ethers: ^5.7.2 fs-readdir-recursive: ^1.1.0 lodash: ^4.17.14 markdown-table: ^1.1.3 - mocha: ^7.1.1 + mocha: ^10.2.0 req-cwd: ^2.0.0 - request: ^2.88.0 - request-promise-native: ^1.0.5 - sha1: ^1.1.1 - sync-request: ^6.0.0 - peerDependencies: - "@codechecks/client": ^0.1.0 - peerDependenciesMeta: - "@codechecks/client": - optional: true - checksum: 3bfa81e554b069bb817f2a073a601a0429e6b582c56ad99db0727dc2a102ab00fc27888820b8a042a194a8fb7d40954d10cd7b011ede6b8170285d2d5a88666c - languageName: node - linkType: hard - -"eth-json-rpc-infura@npm:^3.1.0": - version: 3.2.1 - resolution: "eth-json-rpc-infura@npm:3.2.1" - dependencies: - cross-fetch: ^2.1.1 - eth-json-rpc-middleware: ^1.5.0 - json-rpc-engine: ^3.4.0 - json-rpc-error: ^2.0.0 - checksum: 393e825986c0eedb9a1bb771b84e5b7c4037d8f870ab92cdba9dbaa52b5c7d5755ed02fd80d2a07b5db7a3af2c0b30d37756eb39cd7d2ae39173c6c2ea138e7d - languageName: node - linkType: hard - -"eth-json-rpc-middleware@npm:^1.5.0": - version: 1.6.0 - resolution: "eth-json-rpc-middleware@npm:1.6.0" - dependencies: - async: ^2.5.0 - eth-query: ^2.1.2 - eth-tx-summary: ^3.1.2 - ethereumjs-block: ^1.6.0 - ethereumjs-tx: ^1.3.3 - ethereumjs-util: ^5.1.2 - ethereumjs-vm: ^2.1.0 - fetch-ponyfill: ^4.0.0 - json-rpc-engine: ^3.6.0 - json-rpc-error: ^2.0.0 - json-stable-stringify: ^1.0.1 - promise-to-callback: ^1.0.0 - tape: ^4.6.3 - checksum: 0f6c146bdb277b3be9eef68f7424e1709a57f58330a3ae076153313be60f5026a5eee0de16d1ee6e41515e76cb1d38ef590948dd55d4b3ab1b3659af61337922 + sha1: ^1.1.1 + sync-request: ^6.0.0 + peerDependencies: + "@codechecks/client": ^0.1.0 + peerDependenciesMeta: + "@codechecks/client": + optional: true + checksum: 9a26a4936693de6dbe633a9e6f9d69eb93c9d45c61ecbc20702a72f15ade424785e29ae8e62ea3a2afc49ea22a4777a71914dc8da1b8587e9d47d085a3246784 languageName: node linkType: hard @@ -5382,70 +5568,6 @@ __metadata: languageName: node linkType: hard -"eth-query@npm:^2.0.2, eth-query@npm:^2.1.0, eth-query@npm:^2.1.2": - version: 2.1.2 - resolution: "eth-query@npm:2.1.2" - dependencies: - json-rpc-random-id: ^1.0.0 - xtend: ^4.0.1 - checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 - languageName: node - linkType: hard - -"eth-sig-util@npm:3.0.0": - version: 3.0.0 - resolution: "eth-sig-util@npm:3.0.0" - dependencies: - buffer: ^5.2.1 - elliptic: ^6.4.0 - ethereumjs-abi: 0.6.5 - ethereumjs-util: ^5.1.1 - tweetnacl: ^1.0.0 - tweetnacl-util: ^0.15.0 - checksum: fbe44efb7909737b070e1e1d8c7096da3bdbd1356de242fc3458849e042e39c83a4e2dd1cbce0dc21ff3e5eca1843981751428bc160dcf3a6fcca2f1e8161be4 - languageName: node - linkType: hard - -"eth-sig-util@npm:^1.4.2": - version: 1.4.2 - resolution: "eth-sig-util@npm:1.4.2" - dependencies: - ethereumjs-abi: "git+https://github.com/ethereumjs/ethereumjs-abi.git" - ethereumjs-util: ^5.1.1 - checksum: 578f5c571c1bb0a86dc1bd4a5b56b8073b37823496d7afa74d772cf91ae6860f91bafcbee931be39a3d13f0c195df9f026a27fce350605ad5d15901a5a4ea94a - languageName: node - linkType: hard - -"eth-tx-summary@npm:^3.1.2": - version: 3.2.4 - resolution: "eth-tx-summary@npm:3.2.4" - dependencies: - async: ^2.1.2 - clone: ^2.0.0 - concat-stream: ^1.5.1 - end-of-stream: ^1.1.0 - eth-query: ^2.0.2 - ethereumjs-block: ^1.4.1 - ethereumjs-tx: ^1.1.1 - ethereumjs-util: ^5.0.1 - ethereumjs-vm: ^2.6.0 - through2: ^2.0.3 - checksum: 7df8b91bc2bd3f6941e2a5b3230cad5c5523ca3750190cd06af07983feba1bb4af893f226f01072958b00aa626869846894bcb1bfaa451d9c8f7f5b8cdf5ce0a - languageName: node - linkType: hard - -"ethashjs@npm:~0.0.7": - version: 0.0.8 - resolution: "ethashjs@npm:0.0.8" - dependencies: - async: ^2.1.2 - buffer-xor: ^2.0.1 - ethereumjs-util: ^7.0.2 - miller-rabin: ^4.0.0 - checksum: d9b6b47d32cbe017848ce5d8aec86eb6416300c6f52a68029bf6fc8fcf5429a45c14f2033d514435acd02047af16f6f804056e81587b30ed677039ac678b15f8 - languageName: node - linkType: hard - "ethereum-bloom-filters@npm:^1.0.6": version: 1.0.10 resolution: "ethereum-bloom-filters@npm:1.0.10" @@ -5455,21 +5577,7 @@ __metadata: languageName: node linkType: hard -"ethereum-common@npm:0.2.0": - version: 0.2.0 - resolution: "ethereum-common@npm:0.2.0" - checksum: 5e80af27482530ac700676502cd4c02a7248c064999d01dced302f5f40a180c86f57caaab347dbd12482c2869539d321c8c0039db9e3dfb1411e6ad3d57b2547 - languageName: node - linkType: hard - -"ethereum-common@npm:^0.0.18": - version: 0.0.18 - resolution: "ethereum-common@npm:0.0.18" - checksum: 2244126199604abc17508ca249c6f8a66a2ed02e9c97115f234e311f42e2d67aedff08128569fa3dfb8a2d09e1c194eace39a1ce61bfeb2338b6d3f2ac324ee8 - languageName: node - linkType: hard - -"ethereum-cryptography@npm:^0.1.2, ethereum-cryptography@npm:^0.1.3": +"ethereum-cryptography@npm:0.1.3, ethereum-cryptography@npm:^0.1.3": version: 0.1.3 resolution: "ethereum-cryptography@npm:0.1.3" dependencies: @@ -5493,49 +5601,44 @@ __metadata: linkType: hard "ethereum-cryptography@npm:^1.0.3": - version: 1.0.3 - resolution: "ethereum-cryptography@npm:1.0.3" - dependencies: - "@noble/hashes": 1.0.0 - "@noble/secp256k1": 1.5.5 - "@scure/bip32": 1.0.1 - "@scure/bip39": 1.0.0 - checksum: a461a50975626a3061a3775046713ebf48f37b6a61fbaec46d8a070e3fd6e982edba754bd2f9f58b11f46ad4d7fad9b18ae614cfc42e619c00cc6e3d31cee10d - languageName: node - linkType: hard - -"ethereum-waffle@npm:^3.4.4": - version: 3.4.4 - resolution: "ethereum-waffle@npm:3.4.4" + version: 1.2.0 + resolution: "ethereum-cryptography@npm:1.2.0" dependencies: - "@ethereum-waffle/chai": ^3.4.4 - "@ethereum-waffle/compiler": ^3.4.4 - "@ethereum-waffle/mock-contract": ^3.4.4 - "@ethereum-waffle/provider": ^3.4.4 - ethers: ^5.0.1 - bin: - waffle: bin/waffle - checksum: 5a181b52f66f1b3c89ed1b68ef44cbd9acd4d743262de9edbe1fd57b0925576dd62c3436b1e65434d5ac03ab16da0df283972cd9aae726de0b8b9cdd7876b917 + "@noble/hashes": 1.2.0 + "@noble/secp256k1": 1.7.1 + "@scure/bip32": 1.1.5 + "@scure/bip39": 1.1.1 + checksum: 97e8e8253cb9f5a9271bd0201c37609c451c890eb85883b9c564f14743c3d7c673287406c93bf5604307593ee298ad9a03983388b85c11ca61461b9fc1a4f2c7 languageName: node linkType: hard -"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": - version: 0.6.8 - resolution: "ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0" +"ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.2": + version: 2.1.2 + resolution: "ethereum-cryptography@npm:2.1.2" dependencies: - bn.js: ^4.11.8 - ethereumjs-util: ^6.0.0 - checksum: ae074be0bb012857ab5d3ae644d1163b908a48dd724b7d2567cfde309dc72222d460438f2411936a70dc949dc604ce1ef7118f7273bd525815579143c907e336 + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + checksum: 2e8f7b8cc90232ae838ab6a8167708e8362621404d26e79b5d9e762c7b53d699f7520aff358d9254de658fcd54d2d0af168ff909943259ed27dc4cef2736410c languageName: node linkType: hard -"ethereumjs-abi@npm:0.6.5": - version: 0.6.5 - resolution: "ethereumjs-abi@npm:0.6.5" +"ethereum-waffle@npm:^4.0.9": + version: 4.0.10 + resolution: "ethereum-waffle@npm:4.0.10" dependencies: - bn.js: ^4.10.0 - ethereumjs-util: ^4.3.0 - checksum: 3abdc79dc60614d30b1cefb5e6bfbdab3ca8252b4e742330544103f86d6e49a55921d9b8822a0a47fee3efd9dd2493ec93448b1869d82479a4c71a44001e8337 + "@ethereum-waffle/chai": 4.0.10 + "@ethereum-waffle/compiler": 4.0.3 + "@ethereum-waffle/mock-contract": 4.0.4 + "@ethereum-waffle/provider": 4.0.5 + solc: 0.8.15 + typechain: ^8.0.0 + peerDependencies: + ethers: "*" + bin: + waffle: bin/waffle + checksum: 680df4f5cf61f2f64b740d7724323e0872b1b1462e7ee2f1de6a1c9732155b28c4ac25c669ba557f72e1bb20204f81696a1fd543aece03654d71a9d9ebe1fc53 languageName: node linkType: hard @@ -5549,107 +5652,20 @@ __metadata: languageName: node linkType: hard -"ethereumjs-account@npm:3.0.0, ethereumjs-account@npm:^3.0.0": - version: 3.0.0 - resolution: "ethereumjs-account@npm:3.0.0" - dependencies: - ethereumjs-util: ^6.0.0 - rlp: ^2.2.1 - safe-buffer: ^5.1.1 - checksum: 64dbe026d29aca12c79596cf4085fb27e209988f11b7d5bf3a1f2aadaaa517d90d722680c8b525144c26a2d9cd8494aa26ac088fa80b358cc3e28024f7ddbe81 - languageName: node - linkType: hard - -"ethereumjs-account@npm:^2.0.3": - version: 2.0.5 - resolution: "ethereumjs-account@npm:2.0.5" - dependencies: - ethereumjs-util: ^5.0.0 - rlp: ^2.0.0 - safe-buffer: ^5.1.1 - checksum: 2e4546b8b0213168eebd3a5296da904b6f55470e39b4c742d252748927d2b268f8d6374b0178c1d5b7188646f97dae74a7ac1c7485fe96ea557c152b52223f18 - languageName: node - linkType: hard - -"ethereumjs-block@npm:2.2.2, ethereumjs-block@npm:^2.2.2, ethereumjs-block@npm:~2.2.0, ethereumjs-block@npm:~2.2.2": - version: 2.2.2 - resolution: "ethereumjs-block@npm:2.2.2" - dependencies: - async: ^2.0.1 - ethereumjs-common: ^1.5.0 - ethereumjs-tx: ^2.1.1 - ethereumjs-util: ^5.0.0 - merkle-patricia-tree: ^2.1.2 - checksum: 91f7f60820394e072c9a115da2871a096414644109d2449d4a79b30be67b0080bc848dfa7e2ae7b2ab255de3be4f6736c6cb2b418c29eada794d018cc384e189 - languageName: node - linkType: hard - -"ethereumjs-block@npm:^1.2.2, ethereumjs-block@npm:^1.4.1, ethereumjs-block@npm:^1.6.0": - version: 1.7.1 - resolution: "ethereumjs-block@npm:1.7.1" - dependencies: - async: ^2.0.1 - ethereum-common: 0.2.0 - ethereumjs-tx: ^1.2.2 - ethereumjs-util: ^5.0.0 - merkle-patricia-tree: ^2.1.2 - checksum: 9967c3674af77ea8475a3c023fa160ef6b614450ec50fa32ac083909ead22d3d1c3148f9407b6593d3ccfbe0c51f889c26aa1c15b17026fc2d35cbc542822af8 - languageName: node - linkType: hard - -"ethereumjs-blockchain@npm:^4.0.3": - version: 4.0.4 - resolution: "ethereumjs-blockchain@npm:4.0.4" - dependencies: - async: ^2.6.1 - ethashjs: ~0.0.7 - ethereumjs-block: ~2.2.2 - ethereumjs-common: ^1.5.0 - ethereumjs-util: ^6.1.0 - flow-stoplight: ^1.0.0 - level-mem: ^3.0.1 - lru-cache: ^5.1.1 - rlp: ^2.2.2 - semaphore: ^1.1.0 - checksum: efa04b2e2d02ce9c524f246f862b1ca779bbfd9f795cc7a9e471f0d96229de5188f1f6b17e54948f640100116b646ed03242494c23cd66f0f7e8384a4f217ba4 - languageName: node - linkType: hard - -"ethereumjs-common@npm:1.5.0": - version: 1.5.0 - resolution: "ethereumjs-common@npm:1.5.0" - checksum: a30474986a88b8f3ee53f9fb34027528f12d1bc7ecee8b80aa8060a09ccde3b2af4dd24c928287018003e4e206cd4f6311cdd508442d1452d02ec3d8e7a0601e - languageName: node - linkType: hard - -"ethereumjs-common@npm:^1.1.0, ethereumjs-common@npm:^1.3.2, ethereumjs-common@npm:^1.5.0": - version: 1.5.2 - resolution: "ethereumjs-common@npm:1.5.2" - checksum: 3fc64faced268e0c61da50c5db76d18cfd44325d5706792f32ac8c85c0e800d52db284f042c3bd0623daf59b946176ef7dbea476d1b0252492137fa4549a3349 - languageName: node - linkType: hard - -"ethereumjs-tx@npm:2.1.2, ethereumjs-tx@npm:^2.1.1, ethereumjs-tx@npm:^2.1.2": - version: 2.1.2 - resolution: "ethereumjs-tx@npm:2.1.2" - dependencies: - ethereumjs-common: ^1.5.0 - ethereumjs-util: ^6.0.0 - checksum: a5b607b4e125ed696d76a9e4db8a95e03a967323c66694912d799619b16fa43985336924221f9e7582dc1b09ff88a62116bf2290ee14d952bf7e6715e5728525 - languageName: node - linkType: hard - -"ethereumjs-tx@npm:^1.1.1, ethereumjs-tx@npm:^1.2.0, ethereumjs-tx@npm:^1.2.2, ethereumjs-tx@npm:^1.3.3": - version: 1.3.7 - resolution: "ethereumjs-tx@npm:1.3.7" +"ethereumjs-util@npm:7.1.3": + version: 7.1.3 + resolution: "ethereumjs-util@npm:7.1.3" dependencies: - ethereum-common: ^0.0.18 - ethereumjs-util: ^5.0.0 - checksum: fe2323fe7db7f5dda85715dc67c31dd1f2925bf5a88e393ba939dbe699b73df008f1332f711b1aa37e943193acf3b6976202a33f2fab1f7675b6d2dd70f424d4 + "@types/bn.js": ^5.1.0 + bn.js: ^5.1.2 + create-hash: ^1.1.2 + ethereum-cryptography: ^0.1.3 + rlp: ^2.2.4 + checksum: 6de7a32af05c7265c96163ecd15ad97327afab9deb36092ef26250616657a8c0b5df8e698328247c8193e7b87c643c967f64f0b3cff2b2937cafa870ff5fcb41 languageName: node linkType: hard -"ethereumjs-util@npm:6.2.1, ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.1.0, ethereumjs-util@npm:^6.2.0, ethereumjs-util@npm:^6.2.1": +"ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.2.1": version: 6.2.1 resolution: "ethereumjs-util@npm:6.2.1" dependencies: @@ -5664,48 +5680,7 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:^4.3.0": - version: 4.5.1 - resolution: "ethereumjs-util@npm:4.5.1" - dependencies: - bn.js: ^4.8.0 - create-hash: ^1.1.2 - elliptic: ^6.5.2 - ethereum-cryptography: ^0.1.3 - rlp: ^2.0.0 - checksum: ee91fbd29634d40cad9adf90f202158324c089bbc10b405d2ef139f4542090e6f76a616d16c601b52d6b5c5d59ddb6c8387cf60cc732884e732dad9a62b8a539 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^5.0.0, ethereumjs-util@npm:^5.0.1, ethereumjs-util@npm:^5.1.1, ethereumjs-util@npm:^5.1.2, ethereumjs-util@npm:^5.1.3, ethereumjs-util@npm:^5.1.5, ethereumjs-util@npm:^5.2.0": - version: 5.2.1 - resolution: "ethereumjs-util@npm:5.2.1" - dependencies: - bn.js: ^4.11.0 - create-hash: ^1.1.2 - elliptic: ^6.5.2 - ethereum-cryptography: ^0.1.3 - ethjs-util: ^0.1.3 - rlp: ^2.0.0 - safe-buffer: ^5.1.1 - checksum: 20db6c639d92b35739fd5f7a71e64a92e85442ea0d176b59b5cd5828265b6cf42bd4868cf81a9b20a83738db1ffa7a2f778f1d850d663627a1a5209f7904b44f - languageName: node - linkType: hard - -"ethereumjs-util@npm:^7.0.10, ethereumjs-util@npm:^7.0.2, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.1, ethereumjs-util@npm:^7.1.4": - version: 7.1.4 - resolution: "ethereumjs-util@npm:7.1.4" - dependencies: - "@types/bn.js": ^5.1.0 - bn.js: ^5.1.2 - create-hash: ^1.1.2 - ethereum-cryptography: ^0.1.3 - rlp: ^2.2.4 - checksum: ccfd9208bfe9205af124a9138c5a90db46cd2fcacf4b80f17f67915381c03253aa2fb90ead9e0b53d9a6fcfeed4310e5dfa8dc516ca2846d16baf81d605cd8c2 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^7.1.5": +"ethereumjs-util@npm:^7.0.10, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.1, ethereumjs-util@npm:^7.1.2, ethereumjs-util@npm:^7.1.3, ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": version: 7.1.5 resolution: "ethereumjs-util@npm:7.1.5" dependencies: @@ -5733,65 +5708,6 @@ __metadata: languageName: node linkType: hard -"ethereumjs-vm@npm:4.2.0": - version: 4.2.0 - resolution: "ethereumjs-vm@npm:4.2.0" - dependencies: - async: ^2.1.2 - async-eventemitter: ^0.2.2 - core-js-pure: ^3.0.1 - ethereumjs-account: ^3.0.0 - ethereumjs-block: ^2.2.2 - ethereumjs-blockchain: ^4.0.3 - ethereumjs-common: ^1.5.0 - ethereumjs-tx: ^2.1.2 - ethereumjs-util: ^6.2.0 - fake-merkle-patricia-tree: ^1.0.1 - functional-red-black-tree: ^1.0.1 - merkle-patricia-tree: ^2.3.2 - rustbn.js: ~0.2.0 - safe-buffer: ^5.1.1 - util.promisify: ^1.0.0 - checksum: ca73c406d55baefacafbdd8cefce80740098e5834096042e93285dc386ee670b4fed2f7846b78e3078fdf41231d04b3f1c40e435e639d072e0529ccb560b797b - languageName: node - linkType: hard - -"ethereumjs-vm@npm:^2.1.0, ethereumjs-vm@npm:^2.3.4, ethereumjs-vm@npm:^2.6.0": - version: 2.6.0 - resolution: "ethereumjs-vm@npm:2.6.0" - dependencies: - async: ^2.1.2 - async-eventemitter: ^0.2.2 - ethereumjs-account: ^2.0.3 - ethereumjs-block: ~2.2.0 - ethereumjs-common: ^1.1.0 - ethereumjs-util: ^6.0.0 - fake-merkle-patricia-tree: ^1.0.1 - functional-red-black-tree: ^1.0.1 - merkle-patricia-tree: ^2.3.2 - rustbn.js: ~0.2.0 - safe-buffer: ^5.1.1 - checksum: 3b3098b2ac3d5335797e4d73fceb76d1b776e453abb5fa4d1cd94f6391f493e95e3c89a8ee602558bc2a3b36b89977e66473de73faa87c8540b1954aa7b8c3fd - languageName: node - linkType: hard - -"ethereumjs-wallet@npm:0.6.5": - version: 0.6.5 - resolution: "ethereumjs-wallet@npm:0.6.5" - dependencies: - aes-js: ^3.1.1 - bs58check: ^2.1.2 - ethereum-cryptography: ^0.1.3 - ethereumjs-util: ^6.0.0 - randombytes: ^2.0.6 - safe-buffer: ^5.1.2 - scryptsy: ^1.2.1 - utf8: ^3.0.0 - uuid: ^3.3.2 - checksum: 54a9cc8beb8ea55e9be9b024b6ed09349423145fd8c49b8662d60d9258039330163c830fec055f92becc71ea54b430d2ef29f6bd73fa49d93ea854af01d13e58 - languageName: node - linkType: hard - "ethers@npm:5.6.8": version: 5.6.8 resolution: "ethers@npm:5.6.8" @@ -5830,7 +5746,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^4.0.32, ethers@npm:^4.0.40": +"ethers@npm:^4.0.32": version: 4.0.49 resolution: "ethers@npm:4.0.49" dependencies: @@ -5847,41 +5763,41 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^5.0.1, ethers@npm:^5.0.2, ethers@npm:^5.5.2": - version: 5.6.2 - resolution: "ethers@npm:5.6.2" - dependencies: - "@ethersproject/abi": 5.6.0 - "@ethersproject/abstract-provider": 5.6.0 - "@ethersproject/abstract-signer": 5.6.0 - "@ethersproject/address": 5.6.0 - "@ethersproject/base64": 5.6.0 - "@ethersproject/basex": 5.6.0 - "@ethersproject/bignumber": 5.6.0 - "@ethersproject/bytes": 5.6.1 - "@ethersproject/constants": 5.6.0 - "@ethersproject/contracts": 5.6.0 - "@ethersproject/hash": 5.6.0 - "@ethersproject/hdnode": 5.6.0 - "@ethersproject/json-wallets": 5.6.0 - "@ethersproject/keccak256": 5.6.0 - "@ethersproject/logger": 5.6.0 - "@ethersproject/networks": 5.6.1 - "@ethersproject/pbkdf2": 5.6.0 - "@ethersproject/properties": 5.6.0 - "@ethersproject/providers": 5.6.2 - "@ethersproject/random": 5.6.0 - "@ethersproject/rlp": 5.6.0 - "@ethersproject/sha2": 5.6.0 - "@ethersproject/signing-key": 5.6.0 - "@ethersproject/solidity": 5.6.0 - "@ethersproject/strings": 5.6.0 - "@ethersproject/transactions": 5.6.0 - "@ethersproject/units": 5.6.0 - "@ethersproject/wallet": 5.6.0 - "@ethersproject/web": 5.6.0 - "@ethersproject/wordlists": 5.6.0 - checksum: 47458ba83140bff55e884ae4e7f1558b0bb3a4d90b98c002d60387cfc1fe7c5cac7a6903930880e6d7e791ebdc5409a16c634e77bcb0cc56d85ccd6b5441c7ad +"ethers@npm:^5.7.2": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 languageName: node linkType: hard @@ -5919,13 +5835,6 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - "evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -5937,84 +5846,58 @@ __metadata: languageName: node linkType: hard -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - dependencies: - debug: ^2.3.3 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - posix-character-classes: ^0.1.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard "express@npm:^4.14.0": - version: 4.17.3 - resolution: "express@npm:4.17.3" + version: 4.18.2 + resolution: "express@npm:4.18.2" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.19.2 + body-parser: 1.20.1 content-disposition: 0.5.4 content-type: ~1.0.4 - cookie: 0.4.2 + cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 - depd: ~1.1.2 + depd: 2.0.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: ~1.1.2 + finalhandler: 1.2.0 fresh: 0.5.2 + http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: ~1.1.2 - on-finished: ~2.3.0 + on-finished: 2.4.1 parseurl: ~1.3.3 path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 - qs: 6.9.7 + qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.17.2 - serve-static: 1.14.2 + send: 0.18.0 + serve-static: 1.15.0 setprototypeof: 1.2.0 - statuses: ~1.5.0 + statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 967e53b74a37eafdf9789b9938c8df86102928b4985b1ad5e385c709deeab405a364de95ca744bc2cc5d05b5d9cc1efc69ae2ae17688a462038648d5a924bfad + checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 languageName: node linkType: hard "ext@npm:^1.1.2": - version: 1.6.0 - resolution: "ext@npm:1.6.0" - dependencies: - type: ^2.5.0 - checksum: ca3ef4619e838f441a92238a98b77ac873da2175ace746c64303ffe2c3208e79a3acf3bf7004e40b720f3c2a83bf0143e6dd4a7cdfae6e73f54a3bfc7a14b5c2 - languageName: node - linkType: hard - -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" + version: 1.7.0 + resolution: "ext@npm:1.7.0" dependencies: - assign-symbols: ^1.0.0 - is-extendable: ^1.0.1 - checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 + type: ^2.7.2 + checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 languageName: node linkType: hard @@ -6025,19 +5908,21 @@ __metadata: languageName: node linkType: hard -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" +"extendable-error@npm:^0.1.5": + version: 0.1.7 + resolution: "extendable-error@npm:0.1.7" + checksum: 80478be7429a1675d2085f701239796bab3230ed6f2fb1b138fbabec24bea6516b7c5ceb6e9c209efcc9c089948d93715703845653535f8e8a49655066a9255e + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" dependencies: - array-unique: ^0.3.2 - define-property: ^1.0.0 - expand-brackets: ^2.1.4 - extend-shallow: ^2.0.1 - fragment-cache: ^0.2.1 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 languageName: node linkType: hard @@ -6055,15 +5940,6 @@ __metadata: languageName: node linkType: hard -"fake-merkle-patricia-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "fake-merkle-patricia-tree@npm:1.0.1" - dependencies: - checkpoint-store: ^1.1.0 - checksum: 8f9fe05bb5beabb31e4fbb8d2cfe83cfb36fd9f6ba78193dea8fab7a679470d45bb04c6f052d4f79da03e81129c5b5bed528902430184e1e11b4959f397019ac - 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" @@ -6072,22 +5948,22 @@ __metadata: linkType: hard "fast-diff@npm:^1.1.2": - version: 1.2.0 - resolution: "fast-diff@npm:1.2.0" - checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 languageName: node linkType: hard "fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9": - version: 3.2.11 - resolution: "fast-glob@npm:3.2.11" + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: f473105324a7780a20c06de842e15ddbb41d3cb7e71d1e4fe6e8373204f22245d54f5ab9e2061e6a1c613047345954d29b022e0e76f5c28b1df9858179a0e6d7 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 languageName: node linkType: hard @@ -6106,20 +5982,20 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.13.0 - resolution: "fastq@npm:1.13.0" + version: 1.15.0 + resolution: "fastq@npm:1.15.0" dependencies: reusify: ^1.0.4 - checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a languageName: node linkType: hard -"fetch-ponyfill@npm:^4.0.0": - version: 4.1.0 - resolution: "fetch-ponyfill@npm:4.1.0" +"figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" dependencies: - node-fetch: ~1.7.1 - checksum: 00c85b661a8314e18cb314640b69d3b6e9635517d54290c8f366ddcb21b506ac8fa5d92f899c0fe21bc2163238130be2cf73ffd9d5a8a41a9866a55c52f57f16 + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b languageName: node linkType: hard @@ -6139,18 +6015,6 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: ^2.0.1 - is-number: ^3.0.0 - repeat-string: ^1.6.1 - to-regex-range: ^2.1.0 - checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -6160,28 +6024,18 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:~1.1.2": - version: 1.1.2 - resolution: "finalhandler@npm:1.1.2" +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 escape-html: ~1.0.3 - on-finished: ~2.3.0 + on-finished: 2.4.1 parseurl: ~1.3.3 - statuses: ~1.5.0 + statuses: 2.0.1 unpipe: ~1.0.0 - checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e - languageName: node - linkType: hard - -"find-replace@npm:^1.0.3": - version: 1.0.3 - resolution: "find-replace@npm:1.0.3" - dependencies: - array-back: ^1.0.4 - test-value: ^2.1.0 - checksum: fd95f44e59bd54ea1c0169480952b339a4642cd62d81236fef7f87146d3bc00a042b17d81f896712e8542e01fe5c84e82ac37b6b77b4e3422abbcf7c13bbacfd + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 languageName: node linkType: hard @@ -6194,16 +6048,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:3.0.0, find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: ^3.0.0 - checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - -"find-up@npm:5.0.0": +"find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" dependencies: @@ -6213,16 +6058,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^1.0.0": - version: 1.1.2 - resolution: "find-up@npm:1.1.2" - dependencies: - path-exists: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a - languageName: node - linkType: hard - "find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -6232,43 +6067,34 @@ __metadata: languageName: node linkType: hard -"find-yarn-workspace-root@npm:^1.2.1": - version: 1.2.1 - resolution: "find-yarn-workspace-root@npm:1.2.1" +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" dependencies: - fs-extra: ^4.0.3 - micromatch: ^3.1.4 - checksum: a8f4565fb1ead6122acc0d324fa3257c20f7b0c91b7b266dab9eee7251fb5558fcff5b35dbfd301bfd1cbb91c1cdd1799b28ffa5b9a92efd8c7ded3663652bbe + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 languageName: node linkType: hard -"find-yarn-workspace-root@npm:^2.0.0": - version: 2.0.0 - resolution: "find-yarn-workspace-root@npm:2.0.0" +"find-yarn-workspace-root2@npm:1.2.16": + version: 1.2.16 + resolution: "find-yarn-workspace-root2@npm:1.2.16" dependencies: micromatch: ^4.0.2 - checksum: fa5ca8f9d08fe7a54ce7c0a5931ff9b7e36f9ee7b9475fb13752bcea80ec6b5f180fa5102d60b376d5526ce924ea3fc6b19301262efa0a5d248dd710f3644242 + pkg-dir: ^4.2.0 + checksum: b4abdd37ab87c2172e2abab69ecbfed365d63232742cd1f0a165020fba1b200478e944ec2035c6aaf0ae142ac4c523cbf08670f45e59b242bcc295731b017825 languageName: node linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: ^3.1.0 + flatted: ^3.2.9 + keyv: ^4.5.3 rimraf: ^3.0.2 - checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 - languageName: node - linkType: hard - -"flat@npm:^4.1.0": - version: 4.1.1 - resolution: "flat@npm:4.1.1" - dependencies: - is-buffer: ~2.0.3 - bin: - flat: cli.js - checksum: 398be12185eb0f3c59797c3670a8c35d07020b673363175676afbaf53d6b213660e060488554cf82c25504986e1a6059bdbcc5d562e87ca3e972e8a33148e3ae + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard @@ -6281,31 +6107,24 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.5 - resolution: "flatted@npm:3.2.5" - checksum: 3c436e9695ccca29620b4be5671dd72e5dd0a7500e0856611b7ca9bd8169f177f408c3b9abfa78dfe1493ee2d873e2c119080a8a9bee4e1a186a9e60ca6c89f1 - languageName: node - linkType: hard - -"flow-stoplight@npm:^1.0.0": - version: 1.0.0 - resolution: "flow-stoplight@npm:1.0.0" - checksum: 2f1f34629e724afe7de7b6cb7b5f9ef1b37fa5a4b8a10e24b9c1043872777c41f4c7e09994ecfd5bc70138a04966c3153c4e15187a24771f5d5151a325a96a2e +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 languageName: node linkType: hard -"follow-redirects@npm:^1.12.1": - version: 1.14.9 - resolution: "follow-redirects@npm:1.14.9" +"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.15.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" peerDependenciesMeta: debug: optional: true - checksum: f5982e0eb481818642492d3ca35a86989c98af1128b8e1a62911a3410621bc15d2b079e8170b35b19d3bdee770b73ed431a257ed86195af773771145baa57845 + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 languageName: node linkType: hard -"for-each@npm:^0.3.3, for-each@npm:~0.3.3": +"for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" dependencies: @@ -6314,17 +6133,13 @@ __metadata: languageName: node linkType: hard -"for-in@npm:^1.0.2": - version: 1.0.2 - resolution: "for-in@npm:1.0.2" - checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d - languageName: node - linkType: hard - -"foreach@npm:^2.0.5": - version: 2.0.5 - resolution: "foreach@npm:2.0.5" - checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard @@ -6335,6 +6150,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:1.7.1": + version: 1.7.1 + resolution: "form-data-encoder@npm:1.7.1" + checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 + languageName: node + linkType: hard + "form-data@npm:^2.2.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" @@ -6346,14 +6168,14 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c languageName: node linkType: hard @@ -6389,15 +6211,6 @@ __metadata: languageName: node linkType: hard -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: ^0.2.2 - checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -6418,7 +6231,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^4.0.2, fs-extra@npm:^4.0.3": +"fs-extra@npm:^4.0.2": version: 4.0.3 resolution: "fs-extra@npm:4.0.3" dependencies: @@ -6472,7 +6285,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": +"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -6481,6 +6294,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + "fs-readdir-recursive@npm:^1.1.0": version: 1.1.0 resolution: "fs-readdir-recursive@npm:1.1.0" @@ -6495,48 +6317,41 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.1.1": - version: 2.1.3 - resolution: "fsevents@npm:2.1.3" - dependencies: - node-gyp: latest - checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292 - conditions: os=darwin - languageName: node - linkType: hard - "fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@~2.1.1#~builtin": - version: 2.1.3 - resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=18f3a7" +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: node-gyp: latest conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 languageName: node linkType: hard @@ -6547,69 +6362,36 @@ __metadata: languageName: node linkType: hard -"ganache-core@npm:^2.13.2": - version: 2.13.2 - resolution: "ganache-core@npm:2.13.2" - dependencies: - abstract-leveldown: 3.0.0 - async: 2.6.2 - bip39: 2.5.0 - cachedown: 1.0.0 - clone: 2.1.2 - debug: 3.2.6 - encoding-down: 5.0.4 - eth-sig-util: 3.0.0 - ethereumjs-abi: 0.6.8 - ethereumjs-account: 3.0.0 - ethereumjs-block: 2.2.2 - ethereumjs-common: 1.5.0 - ethereumjs-tx: 2.1.2 - ethereumjs-util: 6.2.1 - ethereumjs-vm: 4.2.0 - ethereumjs-wallet: 0.6.5 - heap: 0.2.6 - keccak: 3.0.1 - level-sublevel: 6.6.4 - levelup: 3.1.1 - lodash: 4.17.20 - lru-cache: 5.1.1 - merkle-patricia-tree: 3.0.0 - patch-package: 6.2.2 - seedrandom: 3.0.1 - source-map-support: 0.5.12 - tmp: 0.1.0 - web3: 1.2.11 - web3-provider-engine: 14.2.1 - websocket: 1.0.32 - dependenciesMeta: - ethereumjs-wallet: - optional: true - web3: - optional: true - checksum: 799b275abd09259c88a4e78c335e807d14cc12d3a1ceb9d7cdeef484cf5fab541847edf9cf209f448190199dbd0796393d308d50e6823565154c17dd0c3a4048 +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard -"gauge@npm:^4.0.0": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" +"ganache@npm:7.4.3": + version: 7.4.3 + resolution: "ganache@npm:7.4.3" dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"get-caller-file@npm:^1.0.1": - version: 1.0.3 - resolution: "get-caller-file@npm:1.0.3" - checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05 + "@trufflesuite/bigint-buffer": 1.1.10 + "@types/bn.js": ^5.1.0 + "@types/lru-cache": 5.1.1 + "@types/seedrandom": 3.0.1 + bufferutil: 4.0.5 + emittery: 0.10.0 + keccak: 3.0.2 + leveldown: 6.1.0 + secp256k1: 4.0.3 + utf-8-validate: 5.0.7 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + bin: + ganache: dist/node/cli.js + ganache-cli: dist/node/cli.js + checksum: 170dde8c2ecd88e7f02a92bf582149e6497a2fdfb05abe9ab63a5b7cf33c061d71390f9719ef3d716dad4149299f8a87c71612ab4b40d1c57c55d7a185314630 languageName: node linkType: hard @@ -6620,21 +6402,22 @@ __metadata: languageName: node linkType: hard -"get-func-name@npm:^2.0.0": - version: 2.0.0 - resolution: "get-func-name@npm:2.0.0" - checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 +"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: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.1 - resolution: "get-intrinsic@npm:1.1.1" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": + version: 1.2.2 + resolution: "get-intrinsic@npm:1.2.2" dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.1 - checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 447ff0724df26829908dc033b62732359596fcf66027bc131ab37984afb33842d9cd458fd6cecadfe7eac22fd8a54b349799ed334cf2726025c921c7250e7417 languageName: node linkType: hard @@ -6645,13 +6428,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "get-stream@npm:3.0.0" - checksum: 36142f46005ed74ce3a45c55545ec4e7da8e243554179e345a786baf144e5c4a35fb7bdc49fadfa9f18bd08000589b6fe364abdadfc4e1eb0e1b9914a6bb9c56 - languageName: node - linkType: hard - "get-stream@npm:^4.1.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" @@ -6670,6 +6446,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -6680,13 +6463,6 @@ __metadata: languageName: node linkType: hard -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb - languageName: node - linkType: hard - "getpass@npm:^0.1.1": version: 0.1.7 resolution: "getpass@npm:0.1.7" @@ -6708,7 +6484,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, 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: @@ -6717,7 +6493,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.1": +"glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -6726,20 +6502,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.3": - version: 7.1.3 - resolution: "glob@npm:7.1.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: d72a834a393948d6c4a5cacc6a29fe5fe190e1cd134e55dfba09aee0be6fe15be343e96d8ec43558ab67ff8af28e4420c7f63a4d4db1c779e515015e9c318616 - languageName: node - linkType: hard - "glob@npm:7.1.7": version: 7.1.7 resolution: "glob@npm:7.1.7" @@ -6754,7 +6516,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.2.0, glob@npm:^7.0.0, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0, glob@npm:~7.2.0": +"glob@npm:7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -6768,6 +6530,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + "glob@npm:^5.0.15": version: 5.0.15 resolution: "glob@npm:5.0.15" @@ -6781,6 +6558,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.2.0": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + "global-modules@npm:^2.0.0": version: 2.0.0 resolution: "global-modules@npm:2.0.0" @@ -6811,19 +6602,21 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.13.0 - resolution: "globals@npm:13.13.0" +"globals@npm:^13.19.0": + version: 13.23.0 + resolution: "globals@npm:13.23.0" dependencies: type-fest: ^0.20.2 - checksum: c55ea8fd3afecb72567bac41605577e19e68476993dfb0ca4c49b86075af5f0ae3f0f5502525f69010f7c5ea5db6a1c540a80a4f80ebdfb2f686d87b0f05d7e9 + checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 languageName: node linkType: hard -"globals@npm:^9.18.0": - version: 9.18.0 - resolution: "globals@npm:9.18.0" - checksum: e9c066aecfdc5ea6f727344a4246ecc243aaf66ede3bffee10ddc0c73351794c25e727dd046090dcecd821199a63b9de6af299a6e3ba292c8b22f0a80ea32073 +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -6843,7 +6636,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.4": +"globby@npm:^11.0.0, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -6857,6 +6650,36 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"got@npm:12.1.0": + version: 12.1.0 + resolution: "got@npm:12.1.0" + dependencies: + "@sindresorhus/is": ^4.6.0 + "@szmarczak/http-timer": ^5.0.1 + "@types/cacheable-request": ^6.0.2 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^6.0.4 + cacheable-request: ^7.0.2 + decompress-response: ^6.0.0 + form-data-encoder: 1.7.1 + get-stream: ^6.0.1 + http2-wrapper: ^2.1.10 + lowercase-keys: ^3.0.0 + p-cancelable: ^3.0.0 + responselike: ^2.0.0 + checksum: 1cc9af6ca511338a7f1bbb0943999e6ac324ea3c7d826066c02e530b4ac41147b1a4cadad21b28c3938de82185ac99c33d64a3a4560c6e0b0b125191ba6ee619 + languageName: node + linkType: hard + "got@npm:9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -6876,48 +6699,52 @@ __metadata: languageName: node linkType: hard -"got@npm:^7.1.0": - version: 7.1.0 - resolution: "got@npm:7.1.0" +"got@npm:^11.8.5": + version: 11.8.6 + resolution: "got@npm:11.8.6" dependencies: - decompress-response: ^3.2.0 - duplexer3: ^0.1.4 - get-stream: ^3.0.0 - is-plain-obj: ^1.1.0 - is-retry-allowed: ^1.0.0 - is-stream: ^1.0.0 - isurl: ^1.0.0-alpha5 - lowercase-keys: ^1.0.0 - p-cancelable: ^0.3.0 - p-timeout: ^1.1.1 - safe-buffer: ^5.0.1 - timed-out: ^4.0.0 - url-parse-lax: ^1.0.0 - url-to-options: ^1.0.1 - checksum: 0270472a389bdca67e60d36cccd014e502d1797d925c06ea2ef372fb41ae99c9e25ac4f187cc422760b4a66abb5478f8821b8134b4eaefe0bf5183daeded5e2f + "@sindresorhus/is": ^4.0.0 + "@szmarczak/http-timer": ^4.0.5 + "@types/cacheable-request": ^6.0.1 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^5.0.3 + cacheable-request: ^7.0.2 + decompress-response: ^6.0.0 + http2-wrapper: ^1.0.0-beta.5.2 + lowercase-keys: ^2.0.0 + p-cancelable: ^2.0.0 + responselike: ^2.0.0 + checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, 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": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 languageName: node linkType: hard -"growl@npm:1.10.5": - version: 1.10.5 - resolution: "growl@npm:1.10.5" - checksum: 4b86685de6831cebcbb19f93870bea624afee61124b0a20c49017013987cd129e73a8c4baeca295728f41d21265e1f859d25ef36731b142ca59c655fea94bb1a +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 languageName: node linkType: hard "handlebars@npm:^4.0.1": - version: 4.7.7 - resolution: "handlebars@npm:4.7.7" + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" dependencies: minimist: ^1.2.5 - neo-async: ^2.6.0 + neo-async: ^2.6.2 source-map: ^0.6.1 uglify-js: ^3.1.4 wordwrap: ^1.0.0 @@ -6926,7 +6753,7 @@ __metadata: optional: true bin: handlebars: bin/handlebars - checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee + checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff languageName: node linkType: hard @@ -6947,32 +6774,44 @@ __metadata: languageName: node linkType: hard +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + "hardhat-gas-reporter@npm:^1.0.8": - version: 1.0.8 - resolution: "hardhat-gas-reporter@npm:1.0.8" + version: 1.0.9 + resolution: "hardhat-gas-reporter@npm:1.0.9" dependencies: array-uniq: 1.0.3 - eth-gas-reporter: ^0.2.24 + eth-gas-reporter: ^0.2.25 sha1: ^1.1.1 peerDependencies: hardhat: ^2.0.2 - checksum: bf18aacd08e0bdef81b180f3c97f76fcab885de3e92ed2dc014712e671c83ee7f77755c0e6c0f923a95f8372714cfcb7cdaa019afc42984c159603f8a8d724cf + checksum: 77f8f8d085ff3d9d7787f0227e5355e1800f7d6707bc70171e0567bf69706703ae7f6f53dce1be1d409e7e71e3629a434c94b546bdbbc1e4c1af47cd5d0c6776 languageName: node linkType: hard -"hardhat@npm:2.9.7": - version: 2.9.7 - resolution: "hardhat@npm:2.9.7" +"hardhat@npm:2.12.6": + version: 2.12.6 + resolution: "hardhat@npm:2.12.6" dependencies: - "@ethereumjs/block": ^3.6.2 - "@ethereumjs/blockchain": ^5.5.2 - "@ethereumjs/common": ^2.6.4 - "@ethereumjs/tx": ^3.5.1 - "@ethereumjs/vm": ^5.9.0 "@ethersproject/abi": ^5.1.2 "@metamask/eth-sig-util": ^4.0.0 + "@nomicfoundation/ethereumjs-block": ^4.0.0 + "@nomicfoundation/ethereumjs-blockchain": ^6.0.0 + "@nomicfoundation/ethereumjs-common": ^3.0.0 + "@nomicfoundation/ethereumjs-evm": ^1.0.0 + "@nomicfoundation/ethereumjs-rlp": ^4.0.0 + "@nomicfoundation/ethereumjs-statemanager": ^1.0.0 + "@nomicfoundation/ethereumjs-trie": ^5.0.0 + "@nomicfoundation/ethereumjs-tx": ^4.0.0 + "@nomicfoundation/ethereumjs-util": ^8.0.0 + "@nomicfoundation/ethereumjs-vm": ^6.0.0 + "@nomicfoundation/solidity-analyzer": ^0.1.0 "@sentry/node": ^5.18.1 - "@solidity-parser/parser": ^0.14.1 "@types/bn.js": ^5.1.0 "@types/lru-cache": ^5.1.0 abort-controller: ^3.0.0 @@ -6985,54 +6824,48 @@ __metadata: debug: ^4.1.1 enquirer: ^2.3.0 env-paths: ^2.2.0 - ethereum-cryptography: ^0.1.2 + ethereum-cryptography: ^1.0.3 ethereumjs-abi: ^0.6.8 - ethereumjs-util: ^7.1.4 find-up: ^2.1.0 fp-ts: 1.19.3 fs-extra: ^7.0.1 glob: 7.2.0 immutable: ^4.0.0-rc.12 io-ts: 1.10.4 + keccak: ^3.0.2 lodash: ^4.17.11 - merkle-patricia-tree: ^4.2.4 mnemonist: ^0.38.0 - mocha: ^9.2.0 + mocha: ^10.0.0 p-map: ^4.0.0 qs: ^6.7.0 raw-body: ^2.4.1 resolve: 1.17.0 semver: ^6.3.0 - slash: ^3.0.0 solc: 0.7.3 source-map-support: ^0.5.13 stacktrace-parser: ^0.1.10 - true-case-path: ^2.2.1 tsort: 0.0.1 - undici: ^4.14.1 + undici: ^5.14.0 uuid: ^8.3.2 ws: ^7.4.6 peerDependencies: - chai: ^4.2.0 + ts-node: "*" + typescript: "*" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true bin: hardhat: internal/cli/cli.js - checksum: 7435cdeb375a07078c89d43b4f28702c68203524be85510985838d7d2becba43613b271cf3d6b1739dbe3528d3a9921f95b22a166337d52dc9622bfd219b6253 - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: ^2.0.0 - checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + checksum: c97c5ed2336541e8b0a3034dc5c94319cffbf93fa1b6385091858f8eefb392129c6109cbaca0837fd4dff4d627b3e3ccb931706257a5d0bee71fc7f7fe90a536 languageName: node linkType: hard -"has-bigints@npm:^1.0.1": - version: 1.0.1 - resolution: "has-bigints@npm:1.0.1" - checksum: 44ab55868174470065d2e0f8f6def1c990d12b82162a8803c679699fa8a39f966e336f2a33c185092fe8aea7e8bf2e85f1c26add5f29d98f2318bd270096b183 +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b languageName: node linkType: hard @@ -7057,26 +6890,26 @@ __metadata: languageName: node linkType: hard -"has-symbol-support-x@npm:^1.4.1": - version: 1.4.2 - resolution: "has-symbol-support-x@npm:1.4.2" - checksum: ff06631d556d897424c00e8e79c10093ad34c93e88bb0563932d7837f148a4c90a4377abc5d8da000cb6637c0ecdb4acc9ae836c7cfd0ffc919986db32097609 +"has-property-descriptors@npm:^1.0.0": + version: 1.0.1 + resolution: "has-property-descriptors@npm:1.0.1" + dependencies: + get-intrinsic: ^1.2.2 + checksum: 2bcc6bf6ec6af375add4e4b4ef586e43674850a91ad4d46666d0b28ba8e1fd69e424c7677d24d60f69470ad0afaa2f3197f508b20b0bb7dd99a8ab77ffc4b7c4 languageName: node linkType: hard -"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e languageName: node linkType: hard -"has-to-string-tag-x@npm:^1.2.0": - version: 1.4.1 - resolution: "has-to-string-tag-x@npm:1.4.1" - dependencies: - has-symbol-support-x: ^1.4.1 - checksum: 804c4505727be7770f8b2f5e727ce31c9affc5b83df4ce12344f44b68d557fefb31f77751dbd739de900653126bcd71f8842fac06f97a3fae5422685ab0ce6f0 +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard @@ -7089,61 +6922,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: ^2.0.3 - has-values: ^0.1.4 - isobject: ^2.0.0 - checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" - dependencies: - get-value: ^2.0.6 - has-values: ^1.0.0 - isobject: ^3.0.0 - checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.4": - version: 0.1.4 - resolution: "has-values@npm:0.1.4" - checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc - languageName: node - linkType: hard - -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: ^3.0.0 - kind-of: ^4.0.0 - checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 - languageName: node - linkType: hard - -"has@npm:^1.0.3, has@npm:~1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - "hash-base@npm:^3.0.0": version: 3.1.0 resolution: "hash-base@npm:3.1.0" @@ -7175,6 +6953,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: ^1.1.2 + checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 + languageName: node + linkType: hard + "he@npm:1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -7184,13 +6971,6 @@ __metadata: languageName: node linkType: hard -"heap@npm:0.2.6": - version: 0.2.6 - resolution: "heap@npm:0.2.6" - checksum: 1291b9b9efb5090d01c6d04a89c91ca6e0e0eb7f3694d8254f7a5effcc5ab9249bc3d16767b276645ffe86d9b2bbd82ed977f8988f55375e9f2a2c80647ebbdc - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -7202,16 +6982,6 @@ __metadata: languageName: node linkType: hard -"home-or-tmp@npm:^2.0.0": - version: 2.0.0 - resolution: "home-or-tmp@npm:2.0.0" - dependencies: - os-homedir: ^1.0.0 - os-tmpdir: ^1.0.1 - checksum: b783c6ffd22f716d82f53e8c781cbe49bc9f4109a89ea86a27951e54c0bd335caf06bd828be2958cd9f4681986df1739558ae786abda6298cdd6d3edc2c362f1 - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.6.0": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -7231,23 +7001,10 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": - version: 4.1.0 - resolution: "http-cache-semantics@npm:4.1.0" - checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 - languageName: node - linkType: hard - -"http-errors@npm:1.8.1": - version: 1.8.1 - resolution: "http-errors@npm:1.8.1" - dependencies: - depd: ~1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.1 - checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 languageName: node linkType: hard @@ -7271,14 +7028,13 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 languageName: node linkType: hard @@ -7302,26 +7058,54 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.0.0 + checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e + languageName: node + linkType: hard + +"http2-wrapper@npm:^2.1.10": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.2.0 + checksum: e95e55e22c6fd61182ce81fecb9b7da3af680d479febe8ad870d05f7ebbc9f076e455193766f4e7934e50913bf1d8da3ba121fb5cd2928892390b58cf9d5c509 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "https-proxy-agent@npm:5.0.0" + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" dependencies: agent-base: 6 debug: 4 - checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + +"human-id@npm:^1.0.2": + version: 1.0.2 + resolution: "human-id@npm:1.0.2" + checksum: 95ee57ffae849f008e2ef3fe6e437be8c999861b4256f18c3b194c8928670a8a149e0576917105d5fd77e5edbb621c5a4736fade20bb7bf130113c1ebc95cb74 languageName: node linkType: hard -"iconv-lite@npm:0.4.24": +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -7348,17 +7132,17 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13": +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.2.0 - resolution: "ignore@npm:5.2.0" - checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 +"ignore@npm:^5.1.1, ignore@npm:^5.2.0": + version: 5.3.0 + resolution: "ignore@npm:5.3.0" + checksum: 2736da6621f14ced652785cb05d86301a66d70248597537176612bd0c8630893564bd5f6421f8806b09e8472e75c591ef01672ab8059c07c6eb2c09cefe04bf9 languageName: node linkType: hard @@ -7377,13 +7161,13 @@ __metadata: linkType: hard "immutable@npm:^4.0.0-rc.12": - version: 4.0.0 - resolution: "immutable@npm:4.0.0" - checksum: 4b5e9181e4d5fa06728a481835ec09c86367e5d03268666c95b522b7644ab891098022e4479a43c4c81a68f2ed82f10751ce5d33e208d7b873b6e7f9dfaf4d87 + version: 4.3.4 + resolution: "immutable@npm:4.3.4" + checksum: de3edd964c394bab83432429d3fb0b4816b42f56050f2ca913ba520bd3068ec3e504230d0800332d3abc478616e8f55d3787424a90d0952e6aba864524f1afc3 languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -7407,13 +7191,6 @@ __metadata: languageName: node linkType: hard -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -7424,7 +7201,7 @@ __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.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"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.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -7438,37 +7215,44 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3": - version: 1.0.3 - resolution: "internal-slot@npm:1.0.3" +"inquirer@npm:^8.2.4": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" dependencies: - get-intrinsic: ^1.1.0 - has: ^1.0.3 - side-channel: ^1.0.4 - checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf - languageName: node - linkType: hard - -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^6.0.1 + checksum: 387ffb0a513559cc7414eb42c57556a60e302f820d6960e89d376d092e257a919961cd485a1b4de693dbb5c0de8bc58320bfd6247dfd827a873aa82a4215a240 languageName: node linkType: hard -"invariant@npm:^2.2.2": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" +"internal-slot@npm:^1.0.5": + version: 1.0.6 + resolution: "internal-slot@npm:1.0.6" dependencies: - loose-envify: ^1.0.0 - checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + get-intrinsic: ^1.2.2 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: 7872454888047553ce97a3fa1da7cc054a28ec5400a9c2e9f4dbe4fe7c1d041cb8e8301467614b80d4246d50377aad2fb58860b294ed74d6700cc346b6f89549 languageName: node linkType: hard -"invert-kv@npm:^1.0.0": - version: 1.0.0 - resolution: "invert-kv@npm:1.0.0" - checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 languageName: node linkType: hard @@ -7481,10 +7265,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard @@ -7495,24 +7279,6 @@ __metadata: languageName: node linkType: hard -"is-accessor-descriptor@npm:^0.1.6": - version: 0.1.6 - resolution: "is-accessor-descriptor@npm:0.1.6" - dependencies: - kind-of: ^3.0.2 - checksum: 3d629a086a9585bc16a83a8e8a3416f400023301855cafb7ccc9a1d63145b7480f0ad28877dcc2cce09492c4ec1c39ef4c071996f24ee6ac626be4217b8ffc8a - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-accessor-descriptor@npm:1.0.0" - dependencies: - kind-of: ^6.0.0 - checksum: 8e475968e9b22f9849343c25854fa24492dbe8ba0dea1a818978f9f1b887339190b022c9300d08c47fe36f1b913d70ce8cbaca00369c55a56705fdb7caed37fe - languageName: node - linkType: hard - "is-arguments@npm:^1.0.4": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -7523,6 +7289,17 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -7558,62 +7335,26 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 - languageName: node - linkType: hard - -"is-buffer@npm:~2.0.3": +"is-buffer@npm:^2.0.5": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f - languageName: node - linkType: hard - -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" - dependencies: - ci-info: ^2.0.0 - bin: - is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 - languageName: node - linkType: hard - -"is-core-module@npm:^2.8.1": - version: 2.8.1 - resolution: "is-core-module@npm:2.8.1" - dependencies: - has: ^1.0.3 - checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f - languageName: node - linkType: hard - -"is-data-descriptor@npm:^0.1.4": - version: 0.1.4 - resolution: "is-data-descriptor@npm:0.1.4" - dependencies: - kind-of: ^3.0.2 - checksum: 5c622e078ba933a78338ae398a3d1fc5c23332b395312daf4f74bab4afb10d061cea74821add726cb4db8b946ba36217ee71a24fe71dd5bca4632edb7f6aad87 +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard -"is-data-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-data-descriptor@npm:1.0.0" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - kind-of: ^6.0.0 - checksum: e705e6816241c013b05a65dc452244ee378d1c3e3842bd140beabe6e12c0d700ef23c91803f971aa7b091fb0573c5da8963af34a2b573337d87bc3e1f53a4e6d + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard @@ -7626,53 +7367,6 @@ __metadata: languageName: node linkType: hard -"is-descriptor@npm:^0.1.0": - version: 0.1.6 - resolution: "is-descriptor@npm:0.1.6" - dependencies: - is-accessor-descriptor: ^0.1.6 - is-data-descriptor: ^0.1.4 - kind-of: ^5.0.0 - checksum: 0f780c1b46b465f71d970fd7754096ffdb7b69fd8797ca1f5069c163eaedcd6a20ec4a50af669075c9ebcfb5266d2e53c8b227e485eefdb0d1fee09aa1dd8ab6 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.2 - resolution: "is-descriptor@npm:1.0.2" - dependencies: - is-accessor-descriptor: ^1.0.0 - is-data-descriptor: ^1.0.0 - kind-of: ^6.0.2 - checksum: 2ed623560bee035fb67b23e32ce885700bef8abe3fbf8c909907d86507b91a2c89a9d3a4d835a4d7334dd5db0237a0aeae9ca109c1e4ef1c0e7b577c0846ab5a - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: ^2.0.4 - checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -7680,29 +7374,6 @@ __metadata: languageName: node linkType: hard -"is-finite@npm:^1.0.0": - version: 1.1.0 - resolution: "is-finite@npm:1.1.0" - checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 - languageName: node - linkType: hard - -"is-fn@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fn@npm:1.0.0" - checksum: eeea1e536716f93a92dc1a8550b2c0909fe74bb5144d0fb6d65e0d31eb9c06c30559f69d83a9351d2288cc7293b43bc074e0fab5fae19e312ff38aa0c7672827 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: ^1.0.0 - checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 - 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" @@ -7749,6 +7420,13 @@ __metadata: languageName: node linkType: hard +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -7772,15 +7450,6 @@ __metadata: languageName: node linkType: hard -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: ^3.0.2 - checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -7788,10 +7457,10 @@ __metadata: languageName: node linkType: hard -"is-object@npm:^1.0.1": - version: 1.0.2 - resolution: "is-object@npm:1.0.2" - checksum: 971219c4b1985b9751f65e4c8296d3104f0457b0e8a70849e848a4a2208bc47317d73b3b85d4a369619cb2df8284dc22584cb2695a7d99aca5e8d0aa64fc075a +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 languageName: node linkType: hard @@ -7809,16 +7478,7 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.4, is-regex@npm:~1.1.4": +"is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -7828,14 +7488,7 @@ __metadata: languageName: node linkType: hard -"is-retry-allowed@npm:^1.0.0": - version: 1.2.0 - resolution: "is-retry-allowed@npm:1.2.0" - checksum: 50d700a89ae31926b1c91b3eb0104dbceeac8790d8b80d02f5c76d9a75c2056f1bb24b5268a8a018dead606bddf116b2262e5ac07401eb8b8783b266ed22558d - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.1": +"is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" dependencies: @@ -7844,13 +7497,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^1.0.0, is-stream@npm:^1.0.1": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -7860,6 +7506,15 @@ __metadata: languageName: node linkType: hard +"is-subdir@npm:^1.1.1": + version: 1.2.0 + resolution: "is-subdir@npm:1.2.0" + dependencies: + better-path-resolve: 1.0.0 + checksum: 31029a383972bff4cc4f1bd1463fd04dde017e0a04ae3a6f6e08124a90c6c4656312d593101b0f38805fa3f3c8f6bc4583524bbf72c50784fa5ca0d3e5a76279 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -7869,16 +7524,12 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.7": - version: 1.1.8 - resolution: "is-typed-array@npm:1.1.8" +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.12 + resolution: "is-typed-array@npm:1.1.12" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-abstract: ^1.18.5 - foreach: ^2.0.5 - has-tostringtag: ^1.0.0 - checksum: aa0f9f0716e19e2fb8aef69e69e4205479d25ace778e2339fc910948115cde4b0d9aff9d5d1e8b80f09a5664998278e05e54ad3dc9cb12cefcf86db71084ed00 + which-typed-array: ^1.1.11 + checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 languageName: node linkType: hard @@ -7903,13 +7554,6 @@ __metadata: languageName: node linkType: hard -"is-utf8@npm:^0.2.0": - version: 0.2.1 - resolution: "is-utf8@npm:0.2.1" - checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 - languageName: node - linkType: hard - "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -7919,30 +7563,21 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.2": +"is-windows@npm:^1.0.0": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 languageName: node linkType: hard -"is-wsl@npm:^2.1.1": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a languageName: node linkType: hard -"isarray@npm:1.0.0, isarray@npm:~1.0.0": +"isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab @@ -7956,19 +7591,10 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: 1.0.0 - checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e languageName: node linkType: hard @@ -7979,13 +7605,16 @@ __metadata: languageName: node linkType: hard -"isurl@npm:^1.0.0-alpha5": - version: 1.0.0 - resolution: "isurl@npm:1.0.0" +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" dependencies: - has-to-string-tag-x: ^1.2.0 - is-object: ^1.0.1 - checksum: 28a96e019269d57015fa5869f19dda5a3ed1f7b21e3e0c4ff695419bd0541547db352aa32ee4a3659e811a177b0e37a5bc1a036731e71939dd16b59808ab92bd + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 languageName: node linkType: hard @@ -8003,33 +7632,14 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^3.0.0 || ^4.0.0": +"js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 languageName: node linkType: hard -"js-tokens@npm:^3.0.2": - version: 3.0.2 - resolution: "js-tokens@npm:3.0.2" - checksum: ff24cf90e6e4ac446eba56e604781c1aaf3bdaf9b13a00596a0ebd972fa3b25dc83c0f0f67289c33252abb4111e0d14e952a5d9ffb61f5c22532d555ebd8d8a9 - languageName: node - linkType: hard - -"js-yaml@npm:3.13.1": - version: 3.13.1 - resolution: "js-yaml@npm:3.13.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: 7511b764abb66d8aa963379f7d2a404f078457d106552d05a7b556d204f7932384e8477513c124749fa2de52eb328961834562bd09924902c6432e40daa408bc - languageName: node - linkType: hard - -"js-yaml@npm:3.x": +"js-yaml@npm:3.x, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -8059,21 +7669,12 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^1.3.0": - version: 1.3.0 - resolution: "jsesc@npm:1.3.0" - bin: - jsesc: bin/jsesc - checksum: 9384cc72bf8ef7f2eb75fea64176b8b0c1c5e77604854c72cb4670b7072e112e3baaa69ef134be98cb078834a7812b0bfe676ad441ccd749a59427f5ed2127f1 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: ^9.0.0 + checksum: c67bb93ccb3c291e60eb4b62931403e378906aab113ec1c2a8dd0f9a7f065ad6fd9713d627b732abefae2e244ac9ce1721c7a3142b2979532f12b258634ce6f6 languageName: node linkType: hard @@ -8084,33 +7685,17 @@ __metadata: languageName: node linkType: hard -"json-rpc-engine@npm:^3.4.0, json-rpc-engine@npm:^3.6.0": - version: 3.8.0 - resolution: "json-rpc-engine@npm:3.8.0" - dependencies: - async: ^2.0.1 - babel-preset-env: ^1.7.0 - babelify: ^7.3.0 - json-rpc-error: ^2.0.0 - promise-to-callback: ^1.0.0 - safe-event-emitter: ^1.0.1 - checksum: 4a02ddda196b68717cdcdf9bc8eac91f956b717431daf1f317e016d564bd5b8974e8a66f75fd1f069d63b8e944128020ec7c371f28cf29ac0951d3338b2f667c - languageName: node - linkType: hard - -"json-rpc-error@npm:^2.0.0": - version: 2.0.0 - resolution: "json-rpc-error@npm:2.0.0" - dependencies: - inherits: ^2.0.1 - checksum: bbfb1ff82d0605b4dfd4ac6d093e863a8f623e0e83a098ccab5711a08d2ae09ea603260d4573a524e596701e64733690a5c31901e99daebe05b09053d8702d0c +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 languageName: node linkType: hard -"json-rpc-random-id@npm:^1.0.0": - version: 1.0.1 - resolution: "json-rpc-random-id@npm:1.0.1" - checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f languageName: node linkType: hard @@ -8121,7 +7706,14 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0": +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-schema@npm:0.4.0, json-schema@npm:^0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 @@ -8135,15 +7727,6 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify@npm:1.0.1" - dependencies: - jsonify: ~0.0.0 - checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 - languageName: node - linkType: hard - "json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -8151,23 +7734,14 @@ __metadata: languageName: node linkType: hard -"json5@npm:^0.5.1": - version: 0.5.1 - resolution: "json5@npm:0.5.1" - bin: - json5: lib/cli.js - checksum: 9b85bf06955b23eaa4b7328aa8892e3887e81ca731dd27af04a5f5f1458fbc5e1de57a24442e3272f8a888dd1abe1cb68eb693324035f6b3aeba4fcab7667d62 - languageName: node - linkType: hard - -"json5@npm:^1.0.1": - version: 1.0.1 - resolution: "json5@npm:1.0.1" +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" dependencies: minimist: ^1.2.0 bin: json5: lib/cli.js - checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 languageName: node linkType: hard @@ -8208,17 +7782,10 @@ __metadata: languageName: node linkType: hard -"jsonify@npm:~0.0.0": - version: 0.0.0 - resolution: "jsonify@npm:0.0.0" - checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce - languageName: node - linkType: hard - "jsonschema@npm:^1.2.4": - version: 1.4.0 - resolution: "jsonschema@npm:1.4.0" - checksum: a2f96b5154658f5567b064d6f25fa4cb7e38b923d5dce9dad8d2566a07dd94abc4acedf234333a91f31bc9934e9dd57c270dcc51e5656b4c104408196c768580 + version: 1.4.1 + resolution: "jsonschema@npm:1.4.1" + checksum: 1ef02a6cd9bc32241ec86bbf1300bdbc3b5f2d8df6eb795517cf7d1cd9909e7beba1e54fdf73990fd66be98a182bda9add9607296b0cb00b1348212988e424b2 languageName: node linkType: hard @@ -8245,6 +7812,18 @@ __metadata: languageName: node linkType: hard +"keccak@npm:3.0.2": + version: 3.0.2 + resolution: "keccak@npm:3.0.2" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 39a7d6128b8ee4cb7dcd186fc7e20c6087cc39f573a0f81b147c323f688f1f7c2b34f62c4ae189fe9b81c6730b2d1228d8a399cdc1f3d8a4c8f030cdc4f20272 + languageName: node + linkType: hard + "keccak@npm:^1.0.2": version: 1.4.0 resolution: "keccak@npm:1.4.0" @@ -8258,15 +7837,15 @@ __metadata: languageName: node linkType: hard -"keccak@npm:^3.0.0": - version: 3.0.2 - resolution: "keccak@npm:3.0.2" +"keccak@npm:^3.0.0, keccak@npm:^3.0.2": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" dependencies: node-addon-api: ^2.0.0 node-gyp: latest node-gyp-build: ^4.2.0 readable-stream: ^3.6.0 - checksum: 39a7d6128b8ee4cb7dcd186fc7e20c6087cc39f573a0f81b147c323f688f1f7c2b34f62c4ae189fe9b81c6730b2d1228d8a399cdc1f3d8a4c8f030cdc4f20272 + checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 languageName: node linkType: hard @@ -8279,47 +7858,22 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" +"keyv@npm:^4.0.0, keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 languageName: node linkType: hard -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: ^1.1.5 - checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f - languageName: node - linkType: hard - -"kind-of@npm:^5.0.0": - version: 5.1.0 - resolution: "kind-of@npm:5.1.0" - checksum: f2a0102ae0cf19c4a953397e552571bad2b588b53282874f25fca7236396e650e2db50d41f9f516bd402536e4df968dbb51b8e69e4d5d4a7173def78448f7bab - languageName: node - linkType: hard - -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b languageName: node linkType: hard -"klaw-sync@npm:^6.0.0": - version: 6.0.0 - resolution: "klaw-sync@npm:6.0.0" - dependencies: - graceful-fs: ^4.1.11 - checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 - languageName: node - linkType: hard - "klaw@npm:^1.0.0": version: 1.3.1 resolution: "klaw@npm:1.3.1" @@ -8332,12 +7886,10 @@ __metadata: languageName: node linkType: hard -"lcid@npm:^1.0.0": - version: 1.0.0 - resolution: "lcid@npm:1.0.0" - dependencies: - invert-kv: ^1.0.0 - checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d +"kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 languageName: node linkType: hard @@ -8350,78 +7902,28 @@ __metadata: languageName: node linkType: hard -"level-codec@npm:~7.0.0": - version: 7.0.1 - resolution: "level-codec@npm:7.0.1" - checksum: 2565c131d93aea0786af5eda9bb907e3f5152fade03fd7a7751e2f95301fc5241063eb927c2f7df086fac33592523aab8df86bcf7ecc46ed53de11453b600329 - languageName: node - linkType: hard - -"level-concat-iterator@npm:~2.0.0": - version: 2.0.1 - resolution: "level-concat-iterator@npm:2.0.1" - checksum: 562583ef1292215f8e749c402510cb61c4d6fccf4541082b3d21dfa5ecde9fcccfe52bdcb5cfff9d2384e7ce5891f44df9439a6ddb39b0ffe31015600b4a828a - languageName: node - linkType: hard - -"level-errors@npm:^1.0.3": - version: 1.1.2 - resolution: "level-errors@npm:1.1.2" - dependencies: - errno: ~0.1.1 - checksum: 18c22fd574ff31567642a85d9a306604a32cbe969b8469fee29620c10488214a6b5e6bbf19e3b5e2042859e4b81041af537319c18132a1aaa56d4ed5981157b7 - languageName: node - linkType: hard - -"level-errors@npm:^2.0.0, level-errors@npm:~2.0.0": - version: 2.0.1 - resolution: "level-errors@npm:2.0.1" - dependencies: - errno: ~0.1.1 - checksum: aca5d7670e2a40609db8d7743fce289bb5202c0bc13e4a78f81f36a6642e9abc0110f48087d3d3c2c04f023d70d4ee6f2db0e20c63d29b3fda323a67bfff6526 - languageName: node - linkType: hard - -"level-errors@npm:~1.0.3": - version: 1.0.5 - resolution: "level-errors@npm:1.0.5" - dependencies: - errno: ~0.1.1 - checksum: a62df2a24987c0100855ec03f03655ddc6170b33a83987a53858ba0a7dbe125b4b5382e01068a1dc899ccf7f9d12b824702da15488bd06b4b3ee7a1e4232cb0a - languageName: node - linkType: hard - -"level-iterator-stream@npm:^2.0.3": - version: 2.0.3 - resolution: "level-iterator-stream@npm:2.0.3" +"level-concat-iterator@npm:^3.0.0": + version: 3.1.0 + resolution: "level-concat-iterator@npm:3.1.0" dependencies: - inherits: ^2.0.1 - readable-stream: ^2.0.5 - xtend: ^4.0.0 - checksum: dd4211798d032a06ebc3e9c5a3a969b003cb15f1fe6398d9c50c87dc8b0bf8b07197cada253fd7f8c4a933f3c86e12bb041df1561c89b749ac4b991d6e68b17f + catering: ^2.1.0 + checksum: a15bc4c5fbbb30c1efa7fad06b72feaac84d90990b356b461593c198a833336f31f6daff8f40c3908fabd14cfd8856d1c5ecae9e1cb0575037b65fa607e760e9 languageName: node linkType: hard -"level-iterator-stream@npm:~1.3.0": - version: 1.3.1 - resolution: "level-iterator-stream@npm:1.3.1" - dependencies: - inherits: ^2.0.1 - level-errors: ^1.0.3 - readable-stream: ^1.0.33 - xtend: ^4.0.0 - checksum: bf57d8dcee6e7ec68e6c580edc768d2e3960f93e741d7d4adcc7d86f267c741ebcfba5353b3b6551ca10d12e30939c90f1a13303313b1b719325111f0ff14540 +"level-concat-iterator@npm:~2.0.0": + version: 2.0.1 + resolution: "level-concat-iterator@npm:2.0.1" + checksum: 562583ef1292215f8e749c402510cb61c4d6fccf4541082b3d21dfa5ecde9fcccfe52bdcb5cfff9d2384e7ce5891f44df9439a6ddb39b0ffe31015600b4a828a languageName: node linkType: hard -"level-iterator-stream@npm:~3.0.0": - version: 3.0.1 - resolution: "level-iterator-stream@npm:3.0.1" +"level-errors@npm:^2.0.0, level-errors@npm:~2.0.0": + version: 2.0.1 + resolution: "level-errors@npm:2.0.1" dependencies: - inherits: ^2.0.1 - readable-stream: ^2.3.6 - xtend: ^4.0.0 - checksum: f3348316907c70163ea15319ef7e28c21c6b4b948616e11dcbbb8e3dab9ec5b39f7bf13e0d53f7d23c69641b7a2985a4911c5c9a03bd57a07f1af469aba6e3a8 + errno: ~0.1.1 + checksum: aca5d7670e2a40609db8d7743fce289bb5202c0bc13e4a78f81f36a6642e9abc0110f48087d3d3c2c04f023d70d4ee6f2db0e20c63d29b3fda323a67bfff6526 languageName: node linkType: hard @@ -8436,16 +7938,6 @@ __metadata: languageName: node linkType: hard -"level-mem@npm:^3.0.1": - version: 3.0.1 - resolution: "level-mem@npm:3.0.1" - dependencies: - level-packager: ~4.0.0 - memdown: ~3.0.0 - checksum: e4c680922afc3c8cd4502d761ab610c8aa7bcacde2550a0a463e1db069eeb55b6b7bec0bb7fda564cec82422944776f9909fe101b0d7746ad8f4f7446ec2a5cd - languageName: node - linkType: hard - "level-mem@npm:^5.0.1": version: 5.0.1 resolution: "level-mem@npm:5.0.1" @@ -8466,40 +7958,17 @@ __metadata: languageName: node linkType: hard -"level-packager@npm:~4.0.0": - version: 4.0.1 - resolution: "level-packager@npm:4.0.1" - dependencies: - encoding-down: ~5.0.0 - levelup: ^3.0.0 - checksum: af33054cfdf1f3cb409941c2e6a67190c0437f8b57a518fa1d40d3f9fd75edbb72c2c17595a52b10030fe2d64c8ef474ddb570f925d88402c94cfc95263865cb - languageName: node - linkType: hard - -"level-post@npm:^1.0.7": - version: 1.0.7 - resolution: "level-post@npm:1.0.7" - dependencies: - ltgt: ^2.1.2 - checksum: 27239cfebe2004036d7ed0ace860d03f829f099de62baf727cce53bd99cb06bfc4a202fa7cb828847fa01c421bab13d9d3e79c9554f5cffff681541dda575218 +"level-supports@npm:^2.0.1": + version: 2.1.0 + resolution: "level-supports@npm:2.1.0" + checksum: f7b16aea7ddd13326ee4fbc2c1099bcaf8a74dc95346af9ebedea4e02518c6f7a438e829b79b7890d67489b59f615a9428369a0a065021797aa7cb6b6bd84d75 languageName: node linkType: hard -"level-sublevel@npm:6.6.4": - version: 6.6.4 - resolution: "level-sublevel@npm:6.6.4" - dependencies: - bytewise: ~1.1.0 - level-codec: ^9.0.0 - level-errors: ^2.0.0 - level-iterator-stream: ^2.0.3 - ltgt: ~2.1.1 - pull-defer: ^0.2.2 - pull-level: ^2.0.3 - pull-stream: ^3.6.8 - typewiselite: ~1.0.0 - xtend: ~4.0.0 - checksum: 8370e6fbf67bf08daa23de07699d3d2ccf6a349a28db4025a890d4c07857811808372fdf5029c4afedf24e2ff828be6bb7cd9fd0b676090daba38981b2e75cff +"level-supports@npm:^4.0.0": + version: 4.0.1 + resolution: "level-supports@npm:4.0.1" + checksum: d4552b42bb8cdeada07b0f6356c7a90fefe76279147331f291aceae26e3e56d5f927b09ce921647c0230bfe03ddfbdcef332be921e5c2194421ae2bfa3cf6368 languageName: node linkType: hard @@ -8512,24 +7981,13 @@ __metadata: languageName: node linkType: hard -"level-ws@npm:0.0.0": - version: 0.0.0 - resolution: "level-ws@npm:0.0.0" - dependencies: - readable-stream: ~1.0.15 - xtend: ~2.1.1 - checksum: fcc3e6993b538ed8931612a74ef26cf32b53d71c059a819bb1006c075f0c1198afb79026a69aeeafcbd4598c45b4b214315b4216b44eca68587fce1b5ad61b75 - languageName: node - linkType: hard - -"level-ws@npm:^1.0.0": - version: 1.0.0 - resolution: "level-ws@npm:1.0.0" +"level-transcoder@npm:^1.0.1": + version: 1.0.1 + resolution: "level-transcoder@npm:1.0.1" dependencies: - inherits: ^2.0.3 - readable-stream: ^2.2.8 - xtend: ^4.0.1 - checksum: 752fd0f89eb1ccf811c09de24ca8987437ea84f88e672d0037324fb5d71c5bc022c25ba64d6a00fca33beec48a81e3cd1ef99c2f9fff267b3a4f2233939fad35 + buffer: ^6.0.3 + module-error: ^1.0.1 + checksum: 304f08d802faf3491a533b6d87ad8be3cabfd27f2713bbe9d4c633bf50fcb9460eab5a6776bf015e101ead7ba1c1853e05e7f341112f17a9d0cb37ee5a421a25 languageName: node linkType: hard @@ -8544,30 +8002,25 @@ __metadata: languageName: node linkType: hard -"levelup@npm:3.1.1, levelup@npm:^3.0.0": - version: 3.1.1 - resolution: "levelup@npm:3.1.1" +"level@npm:^8.0.0": + version: 8.0.0 + resolution: "level@npm:8.0.0" dependencies: - deferred-leveldown: ~4.0.0 - level-errors: ~2.0.0 - level-iterator-stream: ~3.0.0 - xtend: ~4.0.0 - checksum: cddcac2cf5eddcf85ade62efd21f11326cd83559619db6a78696725eac5c5cd16f62d8d49f6594fd3097d9329a1d04847f6d7df23bf4d69f18c16e49afd4a416 + browser-level: ^1.0.1 + classic-level: ^1.2.0 + checksum: 13eb25bd71bfdca6cd714d1233adf9da97de9a8a4bf9f28d62a390b5c96d0250abaf983eb90eb8c4e89c7a985bb330750683d106f12670e5ea8fba1d7e608a1f languageName: node linkType: hard -"levelup@npm:^1.2.1": - version: 1.3.9 - resolution: "levelup@npm:1.3.9" +"leveldown@npm:6.1.0": + version: 6.1.0 + resolution: "leveldown@npm:6.1.0" dependencies: - deferred-leveldown: ~1.2.1 - level-codec: ~7.0.0 - level-errors: ~1.0.3 - level-iterator-stream: ~1.3.0 - prr: ~1.0.1 - semver: ~5.4.1 - xtend: ~4.0.0 - checksum: df3b534b948c17d724050f6ecc2b21eb2fde357bd0c68582cd3a5eb4bf943a3057cd2e9db6bd7253020fcb853c83a70943bff9264f5132afa8cf3c25c3c7cd8e + abstract-leveldown: ^7.2.0 + napi-macros: ~2.0.0 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: e984b61e9fbe057cfd5c81ac0afe5d7e35d695ff130a95991e0ecb66390e4c4ff6aa3980a65b6c53edaba80527a47790bb26e3cfbd52a054957b3546d9941fe4 languageName: node linkType: hard @@ -8604,16 +8057,22 @@ __metadata: languageName: node linkType: hard -"load-json-file@npm:^1.0.0": - version: 1.1.0 - resolution: "load-json-file@npm:1.1.0" +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"load-yaml-file@npm:^0.2.0": + version: 0.2.0 + resolution: "load-yaml-file@npm:0.2.0" dependencies: - graceful-fs: ^4.1.2 - parse-json: ^2.2.0 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - strip-bom: ^2.0.0 - checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b + graceful-fs: ^4.1.5 + js-yaml: ^3.13.0 + pify: ^4.0.1 + strip-bom: ^3.0.0 + checksum: d86d7ec7b15a1c35b40fb0d8abe710a7de83e0c1186c1d35a7eaaf8581611828089a3e706f64560c2939762bc73f18a7b85aed9335058c640e033933cf317f11 languageName: node linkType: hard @@ -8627,13 +8086,12 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" dependencies: - p-locate: ^3.0.0 - path-exists: ^3.0.0 - checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 languageName: node linkType: hard @@ -8646,13 +8104,6 @@ __metadata: languageName: node linkType: hard -"lodash.assign@npm:^4.0.3, lodash.assign@npm:^4.0.6": - version: 4.2.0 - resolution: "lodash.assign@npm:4.2.0" - checksum: 75bbc6733c9f577c448031b4051f990f068802708891f94be9d4c2faffd6a9ec67a2c49671dafc908a068d35687765464853282842b4560b662e6c903d11cc90 - languageName: node - linkType: hard - "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -8660,6 +8111,13 @@ __metadata: languageName: node linkType: hard +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 + languageName: node + linkType: hard + "lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" @@ -8681,30 +8139,28 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.20": - version: 4.17.20 - resolution: "lodash@npm:4.17.20" - checksum: b31afa09739b7292a88ec49ffdb2fcaeb41f690def010f7a067eeedffece32da6b6847bfe4d38a77e6f41778b9b2bca75eeab91209936518173271f0b69376ea +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: c03a4a784aca653845fe09d0ef67c902b6e49288dc45f542a4ab345a9c406a6dc194c774423fa313ee7b06283950301c1221dd2a1d8ecb2dac8dfbb9ed5606b5 languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.17.4": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 languageName: node linkType: hard -"log-symbols@npm:3.0.0": - version: 3.0.0 - resolution: "log-symbols@npm:3.0.0" - dependencies: - chalk: ^2.4.2 - checksum: f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 +"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"log-symbols@npm:4.1.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -8714,37 +8170,12 @@ __metadata: languageName: node linkType: hard -"looper@npm:^2.0.0": - version: 2.0.0 - resolution: "looper@npm:2.0.0" - checksum: ee5124d54c97cd9e778e602e297ed37dd6405b7c36830f90bb1aaa6adb8d64f2a228aa341459e6bf2db9a8d7dc9eb8c16ec9c6bffeab1c47f91efe213858ce36 - languageName: node - linkType: hard - -"looper@npm:^3.0.0": - version: 3.0.0 - resolution: "looper@npm:3.0.0" - checksum: 2ec29b4161e95d33f2257867b0b9ab7f2fef5425582362c966f8f9041a2a6032466b8be159af99323655aca9e6fe1c9da086cf208f6346bd97c9f83ab77ccce0 - languageName: node - linkType: hard - -"loose-envify@npm:^1.0.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - -"loupe@npm:^2.3.1": - version: 2.3.4 - resolution: "loupe@npm:2.3.4" +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" dependencies: - get-func-name: ^2.0.0 - checksum: 5af91db61aa18530f1749a64735ee194ac263e65e9f4d1562bf3036c591f1baa948289c193e0e34c7b5e2c1b75d3c1dc4fce87f5edb3cee10b0c0df46bc9ffb3 + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b languageName: node linkType: hard @@ -8762,7 +8193,31 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:5.1.1, lru-cache@npm:^5.1.1": +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + +"lru-cache@npm:^4.0.1": + version: 4.1.5 + resolution: "lru-cache@npm:4.1.5" + dependencies: + pseudomap: ^1.0.2 + yallist: ^2.1.2 + checksum: 4bb4b58a36cd7dc4dcec74cbe6a8f766a38b7426f1ff59d4cf7d82a2aa9b9565cd1cb98f6ff60ce5cd174524868d7bc9b7b1c294371851356066ca9ac4cf135a + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" dependencies: @@ -8771,19 +8226,12 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^3.2.0": - version: 3.2.0 - resolution: "lru-cache@npm:3.2.0" +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" dependencies: - pseudomap: ^1.0.1 - checksum: 8e5fb3d7a83401165b8dc9fe16d74828df5754aaeda1061e4f2ea1d0e984b9071a6487f1c3f6f034f935429629f94366abbfb753827ab2977a56b3f5c276e736 - languageName: node - linkType: hard - -"lru-cache@npm:^7.4.0, lru-cache@npm:^7.7.1": - version: 7.8.1 - resolution: "lru-cache@npm:7.8.1" - checksum: 31ea67388c9774300331d70f4affd5a433869bcf0fae5405f967d19d7b447930b713b0566a2e95362c9082034a8b496f3671ccf8f0c061d8e8048412663f9432 + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 languageName: node linkType: hard @@ -8794,20 +8242,13 @@ __metadata: languageName: node linkType: hard -"ltgt@npm:^2.1.2, ltgt@npm:~2.2.0": +"ltgt@npm:~2.2.0": version: 2.2.1 resolution: "ltgt@npm:2.2.1" checksum: 7e3874296f7538bc8087b428ac4208008d7b76916354b34a08818ca7c83958c1df10ec427eeeaad895f6b81e41e24745b18d30f89abcc21d228b94f6961d50a2 languageName: node linkType: hard -"ltgt@npm:~2.1.1": - version: 2.1.3 - resolution: "ltgt@npm:2.1.3" - checksum: b09281f6aeccb34eda52588d21f9116f6e5b7ae1c79f6180bba06edcdcba50de9c6d199be7f817a7ae59819064e3ca7d066fe0bcc67e2458006e4e45cd05cb11 - languageName: node - linkType: hard - "make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -8815,43 +8256,36 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.1.2 - resolution: "make-fetch-happen@npm:10.1.2" +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.0.2 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 promise-retry: ^2.0.1 - socks-proxy-agent: ^6.1.1 - ssri: ^9.0.0 - checksum: 42825d119a7e4f5b1a8e7048a86d328cd36bb1ff875d155ce7079d9a0afdd310c198fb310096af358cfa9ecdf643cecf960380686792457dccb36e17efe89eb0 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af languageName: node linkType: hard -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed languageName: node linkType: hard -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" - dependencies: - object-visit: ^1.0.0 - checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e languageName: node linkType: hard @@ -8887,20 +8321,6 @@ __metadata: languageName: node linkType: hard -"memdown@npm:^1.0.0": - version: 1.4.1 - resolution: "memdown@npm:1.4.1" - dependencies: - abstract-leveldown: ~2.7.1 - functional-red-black-tree: ^1.0.1 - immediate: ^3.2.3 - inherits: ~2.0.1 - ltgt: ~2.2.0 - safe-buffer: ~5.1.1 - checksum: 3f89142a12389b1ebfc7adaf3be19ed57cd073f84160eb7419b61c8e188e2b82eb787dad168d7b00ca68355b6b952067d9badaa5ac88c8ee014e4b0af2bfaea0 - languageName: node - linkType: hard - "memdown@npm:^5.0.0": version: 5.1.0 resolution: "memdown@npm:5.1.0" @@ -8915,17 +8335,14 @@ __metadata: languageName: node linkType: hard -"memdown@npm:~3.0.0": - version: 3.0.0 - resolution: "memdown@npm:3.0.0" +"memory-level@npm:^1.0.0": + version: 1.0.0 + resolution: "memory-level@npm:1.0.0" dependencies: - abstract-leveldown: ~5.0.0 - functional-red-black-tree: ~1.0.1 - immediate: ~3.2.3 - inherits: ~2.0.1 - ltgt: ~2.2.0 - safe-buffer: ~5.1.1 - checksum: 4446fdf7198dcdbae764324200526f41738c9f2a32decb59b5a4dbb1bdfc72e2fc046e9bbe016469ab8a0a52e5d5c8b36bf3829e90dd4674a5f4c961e059d4de + abstract-level: ^1.0.0 + functional-red-black-tree: ^1.0.1 + module-error: ^1.0.1 + checksum: 80b1b7aedaf936e754adbcd7b9303018c3684fb32f9992fd967c448f145d177f16c724fbba9ed3c3590a9475fd563151eae664d69b83d2ad48714852e9fc5c72 languageName: node linkType: hard @@ -8936,6 +8353,25 @@ __metadata: languageName: node linkType: hard +"meow@npm:^6.0.0": + version: 6.1.1 + resolution: "meow@npm:6.1.1" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: ^4.0.2 + normalize-package-data: ^2.5.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.13.1 + yargs-parser: ^18.1.3 + checksum: 77b569781145ad030be77130623d9f74d6eef0af5e0a349419d3df39bcf6d88cc25be046a7757062162a88160fb5d8604e540b5177b371d2bbc2aaf73ec01479 + languageName: node + linkType: hard + "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" @@ -8950,38 +8386,7 @@ __metadata: languageName: node linkType: hard -"merkle-patricia-tree@npm:3.0.0": - version: 3.0.0 - resolution: "merkle-patricia-tree@npm:3.0.0" - dependencies: - async: ^2.6.1 - ethereumjs-util: ^5.2.0 - level-mem: ^3.0.1 - level-ws: ^1.0.0 - readable-stream: ^3.0.6 - rlp: ^2.0.0 - semaphore: ">=1.0.1" - checksum: a500f00e7954eea132309310c48ee2635e9a190e0a775811236a0dc375465ff7e01b230ac0ee213ca13bb995399066719eedb4218e0f47596e9cab79cebc575e - languageName: node - linkType: hard - -"merkle-patricia-tree@npm:^2.1.2, merkle-patricia-tree@npm:^2.3.2": - version: 2.3.2 - resolution: "merkle-patricia-tree@npm:2.3.2" - dependencies: - async: ^1.4.2 - ethereumjs-util: ^5.0.0 - level-ws: 0.0.0 - levelup: ^1.2.1 - memdown: ^1.0.0 - readable-stream: ^2.0.0 - rlp: ^2.0.0 - semaphore: ">=1.0.1" - checksum: f6066a16e08190b9e8d3aa28d8e861a3e884ee0be8109c4f5e879965fdfb8181cfc04bae3aaf97c7fb6d07446d94b4f3e1cce502dde4a5699a03acf6df518b12 - languageName: node - linkType: hard - -"merkle-patricia-tree@npm:^4.2.4": +"merkle-patricia-tree@npm:^4.2.2, merkle-patricia-tree@npm:^4.2.4": version: 4.2.4 resolution: "merkle-patricia-tree@npm:4.2.4" dependencies: @@ -9002,24 +8407,10 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^3.1.4": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - braces: ^2.3.1 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - extglob: ^2.0.4 - fragment-cache: ^0.2.1 - kind-of: ^6.0.2 - nanomatch: ^1.2.9 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.2 - checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 0e496547253a36e98a83fb00c628c53c3fb540fa5aaeaf718438873785afd193244988c09d219bb1802984ff227d04938d9571ef90fe82b48bd282262586aaff languageName: node linkType: hard @@ -9070,6 +8461,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -9077,6 +8475,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 + languageName: node + linkType: hard + "min-document@npm:^2.19.0": version: 2.19.0 resolution: "min-document@npm:2.19.0" @@ -9086,6 +8491,13 @@ __metadata: languageName: node linkType: hard +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -9100,7 +8512,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.1.2": +"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -9109,52 +8521,63 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" +"minimatch@npm:5.0.1": + version: 5.0.1 + resolution: "minimatch@npm:5.0.1" dependencies: - brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + brace-expansion: ^2.0.1 + checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 languageName: node linkType: hard -"minimatch@npm:4.2.1": - version: 4.2.1 - resolution: "minimatch@npm:4.2.1" +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" dependencies: - brace-expansion: ^1.1.7 - checksum: 2b1514e3d0f29a549912f0db7ae7b82c5cab4a8f2dd0369f1c6451a325b3f12b2cf473c95873b6157bb8df183d6cf6db82ff03614b6adaaf1d7e055beccdfd01 + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.6": - version: 1.2.6 - resolution: "minimist@npm:1.2.6" - checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb +"minimist-options@npm:^4.0.2": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.0 - resolution: "minipass-fetch@npm:2.1.0" +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" dependencies: encoding: ^0.1.13 - minipass: ^3.1.6 + minipass: ^7.0.3 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true - checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a languageName: node linkType: hard @@ -9195,12 +8618,26 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.1.6 - resolution: "minipass@npm:3.1.6" +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" dependencies: yallist: ^4.0.0 - checksum: 57a04041413a3531a65062452cb5175f93383ef245d6f4a2961d34386eb9aa8ac11ac7f16f791f5e8bbaf1dfb1ef01596870c88e8822215db57aa591a5bb0a77 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 languageName: node linkType: hard @@ -9223,13 +8660,10 @@ __metadata: languageName: node linkType: hard -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: ^1.0.2 - is-extendable: ^1.0.1 - checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d +"mixme@npm:^0.5.1": + version: 0.5.10 + resolution: "mixme@npm:0.5.10" + checksum: 51885f19847b98859645a592917f3939d6f262ba3cc1843a3d7858ac894704b054e7a94737a53163bc1e870e3ea23316ba97d3ba20e1dfd292fe74d5a318be98 languageName: node linkType: hard @@ -9242,23 +8676,12 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:*, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"mkdirp@npm:0.5.5": - version: 0.5.5 - resolution: "mkdirp@npm:0.5.5" - dependencies: - minimist: ^1.2.5 +"mkdirp@npm:*": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d languageName: node linkType: hard @@ -9273,6 +8696,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + "mnemonist@npm:^0.38.0": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -9282,73 +8714,35 @@ __metadata: languageName: node linkType: hard -"mocha@npm:^7.1.1": - version: 7.2.0 - resolution: "mocha@npm:7.2.0" - dependencies: - ansi-colors: 3.2.3 - browser-stdout: 1.3.1 - chokidar: 3.3.0 - debug: 3.2.6 - diff: 3.5.0 - escape-string-regexp: 1.0.5 - find-up: 3.0.0 - glob: 7.1.3 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 3.13.1 - log-symbols: 3.0.0 - minimatch: 3.0.4 - mkdirp: 0.5.5 - ms: 2.1.1 - node-environment-flags: 1.0.6 - object.assign: 4.1.0 - strip-json-comments: 2.0.1 - supports-color: 6.0.0 - which: 1.3.1 - wide-align: 1.1.3 - yargs: 13.3.2 - yargs-parser: 13.1.2 - yargs-unparser: 1.6.0 - bin: - _mocha: bin/_mocha - mocha: bin/mocha - checksum: d098484fe1b165bb964fdbf6b88b256c71fead47575ca7c5bcf8ed07db0dcff41905f6d2f0a05111a0441efaef9d09241a8cc1ddf7961056b28984ec63ba2874 - languageName: node - linkType: hard - -"mocha@npm:^9.2.0, mocha@npm:^9.2.2": - version: 9.2.2 - resolution: "mocha@npm:9.2.2" +"mocha@npm:^10.0.0, mocha@npm:^10.2.0": + version: 10.2.0 + resolution: "mocha@npm:10.2.0" dependencies: - "@ungap/promise-all-settled": 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.5.3 - debug: 4.3.3 + debug: 4.3.4 diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 7.2.0 - growl: 1.10.5 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 - minimatch: 4.2.1 + minimatch: 5.0.1 ms: 2.1.3 - nanoid: 3.3.1 + nanoid: 3.3.3 serialize-javascript: 6.0.0 strip-json-comments: 3.1.1 supports-color: 8.1.1 - which: 2.0.2 - workerpool: 6.2.0 + workerpool: 6.2.1 yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 bin: _mocha: bin/_mocha - mocha: bin/mocha - checksum: 4d5ca4ce33fc66627e63acdf09a634e2358c9a00f61de7788b1091b6aad430da04f97f9ecb82d56dc034b623cb833b65576136fd010d77679c03fcea5bc1e12d + mocha: bin/mocha.js + checksum: 406c45eab122ffd6ea2003c2f108b2bc35ba036225eee78e0c784b6fa2c7f34e2b13f1dbacef55a4fdf523255d76e4f22d1b5aacda2394bd11666febec17c719 languageName: node linkType: hard @@ -9359,6 +8753,13 @@ __metadata: languageName: node linkType: hard +"module-error@npm:^1.0.1, module-error@npm:^1.0.2": + version: 1.0.2 + resolution: "module-error@npm:1.0.2" + checksum: 5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -9366,13 +8767,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.1": - version: 2.1.1 - resolution: "ms@npm:2.1.1" - checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e - languageName: node - linkType: hard - "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -9380,7 +8774,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -9437,12 +8831,19 @@ __metadata: languageName: node linkType: hard +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + "nan@npm:^2.14.0, nan@npm:^2.2.1": - version: 2.15.0 - resolution: "nan@npm:2.15.0" + version: 2.18.0 + resolution: "nan@npm:2.18.0" dependencies: node-gyp: latest - checksum: 33e1bb4dfca447fe37d4bb5889be55de154828632c8d38646db67293a21afd61ed9909cdf1b886214a64707d935926c4e60e2b09de9edfc2ad58de31d6ce8f39 + checksum: 4fe42f58456504eab3105c04a5cffb72066b5f22bd45decf33523cb17e7d6abc33cca2a19829407b9000539c5cb25f410312d4dc5b30220167a3594896ea6a0a languageName: node linkType: hard @@ -9453,31 +8854,33 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:3.3.1": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" - bin: - nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 +"nanoid@npm:3.3.3": + version: 3.3.3 + resolution: "nanoid@npm:3.3.3" + bin: + nanoid: bin/nanoid.cjs + checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + languageName: node + linkType: hard + +"napi-macros@npm:^2.2.2": + version: 2.2.2 + resolution: "napi-macros@npm:2.2.2" + checksum: c6f9bd71cdbbc37ddc3535aa5be481238641d89585b8a3f4d301cb89abf459e2d294810432bb7d12056d1f9350b1a0899a5afcf460237a3da6c398cf0fec7629 + languageName: node + linkType: hard + +"napi-macros@npm:~2.0.0": + version: 2.0.0 + resolution: "napi-macros@npm:2.0.0" + checksum: 30384819386977c1f82034757014163fa60ab3c5a538094f778d38788bebb52534966279956f796a92ea771c7f8ae072b975df65de910d051ffbdc927f62320c languageName: node linkType: hard -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - fragment-cache: ^0.2.1 - is-windows: ^1.0.2 - kind-of: ^6.0.2 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 languageName: node linkType: hard @@ -9495,7 +8898,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.0": +"neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 @@ -9509,13 +8912,6 @@ __metadata: languageName: node linkType: hard -"nice-try@npm:^1.0.4": - version: 1.0.5 - resolution: "nice-try@npm:1.0.5" - checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff - languageName: node - linkType: hard - "node-addon-api@npm:^2.0.0": version: 2.0.2 resolution: "node-addon-api@npm:2.0.2" @@ -9534,19 +8930,9 @@ __metadata: languageName: node linkType: hard -"node-environment-flags@npm:1.0.6": - version: 1.0.6 - resolution: "node-environment-flags@npm:1.0.6" - dependencies: - object.getownpropertydescriptors: ^2.0.3 - semver: ^5.7.0 - checksum: 268139ed0f7fabdca346dcb26931300ec7a1dc54a58085a849e5c78a82b94967f55df40177a69d4e819da278d98686d5c4fd49ab0d7bcff16fda25b6fffc4ca3 - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" +"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" dependencies: whatwg-url: ^5.0.0 peerDependencies: @@ -9554,21 +8940,22 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 languageName: node linkType: hard -"node-fetch@npm:~1.7.1": - version: 1.7.3 - resolution: "node-fetch@npm:1.7.3" - dependencies: - encoding: ^0.1.11 - is-stream: ^1.0.1 - checksum: 3bb0528c05d541316ebe52770d71ee25a6dce334df4231fd55df41a644143e07f068637488c18a5b0c43f05041dbd3346752f9e19b50df50569a802484544d5b +"node-gyp-build@npm:4.3.0": + version: 4.3.0 + resolution: "node-gyp-build@npm:4.3.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 1ecab16d9f275174d516e223f60f65ebe07540347d5c04a6a7d6921060b7f2e3af4f19463d9d1dcedc452e275c2ae71354a99405e55ebd5b655bb2f38025c728 languageName: node linkType: hard -"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": +"node-gyp-build@npm:4.4.0": version: 4.4.0 resolution: "node-gyp-build@npm:4.4.0" bin: @@ -9579,30 +8966,41 @@ __metadata: languageName: node linkType: hard +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.7.1 + resolution: "node-gyp-build@npm:4.7.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 2ef8248021489db03be3e8098977cdc797b80a9b12b77c6dcb89b0dc89b8c62e6a482672ee298f61021740ae7f080fb33154cfec8fb158cec620f57b0fae87c0 + languageName: node + linkType: hard + "node-gyp@npm:latest": - version: 9.0.0 - resolution: "node-gyp@npm:9.0.0" + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" dependencies: env-paths: ^2.2.0 - glob: ^7.1.4 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^5.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 semver: ^7.3.5 tar: ^6.1.2 - which: ^2.0.2 + which: ^4.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 4d8ef8860f7e4f4d86c91db3f519d26ed5cc23b48fe54543e2afd86162b4acbd14f21de42a5db344525efb69a991e021b96a68c70c6e2d5f4a5cb770793da6d3 + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f languageName: node linkType: hard -"nofilter@npm:^1.0.4": - version: 1.0.4 - resolution: "nofilter@npm:1.0.4" - checksum: 54d864f745de5c3312994e880cf2d4f55e34830d6adc8275dce3731507ca380d21040336e4a277a4901551c07f04c452fbeffd57fad1dc8f68a2943eaf894a04 +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f languageName: node linkType: hard @@ -9617,18 +9015,18 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" dependencies: - abbrev: 1 + abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2": +"normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -9654,22 +9052,10 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^6.0.0": - version: 6.0.1 - resolution: "npmlog@npm:6.0.1" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.0 - set-blocking: ^2.0.0 - checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 languageName: node linkType: hard @@ -9690,132 +9076,77 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4, object-assign@npm:^4.0.0, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f languageName: node linkType: hard -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: ^0.1.0 - define-property: ^0.2.5 - kind-of: ^3.0.3 - checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.9.0, object-inspect@npm:~1.12.0": - version: 1.12.0 - resolution: "object-inspect@npm:1.12.0" - checksum: 2b36d4001a9c921c6b342e2965734519c9c58c355822243c3207fbf0aac271f8d44d30d2d570d450b2cc6f0f00b72bcdba515c37827d2560e5f22b1899a31cf4 - languageName: node - linkType: hard - -"object-is@npm:^1.0.1": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f languageName: node linkType: hard -"object-keys@npm:^1.0.11, object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": +"object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a languageName: node linkType: hard -"object-keys@npm:~0.4.0": - version: 0.4.0 - resolution: "object-keys@npm:0.4.0" - checksum: 1be3ebe9b48c0d5eda8e4a30657d887a748cb42435e0e2eaf49faf557bdd602cd2b7558b8ce90a4eb2b8592d16b875a1900bce859cbb0f35b21c67e11a45313c - languageName: node - linkType: hard - -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: ^3.0.0 - checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 - languageName: node - linkType: hard - -"object.assign@npm:4.1.0": - version: 4.1.0 - resolution: "object.assign@npm:4.1.0" - dependencies: - define-properties: ^1.1.2 - function-bind: ^1.1.1 - has-symbols: ^1.0.0 - object-keys: ^1.0.11 - checksum: 648a9a463580bf48332d9a49a76fede2660ab1ee7104d9459b8a240562246da790b4151c3c073f28fda31c1fdc555d25a1d871e72be403e997e4468c91f4801f - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" +"object.assign@npm:^4.1.4": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.1": - version: 2.1.3 - resolution: "object.getownpropertydescriptors@npm:2.1.3" +"object.fromentries@npm:^2.0.7": + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 1467873456fd367a0eb91350caff359a8f05ceb069b4535a1846aa1f74f477a49ae704f6c89c0c14cc0ae1518ee3a0aa57c7f733a8e7b2b06b34a818e9593d2f + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 7341ce246e248b39a431b87a9ddd331ff52a454deb79afebc95609f94b1f8238966cf21f52188f2a353f0fdf83294f32f1ebf1f7826aae915ebad21fd0678065 languageName: node linkType: hard -"object.pick@npm:^1.3.0": - version: 1.3.0 - resolution: "object.pick@npm:1.3.0" +"object.groupby@npm:^1.0.1": + version: 1.0.1 + resolution: "object.groupby@npm:1.0.1" dependencies: - isobject: ^3.0.1 - checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + checksum: d7959d6eaaba358b1608066fc67ac97f23ce6f573dc8fc661f68c52be165266fcb02937076aedb0e42722fdda0bdc0bbf74778196ac04868178888e9fd3b78b5 languageName: node linkType: hard -"object.values@npm:^1.1.5": - version: 1.1.5 - resolution: "object.values@npm:1.1.5" +"object.values@npm:^1.1.7": + version: 1.1.7 + resolution: "object.values@npm:1.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 0f17e99741ebfbd0fa55ce942f6184743d3070c61bd39221afc929c8422c4907618c8da694c6915bc04a83ab3224260c779ba37fc07bb668bdc5f33b66a902a4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: f3e4ae4f21eb1cc7cebb6ce036d4c67b36e1c750428d7b7623c56a0db90edced63d08af8a316d81dfb7c41a3a5fa81b05b7cc9426e98d7da986b1682460f0777 languageName: node linkType: hard "obliterator@npm:^2.0.0": - version: 2.0.2 - resolution: "obliterator@npm:2.0.2" - checksum: 0aea7665bb200c17f782845d55e2a0cb10865f5c4d1a5808e778349147c025b811505ca317947b9dc4cace54a716ef74e988a91ffd05fea850c8ddcdd7b6a143 - languageName: node - linkType: hard - -"oboe@npm:2.1.4": - version: 2.1.4 - resolution: "oboe@npm:2.1.4" - dependencies: - http-https: ^1.0.0 - checksum: b9172453fba362aec86c45d7bcb4f512302bb23ef34c7c9c498974dc4e7ec0e298931bac5a093445fd946d5604e5dd16563e2d2ae922101ac4b47be2e18e30cc + version: 2.0.4 + resolution: "obliterator@npm:2.0.4" + checksum: f28ad35b6d812089315f375dc3e6e5f9bebf958ebe4b10ccd471c7115cbcf595e74bdac4783ae758e5b1f47e3096427fdb37cfa7bed566b132df92ff317b9a7c languageName: node linkType: hard @@ -9837,15 +9168,6 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:~2.3.0": - version: 2.3.0 - resolution: "on-finished@npm:2.3.0" - dependencies: - ee-first: 1.1.1 - checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b - languageName: node - linkType: hard - "once@npm:1.x, once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -9855,13 +9177,12 @@ __metadata: languageName: node linkType: hard -"open@npm:^7.4.2": - version: 7.4.2 - resolution: "open@npm:7.4.2" +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" dependencies: - is-docker: ^2.0.0 - is-wsl: ^2.1.1 - checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 languageName: node linkType: hard @@ -9879,47 +9200,48 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 - languageName: node - linkType: hard - -"os-homedir@npm:^1.0.0": - version: 1.0.2 - resolution: "os-homedir@npm:1.0.2" - checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard -"os-locale@npm:^1.4.0": - version: 1.4.0 - resolution: "os-locale@npm:1.4.0" +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" dependencies: - lcid: ^1.0.0 - checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 languageName: node linkType: hard -"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.2": +"os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d languageName: node linkType: hard -"p-cancelable@npm:^0.3.0": - version: 0.3.0 - resolution: "p-cancelable@npm:0.3.0" - checksum: 2b27639be8f7f8718f2854c1711f713c296db00acc4675975b1531ecb6253da197304b4a211a330a8e54e754d28d4b3f7feecb48f0566dd265e3ba6745cd4148 +"outdent@npm:^0.5.0": + version: 0.5.0 + resolution: "outdent@npm:0.5.0" + checksum: 6e6c63dd09e9890e67ef9a0b4d35df0b0b850b2059ce3f7e19e4cc1a146b26dc5d8c45df238dbf187dfffc8bd82cd07d37c697544015680bcb9f07f29a36c678 languageName: node linkType: hard @@ -9930,10 +9252,26 @@ __metadata: languageName: node linkType: hard -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf + languageName: node + linkType: hard + +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 2b5ae34218f9c2cf7a7c18e5d9a726ef9b165ef07e6c959f6738371509e747334b5f78f3bcdeb03d8a12dcb978faf641fd87eb21486ed7d36fb823b8ddef3219 + languageName: node + linkType: hard + +"p-filter@npm:^2.1.0": + version: 2.1.0 + resolution: "p-filter@npm:2.1.0" + dependencies: + p-map: ^2.0.0 + checksum: 76e552ca624ce2233448d68b19eec9de42b695208121998f7e011edce71d1079a83096ee6a2078fb2a59cfa8a5c999f046edf00ebf16a8e780022010b4693234 languageName: node linkType: hard @@ -9946,7 +9284,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0": +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -9973,12 +9311,12 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" dependencies: - p-limit: ^2.0.0 - checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 languageName: node linkType: hard @@ -9991,6 +9329,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -10000,15 +9345,6 @@ __metadata: languageName: node linkType: hard -"p-timeout@npm:^1.1.1": - version: 1.2.1 - resolution: "p-timeout@npm:1.2.1" - dependencies: - p-finally: ^1.0.0 - checksum: 65a456f49cca1328774a6bfba61aac98d854b36df9153c2887f82f078d4399e9a30463be8a479871c22ed350a23b34a66ff303ca652b9d81ed4ff5260ac660d2 - languageName: node - linkType: hard - "p-try@npm:^1.0.0": version: 1.0.0 resolution: "p-try@npm:1.0.0" @@ -10032,7 +9368,7 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.6": version: 5.1.6 resolution: "parse-asn1@npm:5.1.6" dependencies: @@ -10059,12 +9395,15 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^2.2.0": - version: 2.2.0 - resolution: "parse-json@npm:2.2.0" +"parse-json@npm:^5.0.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" dependencies: - error-ex: ^1.2.0 - checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 languageName: node linkType: hard @@ -10075,58 +9414,6 @@ __metadata: languageName: node linkType: hard -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"patch-package@npm:6.2.2": - version: 6.2.2 - resolution: "patch-package@npm:6.2.2" - dependencies: - "@yarnpkg/lockfile": ^1.1.0 - chalk: ^2.4.2 - cross-spawn: ^6.0.5 - find-yarn-workspace-root: ^1.2.1 - fs-extra: ^7.0.1 - is-ci: ^2.0.0 - klaw-sync: ^6.0.0 - minimist: ^1.2.0 - rimraf: ^2.6.3 - semver: ^5.6.0 - slash: ^2.0.0 - tmp: ^0.0.33 - bin: - patch-package: index.js - checksum: 5e2f49457b0dc56b5ce0a9d23e281e062e9f225d87a832540f02ffed29ffa7f298b1877daf13c16500ef8a759109c975e3d28d6bd63b0d953f349177abee1767 - languageName: node - linkType: hard - -"patch-package@npm:^6.2.2": - version: 6.4.7 - resolution: "patch-package@npm:6.4.7" - dependencies: - "@yarnpkg/lockfile": ^1.1.0 - chalk: ^2.4.2 - cross-spawn: ^6.0.5 - find-yarn-workspace-root: ^2.0.0 - fs-extra: ^7.0.1 - is-ci: ^2.0.0 - klaw-sync: ^6.0.0 - minimist: ^1.2.0 - open: ^7.4.2 - rimraf: ^2.6.3 - semver: ^5.6.0 - slash: ^2.0.0 - tmp: ^0.0.33 - bin: - patch-package: index.js - checksum: f36d5324da3b69ee635e7cd2c68f4d3dd89dc91d60ffdaad3b602fd953277f4da901c91033683bf6ff31c14799bc049849af3a389455c25d0435fe9cfb0d4088 - languageName: node - linkType: hard - "path-browserify@npm:^1.0.0": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -10134,15 +9421,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^2.0.0": - version: 2.1.0 - resolution: "path-exists@npm:2.1.0" - dependencies: - pinkie-promise: ^2.0.0 - checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84 - languageName: node - linkType: hard - "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -10157,20 +9435,13 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": +"path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 languageName: node linkType: hard -"path-key@npm:^2.0.1": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd - languageName: node - linkType: hard - "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -10185,6 +9456,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -10192,17 +9473,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^1.0.0": - version: 1.1.0 - resolution: "path-type@npm:1.1.0" - dependencies: - graceful-fs: ^4.1.2 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -10244,13 +9514,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.0.0, pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba - languageName: node - linkType: hard - "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -10258,40 +9521,24 @@ __metadata: languageName: node linkType: hard -"pinkie-promise@npm:^2.0.0": - version: 2.0.1 - resolution: "pinkie-promise@npm:2.0.1" +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" dependencies: - pinkie: ^2.0.0 - checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca - languageName: node - linkType: hard - -"pinkie@npm:^2.0.0": - version: 2.0.4 - resolution: "pinkie@npm:2.0.4" - checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db - languageName: node - linkType: hard - -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - -"postinstall-postinstall@npm:^2.1.0": - version: 2.1.0 - resolution: "postinstall-postinstall@npm:2.1.0" - checksum: e1d34252cf8d2c5641c7d2db7426ec96e3d7a975f01c174c68f09ef5b8327bc8d5a9aa2001a45e693db2cdbf69577094d3fe6597b564ad2d2202b65fba76134b + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 languageName: node linkType: hard -"precond@npm:0.2": - version: 0.2.3 - resolution: "precond@npm:0.2.3" - checksum: c613e7d68af3e0b43a294a994bf067cc2bc44b03fd17bc4fb133e30617a4f5b49414b08e9b392d52d7c6822d8a71f66a7fe93a8a1e7d02240177202cff3f63ef +"preferred-pm@npm:^3.0.0": + version: 3.1.2 + resolution: "preferred-pm@npm:3.1.2" + dependencies: + find-up: ^5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: ^4.0.0 + which-pm: 2.0.0 + checksum: d66019f36765c4e241197cd34e2718c03d7eff953b94dacb278df9326767ccc2744d4e0bcab265fd9bb036f704ed5f3909d02594cd5663bd640a160fe4c1446c languageName: node linkType: hard @@ -10309,13 +9556,6 @@ __metadata: languageName: node linkType: hard -"prepend-http@npm:^1.0.1": - version: 1.0.4 - resolution: "prepend-http@npm:1.0.4" - checksum: 01e7baf4ad38af02257b99098543469332fc42ae50df33d97a124bf8172295907352fa6138c9b1610c10c6dd0847ca736e53fda736387cc5cf8fcffe96b47f29 - languageName: node - linkType: hard - "prepend-http@npm:^2.0.0": version: 2.0.0 resolution: "prepend-http@npm:2.0.0" @@ -10332,19 +9572,19 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.1.2, prettier@npm:^2.3.1": - version: 2.6.2 - resolution: "prettier@npm:2.6.2" +"prettier@npm:^2.3.1, prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js - checksum: 48d08dde8e9fb1f5bccdd205baa7f192e9fc8bc98f86e1b97d919de804e28c806b0e6cc685e4a88211aa7987fa9668f30baae19580d87ced3ed0f2ec6572106f + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard -"private@npm:^0.1.6, private@npm:^0.1.8": - version: 0.1.8 - resolution: "private@npm:0.1.8" - checksum: a00abd713d25389f6de7294f0e7879b8a5d09a9ec5fd81cc2f21b29d4f9a80ec53bc4222927d3a281d4aadd4cd373d9a28726fca3935921950dc75fd71d1fdbb +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 languageName: node linkType: hard @@ -10362,13 +9602,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -10379,22 +9612,12 @@ __metadata: languageName: node linkType: hard -"promise-to-callback@npm:^1.0.0": - version: 1.0.0 - resolution: "promise-to-callback@npm:1.0.0" - dependencies: - is-fn: ^1.0.0 - set-immediate-shim: ^1.0.1 - checksum: 8c9e1327386e00f799589cdf96fff2586a13b52b0185222bc3199e1305ba9344589eedfd4038dcbaf5592d85d567097d1507b81e948b7fff6ffdd3de49d54e14 - languageName: node - linkType: hard - "promise@npm:^8.0.0": - version: 8.1.0 - resolution: "promise@npm:8.1.0" + version: 8.3.0 + resolution: "promise@npm:8.3.0" dependencies: asap: ~2.0.6 - checksum: 89b71a56154ed7d66a73236d8e8351a9c59adddba3929ecc845f75421ff37fc08ea0c67ad76cd5c0b0d81812c7d07a32bed27e7df5fcc960c6d68b0c1cd771f7 + checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 languageName: node linkType: hard @@ -10408,6 +9631,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + "prr@npm:~1.0.1": version: 1.0.1 resolution: "prr@npm:1.0.1" @@ -10415,7 +9645,7 @@ __metadata: languageName: node linkType: hard -"pseudomap@npm:^1.0.1": +"pseudomap@npm:^1.0.2": version: 1.0.2 resolution: "pseudomap@npm:1.0.2" checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 @@ -10423,9 +9653,9 @@ __metadata: linkType: hard "psl@npm:^1.1.28": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard @@ -10443,82 +9673,13 @@ __metadata: languageName: node linkType: hard -"pull-cat@npm:^1.1.9": - version: 1.1.11 - resolution: "pull-cat@npm:1.1.11" - checksum: 785173d94732ba5e6e65f27ee128542522aeb87519c5d72aa9b8bc510f6c4f67b91fcfd565782a20aafc116e57354f2dd0fa8fd039b45a61b8da89b0253a7440 - languageName: node - linkType: hard - -"pull-defer@npm:^0.2.2": - version: 0.2.3 - resolution: "pull-defer@npm:0.2.3" - checksum: 4ea99ed64a2d79167e87293aba5088cde91f210a319c690a65aa6704d829be33b76cecc732f8d4ed3eee47e7eb09a6f77042897ea6414862bacbd722ce182d66 - languageName: node - linkType: hard - -"pull-level@npm:^2.0.3": - version: 2.0.4 - resolution: "pull-level@npm:2.0.4" - dependencies: - level-post: ^1.0.7 - pull-cat: ^1.1.9 - pull-live: ^1.0.1 - pull-pushable: ^2.0.0 - pull-stream: ^3.4.0 - pull-window: ^2.1.4 - stream-to-pull-stream: ^1.7.1 - checksum: f4e0573b3ff3f3659eb50ac86b505aee12d5f4c1d8bafc3bf6fd67d173b3b39a3fe5161d8bfa5eba8a0c5873fbda75f3b160276cfa678d5edd517dcd3349ecc2 - languageName: node - linkType: hard - -"pull-live@npm:^1.0.1": - version: 1.0.1 - resolution: "pull-live@npm:1.0.1" - dependencies: - pull-cat: ^1.1.9 - pull-stream: ^3.4.0 - checksum: e4328771e811aec1e03996d1070ec8fecb2560cc48b96814cd9f4aebd870a710903f8693e423765d3d65d8021b3b9ccc38c8660baef3df45e217c9b1bbc5581a - languageName: node - linkType: hard - -"pull-pushable@npm:^2.0.0": - version: 2.2.0 - resolution: "pull-pushable@npm:2.2.0" - checksum: 1c88ef55f6f14799ae5cf060415d089d15452ef865d874f075c155f8224c321371cb7f04a10b3fba263b6f128158c78253efd18bcb54afbb99f9cae846f883a6 - languageName: node - linkType: hard - -"pull-stream@npm:^3.2.3, pull-stream@npm:^3.4.0, pull-stream@npm:^3.6.8": - version: 3.6.14 - resolution: "pull-stream@npm:3.6.14" - checksum: fc3d86d488894cdf1f980848886be54d8c9cf16a982e9f651098e673bf0134dd1be9b02435f59afe5b48d479c6bafb828348f7fac95fd4593633bffefdfb7503 - languageName: node - linkType: hard - -"pull-window@npm:^2.1.4": - version: 2.1.4 - resolution: "pull-window@npm:2.1.4" - dependencies: - looper: ^2.0.0 - checksum: e006995108a80c81eea93dfaadf68285dc5b9b3cbaf654da39731ca3f308376f15b0546c61730cd0fa38303e273a1845c6d65f0fda35ed9c66252a65e446df18 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" dependencies: - end-of-stream: ^1.1.0 - once: ^1.3.1 - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - -"punycode@npm:1.3.2": - version: 1.3.2 - resolution: "punycode@npm:1.3.2" - checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6 + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 languageName: node linkType: hard @@ -10529,26 +9690,35 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + "punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard -"qs@npm:6.10.3, qs@npm:^6.4.0, qs@npm:^6.7.0": - version: 6.10.3 - resolution: "qs@npm:6.10.3" +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" dependencies: side-channel: ^1.0.4 - checksum: 0fac5e6c7191d0295a96d0e83c851aeb015df7e990e4d3b093897d3ac6c94e555dbd0a599739c84d7fa46d7fee282d94ba76943983935cf33bba6769539b8019 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 languageName: node linkType: hard -"qs@npm:6.9.7": - version: 6.9.7 - resolution: "qs@npm:6.9.7" - checksum: 5bbd263332ccf320a1f36d04a2019a5834dc20bcb736431eaccde2a39dcba03fb26d2fd00174f5d7bc26aaad1cad86124b18440883ac042ea2a0fca6170c1bf1 +"qs@npm:^6.11.2, qs@npm:^6.4.0, qs@npm:^6.7.0": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b languageName: node linkType: hard @@ -10570,21 +9740,28 @@ __metadata: languageName: node linkType: hard -"querystring@npm:0.2.0": - version: 0.2.0 - resolution: "querystring@npm:0.2.0" - checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": +"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 languageName: node linkType: hard -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.0.6, randombytes@npm:^2.1.0": +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -10610,66 +9787,68 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.4.3": - version: 2.4.3 - resolution: "raw-body@npm:2.4.3" +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" dependencies: bytes: 3.1.2 - http-errors: 1.8.1 + http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: d2961fa3c71c9c22dc2c3fd60ff377bf36dfed7d7a748f2b25d585934a3e9df565bb9aa5bc2e3a716ea941f4bc2a6ddc795c8b0cf7219fb071029b59b1985394 + checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e languageName: node linkType: hard -"raw-body@npm:2.5.1, raw-body@npm:^2.4.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" +"raw-body@npm:2.5.2, raw-body@npm:^2.4.1": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 languageName: node linkType: hard -"read-pkg-up@npm:^1.0.1": - version: 1.0.1 - resolution: "read-pkg-up@npm:1.0.1" +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" dependencies: - find-up: ^1.0.0 - read-pkg: ^1.0.0 - checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7 + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 languageName: node linkType: hard -"read-pkg@npm:^1.0.0": - version: 1.1.0 - resolution: "read-pkg@npm:1.1.0" +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" dependencies: - load-json-file: ^1.0.0 - normalize-package-data: ^2.3.2 - path-type: ^1.0.0 - checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366 + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 languageName: node linkType: hard -"readable-stream@npm:^1.0.33": - version: 1.1.14 - resolution: "readable-stream@npm:1.1.14" +"read-yaml-file@npm:^1.1.0": + version: 1.1.0 + resolution: "read-yaml-file@npm:1.1.0" dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 17dfeae3e909945a4a1abc5613ea92d03269ef54c49288599507fc98ff4615988a1c39a999dcf9aacba70233d9b7040bc11a5f2bfc947e262dedcc0a8b32b5a0 + graceful-fs: ^4.1.5 + js-yaml: ^3.6.1 + pify: ^4.0.1 + strip-bom: ^3.0.0 + checksum: 41ee5f075507ef0403328dd54e225a61c3149f915675ce7fd0fd791ddcce2e6c30a9fe0f76ffa7a465c1c157b9b4ad8ded1dcf47dc3b396103eeb013490bbc2e languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.2.8, readable-stream@npm:^2.2.9, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" +"readable-stream@npm:^2.2.2": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -10678,39 +9857,18 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard -"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.0, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" +"readable-stream@npm:^3.1.0, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 - languageName: node - linkType: hard - -"readable-stream@npm:~1.0.15": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 - languageName: node - linkType: hard - -"readdirp@npm:~3.2.0": - version: 3.2.0 - resolution: "readdirp@npm:3.2.0" - dependencies: - picomatch: ^2.0.4 - checksum: 0456a4465a13eb5eaf40f0e0836b1bc6b9ebe479b48ba6f63a738b127a1990fb7b38f3ec4b4b6052f9230f976bc0558f12812347dc6b42ce4d548cfe82a9b6f3 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard @@ -10733,11 +9891,21 @@ __metadata: linkType: hard "recursive-readdir@npm:^2.2.2": - version: 2.2.2 - resolution: "recursive-readdir@npm:2.2.2" + version: 2.2.3 + resolution: "recursive-readdir@npm:2.2.3" + dependencies: + minimatch: ^3.0.5 + checksum: 88ec96e276237290607edc0872b4f9842837b95cfde0cdbb1e00ba9623dfdf3514d44cdd14496ab60a0c2dd180a6ef8a3f1c34599e6cf2273afac9b72a6fb2b5 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" dependencies: - minimatch: 3.0.4 - checksum: a6b22994d76458443d4a27f5fd7147ac63ad31bba972666a291d511d4d819ee40ff71ba7524c14f6a565b8cfaf7f48b318f971804b913cf538d58f04e25d1fee + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b languageName: node linkType: hard @@ -10748,110 +9916,31 @@ __metadata: languageName: node linkType: hard -"regenerate@npm:^1.2.1": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.10.0": - version: 0.10.1 - resolution: "regenerator-transform@npm:0.10.1" - dependencies: - babel-runtime: ^6.18.0 - babel-types: ^6.19.0 - private: ^0.1.6 - checksum: bd366a3b0fa0d0975c48fb9eff250363a9ab28c25b472ecdc397bb19a836746640a30d8f641718a895f9178564bd8a01a0179a9c8e5813f76fc29e62a115d9d7 - languageName: node - linkType: hard - -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: ^3.0.2 - safe-regex: ^1.1.0 - checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0": - version: 1.4.1 - resolution: "regexp.prototype.flags@npm:1.4.1" +"regexp.prototype.flags@npm:^1.5.1": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 77944a3ea5ae84f391fa80bff9babfedc47eadc9dc38e282b5fd746368fb787deec89c68ce3114195bf6b5782b160280a278b62d41ccc6e125afab1a7f816de8 + define-properties: ^1.2.0 + set-function-name: ^2.0.0 + checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 languageName: node linkType: hard -"regexpp@npm:^3.0.0, regexpp@npm:^3.2.0": +"regexpp@npm:^3.0.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 languageName: node linkType: hard -"regexpu-core@npm:^2.0.0": - version: 2.0.0 - resolution: "regexpu-core@npm:2.0.0" - dependencies: - regenerate: ^1.2.1 - regjsgen: ^0.2.0 - regjsparser: ^0.1.4 - checksum: 14a78eb4608fa991ded6a1433ee6a570f95a4cfb7fe312145a44d6ecbb3dc8c707016a099494c741aa0ac75a1329b40814d30ff134c0d67679c80187029c7d2d - languageName: node - linkType: hard - -"regjsgen@npm:^0.2.0": - version: 0.2.0 - resolution: "regjsgen@npm:0.2.0" - checksum: 1f3ae570151e2c29193cdc5a5890c0b83cd8c5029ed69315b0ea303bc2644f9ab5d536d2288fd9b70293fd351d7dd7fc1fc99ebe24554015c894dbce883bcf2b - languageName: node - linkType: hard - -"regjsparser@npm:^0.1.4": - version: 0.1.5 - resolution: "regjsparser@npm:0.1.5" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 1feba2f3f2d4f1ef9f5f4e0f20c827cf866d4f65c51502eb64db4d4dd9c656f8c70f6c79537c892bf0fc9592c96f732519f7d8ad4a82f3b622756118ac737970 - languageName: node - linkType: hard - -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.6.1": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"repeating@npm:^2.0.0": - version: 2.0.1 - resolution: "repeating@npm:2.0.1" - dependencies: - is-finite: ^1.0.0 - checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0 - languageName: node - linkType: hard - "req-cwd@npm:^2.0.0": version: 2.0.0 resolution: "req-cwd@npm:2.0.0" @@ -10870,31 +9959,7 @@ __metadata: languageName: node linkType: hard -"request-promise-core@npm:1.1.4": - version: 1.1.4 - resolution: "request-promise-core@npm:1.1.4" - dependencies: - lodash: ^4.17.19 - peerDependencies: - request: ^2.34 - checksum: c798bafd552961e36fbf5023b1d081e81c3995ab390f1bc8ef38a711ba3fe4312eb94dbd61887073d7356c3499b9380947d7f62faa805797c0dc50f039425699 - languageName: node - linkType: hard - -"request-promise-native@npm:^1.0.5": - version: 1.0.9 - resolution: "request-promise-native@npm:1.0.9" - dependencies: - request-promise-core: 1.1.4 - stealthy-require: ^1.1.1 - tough-cookie: ^2.3.3 - peerDependencies: - request: ^2.34 - checksum: 3e2c694eefac88cb20beef8911ad57a275ab3ccbae0c4ca6c679fffb09d5fd502458aab08791f0814ca914b157adab2d4e472597c97a73be702918e41725ed69 - languageName: node - linkType: hard - -"request@npm:^2.79.0, request@npm:^2.85.0, request@npm:^2.88.0": +"request@npm:^2.79.0, request@npm:^2.85.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -10929,27 +9994,13 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^1.1.0": - version: 1.2.1 - resolution: "require-from-string@npm:1.2.1" - checksum: d2e0b0c798fe45d86456a32425635bd9d2a75a20e87f67294fa5cce5ed61fdf41e0c7c57afa981fb836299bfb0c37c915adb4d22478dc8d12edbf80a304e9324 - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.0": +"require-from-string@npm:^2.0.0, require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b languageName: node linkType: hard -"require-main-filename@npm:^1.0.1": - version: 1.0.1 - resolution: "require-main-filename@npm:1.0.1" - checksum: 1fef30754da961f4e13c450c3eb60c7ae898a529c6ad6fa708a70bd2eed01564ceb299187b2899f5562804d797a059f39a5789884d0ac7b7ae1defc68fba4abf - languageName: node - linkType: hard - "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -10957,6 +10008,20 @@ __metadata: languageName: node linkType: hard +"requireindex@npm:~1.2.0": + version: 1.2.0 + resolution: "requireindex@npm:1.2.0" + checksum: 50d8b10a1ff1fdf6aea7a1870bc7bd238b0fb1917d8d7ca17fd03afc38a65dcd7a8a4eddd031f89128b5f0065833d5c92c4fef67f2c04e8624057fe626c9cf94 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + languageName: node + linkType: hard + "resolve-from@npm:^3.0.0": version: 3.0.0 resolution: "resolve-from@npm:3.0.0" @@ -10971,10 +10036,10 @@ __metadata: languageName: node linkType: hard -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf languageName: node linkType: hard @@ -10994,16 +10059,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.8.1, resolve@npm:~1.22.0": - version: 1.22.0 - resolution: "resolve@npm:1.22.0" +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.22.0, resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" dependencies: - is-core-module: ^2.8.1 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c languageName: node linkType: hard @@ -11023,16 +10088,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.8.1#~builtin, resolve@patch:resolve@~1.22.0#~builtin": - version: 1.22.0 - resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b" +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: - is-core-module: ^2.8.1 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7 + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 languageName: node linkType: hard @@ -11045,19 +10110,22 @@ __metadata: languageName: node linkType: hard -"resumer@npm:~0.0.0": - version: 0.0.0 - resolution: "resumer@npm:0.0.0" +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" dependencies: - through: ~2.3.4 - checksum: 21b1c257aac24840643fae9bc99ca6447a71a0039e7c6dcf64d0ead447ce511eff158d529f1b6258ad12668e66ee3e49ff14932d2b88a3bd578f483e79708104 + lowercase-keys: ^2.0.0 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a languageName: node linkType: hard -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 languageName: node linkType: hard @@ -11075,7 +10143,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.6.3": +"rimraf@npm:^2.2.8": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -11107,7 +10175,18 @@ __metadata: languageName: node linkType: hard -"rlp@npm:^2.0.0, rlp@npm:^2.2.1, rlp@npm:^2.2.2, rlp@npm:^2.2.3, rlp@npm:^2.2.4": +"rlp@npm:2.2.6": + version: 2.2.6 + resolution: "rlp@npm:2.2.6" + dependencies: + bn.js: ^4.11.1 + bin: + rlp: bin/rlp + checksum: 2601225df0fe7aa3b497b33a12fd9fbaf8fb1d2989ecc5c091918ed93ee77d1c3fab20ddd3891a9ca66a8ba66d993e6079be6fb31f450fcf38ba30873102ca46 + languageName: node + linkType: hard + +"rlp@npm:^2.0.0, rlp@npm:^2.2.3, rlp@npm:^2.2.4": version: 2.2.7 resolution: "rlp@npm:2.2.7" dependencies: @@ -11118,6 +10197,22 @@ __metadata: languageName: node linkType: hard +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-parallel-limit@npm:^1.1.0": + version: 1.1.0 + resolution: "run-parallel-limit@npm:1.1.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: 672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -11134,12 +10229,24 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.2.0": - version: 7.5.5 - resolution: "rxjs@npm:7.5.5" +"rxjs@npm:^7.2.0, rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" dependencies: tslib: ^2.1.0 - checksum: e034f60805210cce756dd2f49664a8108780b117cf5d0e2281506e9e6387f7b4f1532d974a8c8b09314fa7a16dd2f6cff3462072a5789672b5dcb45c4173f3c6 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.0.1": + version: 1.0.1 + resolution: "safe-array-concat@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 languageName: node linkType: hard @@ -11157,21 +10264,14 @@ __metadata: languageName: node linkType: hard -"safe-event-emitter@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-event-emitter@npm:1.0.1" - dependencies: - events: ^3.0.0 - checksum: 2a15094bd28b0966571693f219b5a846949ae24f7ba87c6024f0ed552bef63ebe72970a784b85b77b1f03f1c95e78fabe19306d44538dbc4a3a685bed31c18c4 - languageName: node - linkType: hard - -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" dependencies: - ret: ~0.1.10 - checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 languageName: node linkType: hard @@ -11220,12 +10320,15 @@ __metadata: languageName: node linkType: hard -"scryptsy@npm:^1.2.1": - version: 1.2.1 - resolution: "scryptsy@npm:1.2.1" +"secp256k1@npm:4.0.3, secp256k1@npm:^4.0.1": + version: 4.0.3 + resolution: "secp256k1@npm:4.0.3" dependencies: - pbkdf2: ^3.0.3 - checksum: e09cf253b0974171bbcb77fa46405bb07cb8e241e2851fc5f23b38526a33105f0f7748a4d60027642f40bd4518ada30b1dce5005c05d17a25cbcefad371d4259 + elliptic: ^6.5.4 + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + checksum: 21e219adc0024fbd75021001358780a3cc6ac21273c3fcaef46943af73969729709b03f1df7c012a0baab0830fb9a06ccc6b42f8d50050c665cb98078eab477b languageName: node linkType: hard @@ -11246,22 +10349,10 @@ __metadata: languageName: node linkType: hard -"secp256k1@npm:^4.0.1": - version: 4.0.3 - resolution: "secp256k1@npm:4.0.3" - dependencies: - elliptic: ^6.5.4 - node-addon-api: ^2.0.0 - node-gyp: latest - node-gyp-build: ^4.2.0 - checksum: 21e219adc0024fbd75021001358780a3cc6ac21273c3fcaef46943af73969729709b03f1df7c012a0baab0830fb9a06ccc6b42f8d50050c665cb98078eab477b - languageName: node - linkType: hard - -"seedrandom@npm:3.0.1": - version: 3.0.1 - resolution: "seedrandom@npm:3.0.1" - checksum: a8f5bd0e918c4d4b59afd6f5dbd28f5ab8d5f118ee59892c3712f581de51574ac6622aa38fa2d03476b661f8407e98d6ff32af3d7cfdb02c90d046e7f5f91952 +"seedrandom@npm:3.0.5": + version: 3.0.5 + resolution: "seedrandom@npm:3.0.5" + checksum: 728b56bc3bc1b9ddeabd381e449b51cb31bdc0aa86e27fcd0190cea8c44613d5bcb2f6bb63ed79f78180cbe791c20b8ec31a9627f7b7fc7f476fd2bdb7e2da9f languageName: node linkType: hard @@ -11272,69 +10363,53 @@ __metadata: languageName: node linkType: hard -"semaphore@npm:>=1.0.1, semaphore@npm:^1.0.3, semaphore@npm:^1.1.0": - version: 1.1.0 - resolution: "semaphore@npm:1.1.0" - checksum: d2445d232ad9959048d4748ef54eb01bc7b60436be2b42fb7de20c4cffacf70eafeeecd3772c1baf408cfdce3805fa6618a4389590335671f18cde54ef3cfae4 - languageName: node - linkType: hard - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard -"semver@npm:^6.1.0, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" +"semver@npm:^6.1.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:^7.3.4, semver@npm:^7.3.5": - version: 7.3.6 - resolution: "semver@npm:7.3.6" +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: - lru-cache: ^7.4.0 + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 9845f96b22268190b30025e02feca391451f2bd49b2c51920c27cc56744f64cbe397df089018fdb347d4b4fd800eabbd85661870eb63eb28055d2b72e457f759 - languageName: node - linkType: hard - -"semver@npm:~5.4.1": - version: 5.4.1 - resolution: "semver@npm:5.4.1" - bin: - semver: ./bin/semver - checksum: d4bf8cc6a95b065a545ab35082b6ac6c5f4ebe1e1c570f72c252afe9b7e622f2479fb2a5cef3e937d8807d37bfdad2d1feebcc8610e06f556e552c22cad070a2 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard -"send@npm:0.17.2": - version: 0.17.2 - resolution: "send@npm:0.17.2" +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" dependencies: debug: 2.6.9 - depd: ~1.1.2 - destroy: ~1.0.4 + depd: 2.0.0 + destroy: 1.2.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 fresh: 0.5.2 - http-errors: 1.8.1 + http-errors: 2.0.0 mime: 1.6.0 ms: 2.1.3 - on-finished: ~2.3.0 + on-finished: 2.4.1 range-parser: ~1.2.1 - statuses: ~1.5.0 - checksum: c28f36deb4ccba9b8d6e6a1e472b8e7c40a1f51575bdf8f67303568cc9e71131faa3adc36fdb72611616ccad1584358bbe4c3ebf419e663ecc5de868ad3d3f03 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 languageName: node linkType: hard @@ -11347,15 +10422,15 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.14.2": - version: 1.14.2 - resolution: "serve-static@npm:1.14.2" +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 - send: 0.17.2 - checksum: d97f3183b1dfcd8ce9c0e37e18e87fd31147ed6c8ee0b2c3a089d795e44ee851ca5061db01574f806d54f4e4b70bc694d9ca64578653514e04a28cbc97a1de05 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d languageName: node linkType: hard @@ -11379,22 +10454,26 @@ __metadata: languageName: node linkType: hard -"set-immediate-shim@npm:^1.0.1": - version: 1.0.1 - resolution: "set-immediate-shim@npm:1.0.1" - checksum: 5085c84039d1e5eee73d2bf48ce765fcec76159021d0cc7b40e23bcdf62cb6d450ffb781e3c62c1118425242c48eae96df712cba0a20a437e86b0d4a15d51a11 +"set-function-length@npm:^1.1.1": + version: 1.1.1 + resolution: "set-function-length@npm:1.1.1" + dependencies: + define-data-property: ^1.1.1 + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: c131d7569cd7e110cafdfbfbb0557249b538477624dfac4fc18c376d879672fa52563b74029ca01f8f4583a8acb35bb1e873d573a24edb80d978a7ee607c6e06 languageName: node linkType: hard -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": +"set-function-name@npm:^2.0.0": version: 2.0.1 - resolution: "set-value@npm:2.0.1" + resolution: "set-function-name@npm:2.0.1" dependencies: - extend-shallow: ^2.0.1 - is-extendable: ^0.1.1 - is-plain-object: ^2.0.3 - split-string: ^3.0.1 - checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 languageName: node linkType: hard @@ -11497,13 +10576,20 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.2": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -11522,20 +10608,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^1.0.0": - version: 1.0.0 - resolution: "slash@npm:1.0.0" - checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860 - languageName: node - linkType: hard - -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -11543,67 +10615,58 @@ __metadata: languageName: node linkType: hard -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" dependencies: - define-property: ^1.0.0 - isobject: ^3.0.0 - snapdragon-util: ^3.0.1 - checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 languageName: node linkType: hard -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: ^3.2.0 - checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b languageName: node linkType: hard -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" +"smartwrap@npm:^2.0.2": + version: 2.0.2 + resolution: "smartwrap@npm:2.0.2" dependencies: - base: ^0.11.1 - debug: ^2.2.0 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - map-cache: ^0.2.2 - source-map: ^0.5.6 - source-map-resolve: ^0.5.0 - use: ^3.1.0 - checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 + array.prototype.flat: ^1.2.3 + breakword: ^1.0.5 + grapheme-splitter: ^1.0.4 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + yargs: ^15.1.0 + bin: + smartwrap: src/terminal-adapter.js + checksum: 1a6833eb1c3d8488b036df66dcab37dcdda5270bb9629c471155785c09ee1b591177a9774c588c43f8fa28833204500019265da2ffed28ac7bbf4589b943d2fa languageName: node linkType: hard -"socks-proxy-agent@npm:^6.1.1": - version: 6.1.1 - resolution: "socks-proxy-agent@npm:6.1.1" +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" dependencies: - agent-base: ^6.0.2 - debug: ^4.3.1 - socks: ^2.6.1 - checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d languageName: node linkType: hard -"socks@npm:^2.6.1": - version: 2.6.2 - resolution: "socks@npm:2.6.2" +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" dependencies: - ip: ^1.1.5 + ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 languageName: node linkType: hard @@ -11626,27 +10689,30 @@ __metadata: languageName: node linkType: hard -"solc@npm:^0.4.20": - version: 0.4.26 - resolution: "solc@npm:0.4.26" +"solc@npm:0.8.15": + version: 0.8.15 + resolution: "solc@npm:0.8.15" dependencies: - fs-extra: ^0.30.0 + command-exists: ^1.2.8 + commander: ^8.1.0 + follow-redirects: ^1.12.1 + js-sha3: 0.8.0 memorystream: ^0.3.1 - require-from-string: ^1.1.0 - semver: ^5.3.0 - yargs: ^4.7.1 + semver: ^5.5.0 + tmp: 0.0.33 bin: - solcjs: solcjs - checksum: 041da7ff725c19023ef34a17f83b3303971d2e62bcea9d0fd3c7af728d6f40ff7cdf2b806d0208a3336d3c9be18c321955e1712ab39ee57390ba00d512def946 + solcjs: solc.js + checksum: a11de198bc5d481485a4a4803fb08a81a56dd9ffa7cdc62f8d6d5fc669f72e7cb4b22789004d54481353463421f6e6e3d1dffe7365b6d0ed5f37baee303266db languageName: node linkType: hard -"solc@npm:^0.6.3": - version: 0.6.12 - resolution: "solc@npm:0.6.12" +"solc@npm:0.8.7": + version: 0.8.7 + resolution: "solc@npm:0.8.7" dependencies: command-exists: ^1.2.8 commander: 3.0.2 + follow-redirects: ^1.12.1 fs-extra: ^0.30.0 js-sha3: 0.8.0 memorystream: ^0.3.1 @@ -11655,13 +10721,13 @@ __metadata: tmp: 0.0.33 bin: solcjs: solcjs - checksum: 1e2bf927f3ef4f3b195b7619ff64f715916d94dc59091a8a710e47bdd4b18e0bd92b55ea43a04ce7fabce9ad7a3e4e73ccaf127a50ebbf963a9de9046576e3b6 + checksum: 3efde9e07d92be5850e19e3a660b6c05cf403263438d02b1cbcd2428c66bed9bfb3e42e58f8232e6deee8ef557c3f53e45182f5a04d13b72b47607a89686f614 languageName: node linkType: hard "solidity-coverage@npm:^0.7.20": - version: 0.7.20 - resolution: "solidity-coverage@npm:0.7.20" + version: 0.7.22 + resolution: "solidity-coverage@npm:0.7.22" dependencies: "@solidity-parser/parser": ^0.14.0 "@truffle/provider": ^0.2.24 @@ -11683,43 +10749,11 @@ __metadata: web3-utils: ^1.3.0 bin: solidity-coverage: plugins/bin.js - checksum: b7edad0add5ef761609a116915979cc6d52ea41a041ed6b45796eb2a9c2fc726c2e300c8a1d6b5e48402e9fd0526c7ee38ecdd01b50e52ac32b8e4084d603d27 - languageName: node - linkType: hard - -"source-map-resolve@npm:^0.5.0": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - resolve-url: ^0.2.1 - source-map-url: ^0.4.0 - urix: ^0.1.0 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-support@npm:0.5.12": - version: 0.5.12 - resolution: "source-map-support@npm:0.5.12" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: abf93e6201f54bd5713d6f6d5aa32b3752d750ce3c68044733295622ea0c346177505a615e87c073a1e0ad9b1d17b87a58f81152a31d6459658e4e9c17132db6 - languageName: node - linkType: hard - -"source-map-support@npm:^0.4.15": - version: 0.4.18 - resolution: "source-map-support@npm:0.4.18" - dependencies: - source-map: ^0.5.6 - checksum: 669aa7e992fec586fac0ba9a8dea8ce81b7328f92806335f018ffac5709afb2920e3870b4e56c68164282607229f04b8bbcf5d0e5c845eb1b5119b092e7585c0 + checksum: 875415450979068ed559011d13e6d52eb41b8239f650960e5f24fcd61f2509e60955de647663fba3df56a2321e6a6bbad32525cf868aaf37f0eff4774eeb4c32 languageName: node linkType: hard -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.6": +"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -11729,20 +10763,6 @@ __metadata: languageName: node linkType: hard -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:^0.5.6, source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -11759,13 +10779,23 @@ __metadata: languageName: node linkType: hard +"spawndamnit@npm:^2.0.0": + version: 2.0.0 + resolution: "spawndamnit@npm:2.0.0" + dependencies: + cross-spawn: ^5.1.0 + signal-exit: ^3.0.2 + checksum: c74b5e264ee5bc13d55692fd422d74c282e4607eb04ac64d19d06796718d89b14921620fa4237ec5635e7acdff21461670ff19850f210225410a353cad0d7fed + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" dependencies: spdx-expression-parse: ^3.0.0 spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 languageName: node linkType: hard @@ -11787,18 +10817,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.11 - resolution: "spdx-license-ids@npm:3.0.11" - checksum: 1da1acb090257773e60b022094050e810ae9fec874dc1461f65dc0400cd42dd830ab2df6e64fb49c2db3dce386dd0362110780e1b154db7c0bb413488836aaeb - languageName: node - linkType: hard - -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: ^3.0.0 - checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c + version: 3.0.16 + resolution: "spdx-license-ids@npm:3.0.16" + checksum: 5cdaa85aaa24bd02f9353a2e357b4df0a4f205cb35655f3fd0a5674a4fb77081f28ffd425379214bc3be2c2b7593ce1215df6bcc75884aeee0a9811207feabe2 languageName: node linkType: hard @@ -11810,8 +10831,8 @@ __metadata: linkType: hard "sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -11826,16 +10847,16 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + checksum: 01d43374eee3a7e37b3b82fdbecd5518cbb2e47ccbed27d2ae30f9753f22bd6ffad31225cb8ef013bc3fb7785e686cea619203ee1439a228f965558c367c3cfa languageName: node linkType: hard -"ssri@npm:^9.0.0": - version: 9.0.0 - resolution: "ssri@npm:9.0.0" +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" dependencies: - minipass: ^3.1.1 - checksum: bf33174232d07cc64e77ab1c51b55d28352273380c503d35642a19627e88a2c5f160039bb0a28608a353485075dda084dbf0390c7070f9f284559eb71d01b84b + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 languageName: node linkType: hard @@ -11848,16 +10869,6 @@ __metadata: languageName: node linkType: hard -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: ^0.2.5 - object-copy: ^0.1.0 - checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -11865,27 +10876,12 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c - languageName: node - linkType: hard - -"stealthy-require@npm:^1.1.1": - version: 1.1.1 - resolution: "stealthy-require@npm:1.1.1" - checksum: 6805b857a9f3a6a1079fc6652278038b81011f2a5b22cbd559f71a6c02087e6f1df941eb10163e3fdc5391ab5807aa46758d4258547c1f5ede31e6d9bfda8dd3 - languageName: node - linkType: hard - -"stream-to-pull-stream@npm:^1.7.1": - version: 1.7.3 - resolution: "stream-to-pull-stream@npm:1.7.3" +"stream-transform@npm:^2.1.3": + version: 2.1.3 + resolution: "stream-transform@npm:2.1.3" dependencies: - looper: ^3.0.0 - pull-stream: ^3.2.3 - checksum: 2b878e3b3d5f435802866bfec8897361b9de4ce69f77669da1103cfc45f54833e7c183922468f30c046d375a1642f5a4801a808a8da0d3927c5de41d42a59bc0 + mixme: ^0.5.1 + checksum: 26ce872a6812d5c784fa1f042bfd403644bc1c019f64627b5012c4544830a5570bef98b47225b38120c5878b326f3d1a213cd999a2285c98b536e5e202ca5bdf languageName: node linkType: hard @@ -11903,18 +10899,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: ^1.0.0 - is-fullwidth-code-point: ^1.0.0 - strip-ansi: ^3.0.0 - checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -11925,7 +10910,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2, string-width@npm:^2.1.1": +"string-width@npm:^2.1.1": version: 2.1.1 resolution: "string-width@npm:2.1.1" dependencies: @@ -11935,45 +10920,47 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" dependencies: - emoji-regex: ^7.0.1 - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^5.1.0 - checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 languageName: node linkType: hard -"string.prototype.trim@npm:~1.2.5": - version: 1.2.5 - resolution: "string.prototype.trim@npm:1.2.5" +"string.prototype.trim@npm:^1.2.8": + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: d9f748ffca2a3ce722c421f7c2993b6490ec0cf19d9cb0904598c744e9367e54a3f13c7b99c8c0966c8a76484bd656a60281daa5d0534cc222cd72193fd63034 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 49eb1a862a53aba73c3fb6c2a53f5463173cb1f4512374b623bcd6b43ad49dd559a06fb5789bdec771a40fc4d2a564411c0a75d35fb27e76bbe738c211ecff07 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimend@npm:1.0.4" +"string.prototype.trimend@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 17e5aa45c3983f582693161f972c1c1fa4bbbdf22e70e582b00c91b6575f01680dc34e83005b98e31abe4d5d29e0b21fcc24690239c106c7b2315aade6a898ac + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 2375516272fd1ba75992f4c4aa88a7b5f3c7a9ca308d963bcd5645adf689eba6f8a04ebab80c33e30ec0aefc6554181a3a8416015c38da0aa118e60ec896310c languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimstart@npm:1.0.4" +"string.prototype.trimstart@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 3fb06818d3cccac5fa3f5f9873d984794ca0e9f6616fae6fcc745885d9efed4e17fe15f832515d9af5e16c279857fdbffdfc489ca4ed577811b017721b30302f + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613 languageName: node linkType: hard @@ -11986,13 +10973,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -12002,12 +10982,12 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" +"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" dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c languageName: node linkType: hard @@ -12020,30 +11000,12 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: ^4.1.0 - checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-bom@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-bom@npm:2.0.0" +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" dependencies: - is-utf8: ^0.2.0 - checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944 + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d languageName: node linkType: hard @@ -12063,29 +11025,22 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 languageName: node linkType: hard -"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"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: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard -"supports-color@npm:6.0.0": - version: 6.0.0 - resolution: "supports-color@npm:6.0.0" - dependencies: - has-flag: ^3.0.0 - checksum: 005b4a7e5d78a9a703454f5b7da34336b82825747724d1f3eefea6c3956afcb33b79b31854a93cef0fc1f2449919ae952f79abbfd09a5b5b43ecd26407d3a3a1 - languageName: node - linkType: hard - "supports-color@npm:8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" @@ -12095,13 +11050,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 - languageName: node - linkType: hard - "supports-color@npm:^3.1.0": version: 3.2.3 resolution: "supports-color@npm:3.2.3" @@ -12137,21 +11085,21 @@ __metadata: linkType: hard "swarm-js@npm:^0.1.40": - version: 0.1.40 - resolution: "swarm-js@npm:0.1.40" + version: 0.1.42 + resolution: "swarm-js@npm:0.1.42" dependencies: bluebird: ^3.5.0 buffer: ^5.0.5 eth-lib: ^0.1.26 fs-extra: ^4.0.2 - got: ^7.1.0 + got: ^11.8.5 mime-types: ^2.1.16 mkdirp-promise: ^5.0.1 mock-fs: ^4.1.0 setimmediate: ^1.0.5 tar: ^4.0.2 xhr-request: ^1.0.1 - checksum: 1de56e0cb02c1c80e041efb2bd2cc7250c5451c3016967266c16d5c1e8c74fe5c3aae45dc46065b1f4d77667a8453b967961ec58b3975469522f566aa840a914 + checksum: bbb54b84232ef113ee106cf8158d1c827fbf84b309799576f61603f63d7653fde7e71df981d07f9e4c41781bbbbd72be77e5a47e6b694d6a83b96a6a20641475 languageName: node linkType: hard @@ -12175,7 +11123,7 @@ __metadata: languageName: node linkType: hard -"table-layout@npm:^1.0.1": +"table-layout@npm:^1.0.2": version: 1.0.2 resolution: "table-layout@npm:1.0.2" dependencies: @@ -12187,28 +11135,16 @@ __metadata: languageName: node linkType: hard -"tape@npm:^4.6.3": - version: 4.15.1 - resolution: "tape@npm:4.15.1" - dependencies: - call-bind: ~1.0.2 - deep-equal: ~1.1.1 - defined: ~1.0.0 - dotignore: ~0.1.2 - for-each: ~0.3.3 - glob: ~7.2.0 - has: ~1.0.3 - inherits: ~2.0.4 - is-regex: ~1.1.4 - minimist: ~1.2.6 - object-inspect: ~1.12.0 - resolve: ~1.22.0 - resumer: ~0.0.0 - string.prototype.trim: ~1.2.5 - through: ~2.3.8 - bin: - tape: bin/tape - checksum: 3726aa5979cbffe057455db9fd353c88ff26a1d8d3addc7d479fcbb8202caf12cb3e122492e203db00195b6fdfbc1f9c06762a4aeead7efc710ff46955be550f +"table@npm:^6.8.0": + version: 6.8.1 + resolution: "table@npm:6.8.1" + dependencies: + ajv: ^8.0.1 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + checksum: 08249c7046125d9d0a944a6e96cfe9ec66908d6b8a9db125531be6eb05fa0de047fd5542e9d43b4f987057f00a093b276b8d3e19af162a9c40db2681058fd306 languageName: node linkType: hard @@ -12228,33 +11164,23 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.11 - resolution: "tar@npm:6.1.11" + version: 6.2.0 + resolution: "tar@npm:6.2.0" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 - minipass: ^3.0.0 + minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f - languageName: node - linkType: hard - -"test-value@npm:^2.1.0": - version: 2.1.0 - resolution: "test-value@npm:2.1.0" - dependencies: - array-back: ^1.0.3 - typical: ^2.6.0 - checksum: ce41ef4100c9ac84630e78d1ca06706714587faf255e44296ace1fc7bf5b888c160b8c0229d31467252a3b2b57197965194391f6ee0c54f33e0b8e3af3a33a0c + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c languageName: node linkType: hard -"testrpc@npm:0.0.1": - version: 0.0.1 - resolution: "testrpc@npm:0.0.1" - checksum: e27778552df2d0b938b062fdf41d44557f0eb3de75903cb90b87909f55a82a6345dd13e40d1498e718272b4e5225872dca66da73646c35df1031486bb0ed0fda +"term-size@npm:^2.1.0": + version: 2.2.1 + resolution: "term-size@npm:2.2.1" + checksum: 1ed981335483babc1e8206f843e06bd2bf89b85f0bf5a9a9d928033a0fcacdba183c03ba7d91814643015543ba002f1339f7112402a21da8f24b6c56b062a5a9 languageName: node linkType: hard @@ -12284,24 +11210,14 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.3": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:~2.3.4, through@npm:~2.3.8": +"through@npm:^2.3.6": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd languageName: node linkType: hard -"timed-out@npm:^4.0.0, timed-out@npm:^4.0.1": +"timed-out@npm:^4.0.1": version: 4.0.1 resolution: "timed-out@npm:4.0.1" checksum: 98efc5d6fc0d2a329277bd4d34f65c1bf44d9ca2b14fd267495df92898f522e6f563c5e9e467c418e0836f5ca1f47a84ca3ee1de79b1cc6fe433834b7f02ec54 @@ -12317,31 +11233,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:0.1.0": - version: 0.1.0 - resolution: "tmp@npm:0.1.0" - dependencies: - rimraf: ^2.6.3 - checksum: 6bab8431de9d245d4264bd8cd6bb216f9d22f179f935dada92a11d1315572c8eb7c3334201e00594b4708608bd536fad3a63bfb037e7804d827d66aa53a1afcd - languageName: node - linkType: hard - -"to-fast-properties@npm:^1.0.3": - version: 1.0.3 - resolution: "to-fast-properties@npm:1.0.3" - checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580 - languageName: node - linkType: hard - -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: ^3.0.2 - checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - "to-readable-stream@npm:^1.0.0": version: 1.0.0 resolution: "to-readable-stream@npm:1.0.0" @@ -12349,16 +11240,6 @@ __metadata: languageName: node linkType: hard -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: ^3.0.0 - repeat-string: ^1.6.1 - checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -12368,18 +11249,6 @@ __metadata: languageName: node linkType: hard -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - regex-not: ^1.0.2 - safe-regex: ^1.1.0 - checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -12387,7 +11256,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^2.3.3, tough-cookie@npm:~2.5.0": +"tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" dependencies: @@ -12404,23 +11273,16 @@ __metadata: languageName: node linkType: hard -"trim-right@npm:^1.0.1": - version: 1.0.1 - resolution: "trim-right@npm:1.0.1" - checksum: 9120af534e006a7424a4f9358710e6e707887b6ccf7ea69e50d6ac6464db1fe22268400def01752f09769025d480395159778153fb98d4a2f6f40d4cf5d4f3b6 - languageName: node - linkType: hard - -"true-case-path@npm:^2.2.1": - version: 2.2.1 - resolution: "true-case-path@npm:2.2.1" - checksum: fd5f1c2a87a122a65ffb1f84b580366be08dac7f552ea0fa4b5a6ab0a013af950b0e752beddb1c6c1652e6d6a2b293b7b3fd86a5a1706242ad365b68f1b5c6f1 +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 languageName: node linkType: hard "ts-command-line-args@npm:^2.2.0": - version: 2.2.1 - resolution: "ts-command-line-args@npm:2.2.1" + version: 2.5.1 + resolution: "ts-command-line-args@npm:2.5.1" dependencies: chalk: ^4.1.0 command-line-args: ^5.1.1 @@ -12428,23 +11290,7 @@ __metadata: string-format: ^2.0.0 bin: write-markdown: dist/write-markdown.js - checksum: a8f963911ab748c8aeedb4b4e6e8008fa0d8781df34dc5b02a81cb7caa201124f24e048dfdab6f4cd1e06b45383dc983336d617200b7d772905708fb9b9d6d6b - languageName: node - linkType: hard - -"ts-essentials@npm:^1.0.0": - version: 1.0.4 - resolution: "ts-essentials@npm:1.0.4" - checksum: 2e19bbe51203707ca732dcc6c3f238b2cf22bb9213d26ae0246c02325fb3e5f17c32505ac79c1bd538b7951a798155b07422e263a95cb295070a48233e45a1b5 - languageName: node - linkType: hard - -"ts-essentials@npm:^6.0.3": - version: 6.0.7 - resolution: "ts-essentials@npm:6.0.7" - peerDependencies: - typescript: ">=3.7.0" - checksum: b47a1793df9ea997d50d2cc9155433952b189cfca0c534a6f3f3dce6aa782a37574d2179dee6d55ed918835aa17addda49619ff2bd2eb3e60e331db3ce30a79b + checksum: 7c0a7582e94f1d2160e3dd379851ec4f1758bc673ccd71bae07f839f83051b6b83e0ae14325c2d04ea728e5bde7b7eacfd2ab060b8fd4b8ab29e0bbf77f6c51e languageName: node linkType: hard @@ -12457,39 +11303,58 @@ __metadata: languageName: node linkType: hard -"ts-generator@npm:^0.1.1": - version: 0.1.1 - resolution: "ts-generator@npm:0.1.1" - dependencies: - "@types/mkdirp": ^0.5.2 - "@types/prettier": ^2.1.1 - "@types/resolve": ^0.0.8 - chalk: ^2.4.1 - glob: ^7.1.2 - mkdirp: ^0.5.1 - prettier: ^2.1.2 - resolve: ^1.8.1 - ts-essentials: ^1.0.0 - bin: - ts-generator: dist/cli/run.js - checksum: 3add2e76afd7a4d9d9aee1ff26477ee4e8b4cc740b35787f9ea780c11aefc88e6c7833837eacc12b944c1883680639dc9cc47fe173eff95c62112f3a41132146 - languageName: node - linkType: hard - -"ts-mocha@npm:^9.0.2": - version: 9.0.2 - resolution: "ts-mocha@npm:9.0.2" +"ts-mocha@npm:^10.0.0": + version: 10.0.0 + resolution: "ts-mocha@npm:10.0.0" dependencies: ts-node: 7.0.1 tsconfig-paths: ^3.5.0 peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X dependenciesMeta: tsconfig-paths: optional: true bin: ts-mocha: bin/ts-mocha - checksum: 142a7fc2b7be156e2933b31ec0577d092789d4c55e5be0e42c038b92644983e970fdc3fd7b2fb12b007288e2be749d5897c064ecf7c48cb021f38401f5a95a67 + checksum: b11f2a8ceecf195b0db724da429159982fef12e4357088fe900289223587217e8c126ead7929679edd58bf19ad96c5da5911535d26f535386632e18fbff10c40 + languageName: node + linkType: hard + +"ts-node@npm:10.8.1": + version: 10.8.1 + resolution: "ts-node@npm:10.8.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 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: 7d1aa7aa3ae1c0459c4922ed0dbfbade442cfe0c25aebaf620cdf1774f112c8d7a9b14934cb6719274917f35b2c503ba87bcaf5e16a0d39ba0f68ce3e7728363 languageName: node linkType: hard @@ -12511,15 +11376,15 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.1, tsconfig-paths@npm:^3.5.0": - version: 3.14.1 - resolution: "tsconfig-paths@npm:3.14.1" +"tsconfig-paths@npm:^3.14.1, tsconfig-paths@npm:^3.14.2, tsconfig-paths@npm:^3.5.0": + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.1 + json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 languageName: node linkType: hard @@ -12531,9 +11396,9 @@ __metadata: linkType: hard "tslib@npm:^2.1.0": - version: 2.3.1 - resolution: "tslib@npm:2.3.1" - checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -12555,6 +11420,23 @@ __metadata: languageName: node linkType: hard +"tty-table@npm:^4.1.5": + version: 4.2.3 + resolution: "tty-table@npm:4.2.3" + dependencies: + chalk: ^4.1.2 + csv: ^5.5.3 + kleur: ^4.1.5 + smartwrap: ^2.0.2 + strip-ansi: ^6.0.1 + wcwidth: ^1.0.1 + yargs: ^17.7.1 + bin: + tty-table: adapters/terminal-adapter.js + checksum: 2d6c429dc91c308cd1c8d0f2e102e08bcc10af21bc99b89179fb414dd0edd6a686026ff53111dfd3a814841bbbb44c55cd827e5a7748f35182c62f13fef5a169 + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -12564,7 +11446,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl-util@npm:^0.15.0, tweetnacl-util@npm:^0.15.1": +"tweetnacl-util@npm:^0.15.1": version: 0.15.1 resolution: "tweetnacl-util@npm:0.15.1" checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc @@ -12578,7 +11460,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl@npm:^1.0.0, tweetnacl@npm:^1.0.3": +"tweetnacl@npm:^1.0.3": version: 1.0.3 resolution: "tweetnacl@npm:1.0.3" checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c @@ -12603,13 +11485,20 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: e6bf2e3c449f27d4ef5d56faf8b86feafbc3aec3025fc9a5fbe2db0a2587c44714521f9c30d8516a833c8c506d6263f5cc11267522b10c6ccdb6cc55b0a9d1c4 + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -12624,6 +11513,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + "type-fest@npm:^0.7.1": version: 0.7.1 resolution: "type-fest@npm:0.7.1" @@ -12631,6 +11527,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -12648,33 +11551,16 @@ __metadata: languageName: node linkType: hard -"type@npm:^2.5.0": - version: 2.6.0 - resolution: "type@npm:2.6.0" - checksum: 80da01fcc0f6ed5a253dc326530e134000a8f66ea44b6d9687cde2f894f0d0b2486595b0cd040a64f7f79dc3120784236f8c9ef667a8aef03984e049b447cfb4 - languageName: node - linkType: hard - -"typechain@npm:^3.0.0": - version: 3.0.0 - resolution: "typechain@npm:3.0.0" - dependencies: - command-line-args: ^4.0.7 - debug: ^4.1.1 - fs-extra: ^7.0.0 - js-sha3: ^0.8.0 - lodash: ^4.17.15 - ts-essentials: ^6.0.3 - ts-generator: ^0.1.1 - bin: - typechain: ./dist/cli/cli.js - checksum: a38aff5e89c41e20e2c3a1f7b5f04666dbc94b5592eba70ba7d1e0aeb49089d22ed3d35e55a0b0d1f0bfdcea9818157fa4ee3854ef818f46f6aa899520fe7c25 +"type@npm:^2.7.2": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 languageName: node linkType: hard "typechain@npm:^8.0.0": - version: 8.0.0 - resolution: "typechain@npm:8.0.0" + version: 8.3.2 + resolution: "typechain@npm:8.3.2" dependencies: "@types/prettier": ^2.1.1 debug: ^4.3.1 @@ -12690,7 +11576,54 @@ __metadata: typescript: ">=4.3.0" bin: typechain: dist/cli/cli.js - checksum: c049cc84ac3cf3a5ed8374db750b7b9adcfc523bb1940e1b8bafef063297aed081a5378560c3fbccd1f5d130d32c9ba9678654dfe00d97fb1dfa17d04a933450 + checksum: 146a1896fa93403404be78757790b0f95b5457efebcca16b61622e09c374d555ef4f837c1c4eedf77e03abc50276d96a2f33064ec09bb802f62d8cc2b13fce70 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-buffer@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + is-typed-array: ^1.1.10 + checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 languageName: node linkType: hard @@ -12711,52 +11644,22 @@ __metadata: linkType: hard "typescript@npm:^4.6.3": - version: 4.6.3 - resolution: "typescript@npm:4.6.3" + version: 4.9.5 + resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 255bb26c8cb846ca689dd1c3a56587af4f69055907aa2c154796ea28ee0dea871535b1c78f85a6212c77f2657843a269c3a742d09d81495b97b914bf7920415b + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard "typescript@patch:typescript@^4.6.3#~builtin": - version: 4.6.3 - resolution: "typescript@patch:typescript@npm%3A4.6.3#~builtin::version=4.6.3&hash=bda367" + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=bda367" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6bf45caf847062420592e711bc9c28bf5f9a9a7fa8245343b81493e4ededae33f1774009d1234d911422d1646a2c839f44e1a23ecb111b40a60ac2ea4c1482a8 - languageName: node - linkType: hard - -"typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": - version: 1.2.0 - resolution: "typewise-core@npm:1.2.0" - checksum: c21e83544546d1aba2f17377c25ae0eb571c2153b2e3705932515bef103dbe43e05d2286f238ad139341b1000da40583115a44cb5e69a2ef408572b13dab844b - languageName: node - linkType: hard - -"typewise@npm:^1.0.3": - version: 1.0.3 - resolution: "typewise@npm:1.0.3" - dependencies: - typewise-core: ^1.2.0 - checksum: eb3452b1387df8bf8e3b620720d240425a50ce402d7c064c21ac4b5d88c551ee4d1f26cd649b8a17a6d06f7a3675733de841723f8e06bb3edabfeacc4924af4a - languageName: node - linkType: hard - -"typewiselite@npm:~1.0.0": - version: 1.0.0 - resolution: "typewiselite@npm:1.0.0" - checksum: 2e13a652c041680e9e37501129715f97c2ff2b8f52b5e82acd9355c070ca7c126633ff96d2ad03945254c271c0d1cf9f4956090c93ad750717e00d100cbd0c87 - languageName: node - linkType: hard - -"typical@npm:^2.6.0, typical@npm:^2.6.1": - version: 2.6.1 - resolution: "typical@npm:2.6.1" - checksum: 6af04fefe50d90d3471f058b2cdc0f49b7436bdd605cd00acea7965926ff388a5a7d692ef144f45fccee6f8e896c065702ecc44b69057e2ce88c09e897c7d3a4 + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 languageName: node linkType: hard @@ -12775,11 +11678,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.15.4 - resolution: "uglify-js@npm:3.15.4" + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" bin: uglifyjs: bin/uglifyjs - checksum: 5f673c5dd7f3b3dd15d1d26aebfe29bccbb1b896c4b5423ec70a2e8b9506c70b6fb6a53dec83df5ad65a717ec9a850adf08e0aedf9b1711eac5eb080216615fa + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 languageName: node linkType: hard @@ -12790,59 +11693,49 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.1": - version: 1.0.1 - resolution: "unbox-primitive@npm:1.0.1" +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" dependencies: - function-bind: ^1.1.1 - has-bigints: ^1.0.1 - has-symbols: ^1.0.2 + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 which-boxed-primitive: ^1.0.2 - checksum: 89d950e18fb45672bc6b3c961f1e72c07beb9640c7ceed847b571ba6f7d2af570ae1a2584cfee268b9d9ea1e3293f7e33e0bc29eaeb9f8e8a0bab057ff9e6bba - languageName: node - linkType: hard - -"underscore@npm:1.9.1": - version: 1.9.1 - resolution: "underscore@npm:1.9.1" - checksum: bee6f587661a6a9ca2f77e611896141e0287af51d8ca6034b11d0d4163ddbdd181a9720078ddbe94d265b7694f4880bc7f4c2ad260cfb8985ee2f9adcf13df03 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 languageName: node linkType: hard -"undici@npm:^4.14.1": - version: 4.16.0 - resolution: "undici@npm:4.16.0" - checksum: 5e88c2b3381085e25ed1d1a308610ac7ee985f478ac705af7a8e03213536e10f73ef8dd8d85e6ed38948d1883fa0ae935e04357c317b0f5d3d3c0211d0c8c393 +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 languageName: node linkType: hard -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" +"undici@npm:^5.14.0": + version: 5.28.2 + resolution: "undici@npm:5.28.2" dependencies: - arr-union: ^3.1.0 - get-value: ^2.0.6 - is-extendable: ^0.1.1 - set-value: ^2.0.1 - checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba + "@fastify/busboy": ^2.0.0 + checksum: f9e9335803f962fff07c3c11c6d50bbc76248bacf97035047155adb29c3622a65bd6bff23a22218189740133149d22e63b68131d8c40e78ac6cb4b6d686a6dfa languageName: node linkType: hard -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df languageName: node linkType: hard -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 languageName: node linkType: hard @@ -12854,16 +11747,9 @@ __metadata: linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 - languageName: node - linkType: hard - -"unorm@npm:^1.3.3": - version: 1.6.0 - resolution: "unorm@npm:1.6.0" - checksum: 9a86546256a45f855b6cfe719086785d6aada94f63778cecdecece8d814ac26af76cb6da70130da0a08b8803bbf0986e56c7ec4249038198f3de02607fffd811 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard @@ -12874,16 +11760,6 @@ __metadata: languageName: node linkType: hard -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: ^0.3.1 - isobject: ^3.0.0 - checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 - languageName: node - linkType: hard - "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -12893,22 +11769,6 @@ __metadata: languageName: node linkType: hard -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - -"url-parse-lax@npm:^1.0.0": - version: 1.0.0 - resolution: "url-parse-lax@npm:1.0.0" - dependencies: - prepend-http: ^1.0.1 - checksum: 03316acff753845329652258c16d1688765ee34f7d242a94dadf9ff6e43ea567ec062cec7aa27c37f76f2c57f95e0660695afff32fb97b527591c7340a3090fa - languageName: node - linkType: hard - "url-parse-lax@npm:^3.0.0": version: 3.0.0 resolution: "url-parse-lax@npm:3.0.0" @@ -12925,41 +11785,37 @@ __metadata: languageName: node linkType: hard -"url-to-options@npm:^1.0.1": - version: 1.0.1 - resolution: "url-to-options@npm:1.0.1" - checksum: 20e59f4578525fb0d30ffc22b13b5aa60bc9e57cefd4f5842720f5b57211b6dec54abeae2d675381ac4486fd1a2e987f1318725dea996e503ff89f8c8ce2c17e - languageName: node - linkType: hard - "url@npm:^0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" + version: 0.11.3 + resolution: "url@npm:0.11.3" dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 50d100d3dd2d98b9fe3ada48cadb0b08aa6be6d3ac64112b867b56b19be4bfcba03c2a9a0d7922bfd7ac17d4834e88537749fe182430dfd9b68e520175900d90 + punycode: ^1.4.1 + qs: ^6.11.2 + checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e languageName: node linkType: hard -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 +"utf-8-validate@npm:5.0.7": + version: 5.0.7 + resolution: "utf-8-validate@npm:5.0.7" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 588d272b359bf555a0c4c2ffe97286edc73126de132f63f4f0c80110bd06b67d3ce44d2b3d24feea6da13ced50c04d774ba4d25fe28576371cd714cd013bd3b7 languageName: node linkType: hard "utf-8-validate@npm:^5.0.2": - version: 5.0.9 - resolution: "utf-8-validate@npm:5.0.9" + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" dependencies: node-gyp: latest node-gyp-build: ^4.3.0 - checksum: 90117f1b65e0a1256c83dfad529983617263b622f2379745311d0438c7ea31db0d134ebd0dca84c3f5847a3560a3d249644e478a9109c616f63c7ea19cac53dc + checksum: 5579350a023c66a2326752b6c8804cc7b39dcd251bb088241da38db994b8d78352e388dcc24ad398ab98385ba3c5ffcadb6b5b14b2637e43f767869055e46ba6 languageName: node linkType: hard -"utf8@npm:3.0.0, utf8@npm:^3.0.0": +"utf8@npm:3.0.0": version: 3.0.0 resolution: "utf8@npm:3.0.0" checksum: cb89a69ad9ab393e3eae9b25305b3ff08bebca9adc839191a34f90777eb2942f86a96369d2839925fea58f8f722f7e27031d697f10f5f39690f8c5047303e62d @@ -12973,30 +11829,16 @@ __metadata: languageName: node linkType: hard -"util.promisify@npm:^1.0.0": - version: 1.1.1 - resolution: "util.promisify@npm:1.1.1" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - for-each: ^0.3.3 - has-symbols: ^1.0.1 - object.getownpropertydescriptors: ^2.1.1 - checksum: ea371c30b90576862487ae4efd7182aa5855019549a4019d82629acc2709e8ccb0f38944403eebec622fff8ebb44ac3f46a52d745d5f543d30606132a4905f96 - languageName: node - linkType: hard - -"util@npm:^0.12.0": - version: 0.12.4 - resolution: "util@npm:0.12.4" +"util@npm:^0.12.0, util@npm:^0.12.5": + version: 0.12.5 + resolution: "util@npm:0.12.5" dependencies: inherits: ^2.0.3 is-arguments: ^1.0.4 is-generator-function: ^1.0.7 is-typed-array: ^1.1.3 - safe-buffer: ^5.1.2 which-typed-array: ^1.1.2 - checksum: 8eac7a6e6b341c0f1b3eb73bbe5dfcae31a7e9699c8fc3266789f3e95f7637946a7700dcf1904dbd3749a58a36760ebf7acf4bb5b717f7468532a8a79f44eff0 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a languageName: node linkType: hard @@ -13041,10 +11883,19 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache@npm:^2.0.3": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + 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: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 languageName: node linkType: hard @@ -13083,598 +11934,569 @@ __metadata: languageName: node linkType: hard -"web3-bzz@npm:1.2.11": - version: 1.2.11 - resolution: "web3-bzz@npm:1.2.11" +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"web3-bzz@npm:1.10.0": + version: 1.10.0 + resolution: "web3-bzz@npm:1.10.0" dependencies: "@types/node": ^12.12.6 - got: 9.6.0 + got: 12.1.0 swarm-js: ^0.1.40 - underscore: 1.9.1 - checksum: 45136e7282819260357efdcdf6d81cb7b733b212aa1e46f1bbcaff70a33a2e3f6558936e6e1fc3bf75bb4c3220f844fc6b9d5bfaaa68a2f6ed0e8c0b02c97523 + checksum: a4b6766e23ca4b2d37b0390aaf0c7f8a1246e90be843dc7183a04a1960d60998fc9267234aba9989e7e87db837dac58d4dee027071ecce29344611e20f3b9ffc languageName: node linkType: hard -"web3-bzz@npm:1.5.3": - version: 1.5.3 - resolution: "web3-bzz@npm:1.5.3" +"web3-bzz@npm:1.7.4": + version: 1.7.4 + resolution: "web3-bzz@npm:1.7.4" dependencies: "@types/node": ^12.12.6 got: 9.6.0 swarm-js: ^0.1.40 - checksum: 19588b430af9d35d8428255dbc03b86228679b98274e964de1b1404f2e348aa2c989d662903d8d3b0b83cd70658be99126515804745ce27e145beb817ac2b60c + checksum: 196a06ca913f093a53f1d78a77e702b8e227efbf6759be50d8ec1eb4161952902ebf9dd73a57c30ad7774cb4536c0cf3ec7c41c261f56e5813aa585a714d8dfc languageName: node linkType: hard -"web3-core-helpers@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-helpers@npm:1.2.11" +"web3-core-helpers@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core-helpers@npm:1.10.0" dependencies: - underscore: 1.9.1 - web3-eth-iban: 1.2.11 - web3-utils: 1.2.11 - checksum: dac2ab85b8bec8251647d40f1dc5fcf30b2245de6d216328c51c9d619d12a567906c5bf8b542846552a56bf969edcfcb16fb67e3780461195df85cd506591f68 + web3-eth-iban: 1.10.0 + web3-utils: 1.10.0 + checksum: 3f8b8ed5e3f56c5760452e5d8850d77607cd7046392c7df78a0903611dcbf875acc9bff04bbc397cd967ce27d45b61de19dcf47fada0c958f54a5d69181a40a6 languageName: node linkType: hard -"web3-core-helpers@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core-helpers@npm:1.5.3" +"web3-core-helpers@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core-helpers@npm:1.7.4" dependencies: - web3-eth-iban: 1.5.3 - web3-utils: 1.5.3 - checksum: 562e6d2f5a8d1e13244a2a85f1a98ff2e8f7340cd94534379b9cc6a4476bed1a899b778a2e4b537f962811e618448a8096833638ec31893fcb03770c4143bd54 + web3-eth-iban: 1.7.4 + web3-utils: 1.7.4 + checksum: 706b3617395a4cba1955e6d56f32cb65f645e0df854dd373263d61fd291fefaa6a490aeec94a4bebb45ed0aac3f044b783dfd35b77c74bb55eddc30f7c59b6a3 languageName: node linkType: hard -"web3-core-method@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-method@npm:1.2.11" +"web3-core-method@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core-method@npm:1.10.0" dependencies: - "@ethersproject/transactions": ^5.0.0-beta.135 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - web3-core-promievent: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-utils: 1.2.11 - checksum: 7533c5b8c42df49969b9c95a2c9cb0abcd55a304ef4b276a5cc43673d27ffd9767a0caabe09271979b5afd0f788a51416f7018bc704d734ad78846c68dba15a7 + "@ethersproject/transactions": ^5.6.2 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-utils: 1.10.0 + checksum: 29c42c92f0f6d895245c6d3dba4adffd822787b09bee0d9953a5d50365ae1ab0559085e9d6104e2dfb00b372fbf02ff1d6292c9a9e565ada1a5c531754d654cd languageName: node linkType: hard -"web3-core-method@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core-method@npm:1.5.3" +"web3-core-method@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core-method@npm:1.7.4" dependencies: - "@ethereumjs/common": ^2.4.0 - "@ethersproject/transactions": ^5.0.0-beta.135 - web3-core-helpers: 1.5.3 - web3-core-promievent: 1.5.3 - web3-core-subscriptions: 1.5.3 - web3-utils: 1.5.3 - checksum: 7ff2eea36096e57f15da8ee65ab7cb0bd9e41ab0605af7826178d8b1e796af45495d28cd8301e14e0c3ee5ce05aa1bdc610b793ae7fbdc763dc3afafcf937135 + "@ethersproject/transactions": ^5.6.2 + web3-core-helpers: 1.7.4 + web3-core-promievent: 1.7.4 + web3-core-subscriptions: 1.7.4 + web3-utils: 1.7.4 + checksum: 48b0dd9bfc936154228b6abbe9c795136c4a8350af281bb7b0f576fd8e5150a9fca79776b4bf4f53e3b2508f6df41f3230df97428894030f2e7bf5953cce93ce languageName: node linkType: hard -"web3-core-promievent@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-promievent@npm:1.2.11" +"web3-core-promievent@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core-promievent@npm:1.10.0" dependencies: eventemitter3: 4.0.4 - checksum: bd3661978f252ec0033881b32a5d4dec1bfeb7fb0f018d77c077c77b60c0f965215dcbd54c5fcbef739441dd7efbdbd6c9b20e275e05f5b4d2cee762937d95cc + checksum: 68e9f40f78d92ce1ee9808d04a28a89d20ab4dc36af5ba8405f132044cbb01825f76f35249a9599f9568a95d5e7c9e4a09ada6d4dc2e27e0c1b32c9232c8c973 languageName: node linkType: hard -"web3-core-promievent@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core-promievent@npm:1.5.3" +"web3-core-promievent@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core-promievent@npm:1.7.4" dependencies: eventemitter3: 4.0.4 - checksum: b31a8ba6ff1d9d3cfdcef26396e1a9dfc3e0c95d4679e8cd69b6892094f21e2ce5ffc916c2d9776f5b28f0a617a814ee80be91bd3a8b17128cc01a390f9056eb + checksum: 1d3b10f9ba51759548ff1d6988f663368a7ef1a207134651b9ee268d042d891b6307e7f6153230a122ad7533f3c8562298a46fe9479b74aac08bfaaf7ff2ec2f languageName: node linkType: hard -"web3-core-requestmanager@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-requestmanager@npm:1.2.11" +"web3-core-requestmanager@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core-requestmanager@npm:1.10.0" dependencies: - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - web3-providers-http: 1.2.11 - web3-providers-ipc: 1.2.11 - web3-providers-ws: 1.2.11 - checksum: 84898bfec26319d06ccf7ae63821b7fbea8efc8a76015921530cc4eb85db39598c16598f1e51f95ed79146d7defafe7b924b5c6f6927fb2a153d01eb0862182c + util: ^0.12.5 + web3-core-helpers: 1.10.0 + web3-providers-http: 1.10.0 + web3-providers-ipc: 1.10.0 + web3-providers-ws: 1.10.0 + checksum: ce63b521b70b4e159510abf9d70e09d0c704b924a83951b350bb1d8f56b03dae21d3ea709a118019d272f754940ad6f6772002e7a8692bf733126fee80c84226 languageName: node linkType: hard -"web3-core-requestmanager@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core-requestmanager@npm:1.5.3" +"web3-core-requestmanager@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core-requestmanager@npm:1.7.4" dependencies: util: ^0.12.0 - web3-core-helpers: 1.5.3 - web3-providers-http: 1.5.3 - web3-providers-ipc: 1.5.3 - web3-providers-ws: 1.5.3 - checksum: 7258bb7373198078fce027ede2a508e1f4f86c75e9647c4b1438dc376a58ccb8a077f6e6647b26bf0d25382602eb12bcd7f9fc691177d0d3a1b692b55d1234e8 + web3-core-helpers: 1.7.4 + web3-providers-http: 1.7.4 + web3-providers-ipc: 1.7.4 + web3-providers-ws: 1.7.4 + checksum: 4e1decb11af99c46f1b73efc6a9204a9344444a5afe85f002c404e08522d4ab1dce9327a570e6e47911f257453c0a7663048b799875173d6f9f0eb3bcb782e30 languageName: node linkType: hard -"web3-core-subscriptions@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-subscriptions@npm:1.2.11" +"web3-core-subscriptions@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core-subscriptions@npm:1.10.0" dependencies: eventemitter3: 4.0.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - checksum: 7c8c07ea79fc9cf4ecb15ea37c5db38cc38e4b0545247d9ccc7ff6f4257565c03bcee569695a93abe02b8a98a6a9c227df880911ae324c0c6218a9571a3811f6 + web3-core-helpers: 1.10.0 + checksum: baca40f4d34da03bf4e6d64a13d9498a3ebfa37544869921671340d83581c87efbe3830998ae99db776fa22f0cdb529f9bb1fe7d516de1f9ce7b9da1c3a63859 languageName: node linkType: hard -"web3-core-subscriptions@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core-subscriptions@npm:1.5.3" +"web3-core-subscriptions@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core-subscriptions@npm:1.7.4" dependencies: eventemitter3: 4.0.4 - web3-core-helpers: 1.5.3 - checksum: 87c08b4ad9160e18fcfc05cf832c58616150ce69cb4e396f58fc64ef8ce43b5731dc7fc19bd8b4e5c40cfccd69bafec3b17f9b80f3a36ffad86fa50f83d55fb7 + web3-core-helpers: 1.7.4 + checksum: ff2cb87f676e9624fc92174193a073928029962816ba83282731e524e9a51d834fd55a27a3e94001a089486d09c9f9c23ac7d3c04b6da42c902017d53ba0bc4b languageName: node linkType: hard -"web3-core@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core@npm:1.2.11" +"web3-core@npm:1.10.0": + version: 1.10.0 + resolution: "web3-core@npm:1.10.0" dependencies: - "@types/bn.js": ^4.11.5 + "@types/bn.js": ^5.1.1 "@types/node": ^12.12.6 bignumber.js: ^9.0.0 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-core-requestmanager: 1.2.11 - web3-utils: 1.2.11 - checksum: 1793affddb4fa811f9781dc644b4017d95c6084a21bb866e0dc626f6d48bfc29eacf02237608b587ca49094e9342da878b64173510d99a6e9171f7a697e8cb36 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-requestmanager: 1.10.0 + web3-utils: 1.10.0 + checksum: 075b6dbf743e8cfad2aa1b9d603a45f0f30998c778af22cd0090d455a027e0658c398721a2a270c218dc2a561cbfd5cdbfe5ca14a6c2f5cd4afc8743e05a2e60 languageName: node linkType: hard -"web3-core@npm:1.5.3": - version: 1.5.3 - resolution: "web3-core@npm:1.5.3" +"web3-core@npm:1.7.4": + version: 1.7.4 + resolution: "web3-core@npm:1.7.4" dependencies: - "@types/bn.js": ^4.11.5 + "@types/bn.js": ^5.1.0 "@types/node": ^12.12.6 bignumber.js: ^9.0.0 - web3-core-helpers: 1.5.3 - web3-core-method: 1.5.3 - web3-core-requestmanager: 1.5.3 - web3-utils: 1.5.3 - checksum: 0a0ba056fd96d754aacc410c58458365745de1b055c3e3051599dbbb7c3ced0a8db87ac90b98e8ee7fc0b26a8c1500860dad24f8303fa0f6206a71456692ea59 + web3-core-helpers: 1.7.4 + web3-core-method: 1.7.4 + web3-core-requestmanager: 1.7.4 + web3-utils: 1.7.4 + checksum: 9e797df444e782ccdc2230ec79ff8adbcfeabc27346c23cd034b43aa23435b005739dac0c4282db4f79271a03d5572e37490c888ca8d23cb5106b3e30d0c85c0 languageName: node linkType: hard -"web3-eth-abi@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-abi@npm:1.2.11" +"web3-eth-abi@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-abi@npm:1.10.0" dependencies: - "@ethersproject/abi": 5.0.0-beta.153 - underscore: 1.9.1 - web3-utils: 1.2.11 - checksum: ef96c9c0faad2634d69f1c6dbf3414d0f292c0e534e477f47a1b14512c7099237a09d6b6ba91b624cea348e51e759106b128b0fe463d62f17f447e0a47071d76 + "@ethersproject/abi": ^5.6.3 + web3-utils: 1.10.0 + checksum: 465a4c19d6d8b41592871cb82e64fc0847093614d9f377939a731a691262a7e01398d8fe9e37f63e8d654707841a532c1161582ddaf87c52a66412a0285805c5 languageName: node linkType: hard -"web3-eth-abi@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-abi@npm:1.5.3" +"web3-eth-abi@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-abi@npm:1.7.4" dependencies: - "@ethersproject/abi": 5.0.7 - web3-utils: 1.5.3 - checksum: ce327542202c97b47e40ec3369e9847c38894b6f436cf4c2ee6450a9ed4869faa765f69bc3432f28b28f1300e04802cbe0fba2c74bb09d563c8ed9f539816c4b + "@ethersproject/abi": ^5.6.3 + web3-utils: 1.7.4 + checksum: f0ce4149dccf681349338d2ed5162d9f0fc4dcaf91639a4278cdec02e08858d969e56678cfc10f63668b7ddf41c53ff3d79d17fa92d158f96f94db3f31efb6f5 languageName: node linkType: hard -"web3-eth-accounts@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-accounts@npm:1.2.11" +"web3-eth-accounts@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-accounts@npm:1.10.0" dependencies: - crypto-browserify: 3.12.0 + "@ethereumjs/common": 2.5.0 + "@ethereumjs/tx": 3.3.2 eth-lib: 0.2.8 - ethereumjs-common: ^1.3.2 - ethereumjs-tx: ^2.1.1 + ethereumjs-util: ^7.1.5 scrypt-js: ^3.0.1 - underscore: 1.9.1 - uuid: 3.3.2 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-utils: 1.2.11 - checksum: 1653a7548337b538b280ced0d25dbf8b105954a5bf61726d5def25128ffc87c49d0d38b678a32e7d259e687f5e72cc452d92e14eaa8c9976a9153347e4afe7eb + uuid: ^9.0.0 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + checksum: 93821129133a30596e3008af31beb2f26d74157f56e5a669e22565dc991f13747d3d9150202860f93709a8a2a6ec80eaf12bee78f4e03d5ab60e28d7ee68d888 languageName: node linkType: hard -"web3-eth-accounts@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-accounts@npm:1.5.3" +"web3-eth-accounts@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-accounts@npm:1.7.4" dependencies: - "@ethereumjs/common": ^2.3.0 - "@ethereumjs/tx": ^3.2.1 + "@ethereumjs/common": ^2.5.0 + "@ethereumjs/tx": ^3.3.2 crypto-browserify: 3.12.0 eth-lib: 0.2.8 ethereumjs-util: ^7.0.10 scrypt-js: ^3.0.1 uuid: 3.3.2 - web3-core: 1.5.3 - web3-core-helpers: 1.5.3 - web3-core-method: 1.5.3 - web3-utils: 1.5.3 - checksum: 6a412691b7f4521dd8688fbaf7f0f4a068e1c58715391d59135142b987fc73cb771a42c0a40b633a9a66e0b3166b38fa8c40d81100942f387fc8db07b3658597 + web3-core: 1.7.4 + web3-core-helpers: 1.7.4 + web3-core-method: 1.7.4 + web3-utils: 1.7.4 + checksum: 565d57fc07ed057ab6ae94539ca57bd99fc1e95c5026d4cda561b73a7a77eb96a5f8b52683ffd351e7adba8b669c4988eb56f0f1f2f35ca1666f19dc83a7ed8b languageName: node linkType: hard -"web3-eth-contract@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-contract@npm:1.2.11" +"web3-eth-contract@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-contract@npm:1.10.0" dependencies: - "@types/bn.js": ^4.11.5 - underscore: 1.9.1 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-core-promievent: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-eth-abi: 1.2.11 - web3-utils: 1.2.11 - checksum: 1dc74e11f09c895bd5b26c5dfb3a0818d6a38a573de9252a3a943acf6ba88a058313e2977c95564ab56c3696f1ca975237ae4f10c93d34d2978f11bb1119b4d7 + "@types/bn.js": ^5.1.1 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-utils: 1.10.0 + checksum: 7a0c24686a128dc08e4d532866feaab28f4d59d95c89a00779e37e956116e90fac27efca0d4911b845739f2fd54cfa1f455c5cdf7e88c27d6e553d5bff86f381 languageName: node linkType: hard -"web3-eth-contract@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-contract@npm:1.5.3" +"web3-eth-contract@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-contract@npm:1.7.4" dependencies: - "@types/bn.js": ^4.11.5 - web3-core: 1.5.3 - web3-core-helpers: 1.5.3 - web3-core-method: 1.5.3 - web3-core-promievent: 1.5.3 - web3-core-subscriptions: 1.5.3 - web3-eth-abi: 1.5.3 - web3-utils: 1.5.3 - checksum: 66403f6f8d31dcb1a7c254f8ad59643cc9706761639a5c03118a7dcecb57df34ce01fd097130130ff73de45aa6918fb9033fb286217311a87d1e9b6c082525f7 + "@types/bn.js": ^5.1.0 + web3-core: 1.7.4 + web3-core-helpers: 1.7.4 + web3-core-method: 1.7.4 + web3-core-promievent: 1.7.4 + web3-core-subscriptions: 1.7.4 + web3-eth-abi: 1.7.4 + web3-utils: 1.7.4 + checksum: bc420fd3e3fc571118774dbf2da82ca374be70595e85e3b515d8943a18bbd18ec1e945b2c872b1064ed593e8cc608e9168f227a25deb2dbf14779c93f6cf6329 languageName: node linkType: hard -"web3-eth-ens@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-ens@npm:1.2.11" +"web3-eth-ens@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-ens@npm:1.10.0" dependencies: content-hash: ^2.5.2 eth-ens-namehash: 2.0.8 - underscore: 1.9.1 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-promievent: 1.2.11 - web3-eth-abi: 1.2.11 - web3-eth-contract: 1.2.11 - web3-utils: 1.2.11 - checksum: 987999713c5c79f23a67ad244813212e9582566f6a7665312f887ce0eda77d91b85d3c0df21af14ef6ab6e970626d5d02129a2df3a8c257151f9540d6968a748 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-contract: 1.10.0 + web3-utils: 1.10.0 + checksum: 31c1c6c4303ab6a0036362d5bbc5c55c173cc12823a9ccea8df6609e11ae49374944a15c7810f4f425b65ab2f5062960ebb8efe55cdc22aa3232eca2607a0922 languageName: node linkType: hard -"web3-eth-ens@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-ens@npm:1.5.3" +"web3-eth-ens@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-ens@npm:1.7.4" dependencies: content-hash: ^2.5.2 eth-ens-namehash: 2.0.8 - web3-core: 1.5.3 - web3-core-helpers: 1.5.3 - web3-core-promievent: 1.5.3 - web3-eth-abi: 1.5.3 - web3-eth-contract: 1.5.3 - web3-utils: 1.5.3 - checksum: a54e973efff6e3bcd5d035c1f73301d09afa2df57ae756ca4025995f31d6b9815df900c879a195f47647545f8c28b878dfb455c90e0058e5172ceee492124c66 + web3-core: 1.7.4 + web3-core-helpers: 1.7.4 + web3-core-promievent: 1.7.4 + web3-eth-abi: 1.7.4 + web3-eth-contract: 1.7.4 + web3-utils: 1.7.4 + checksum: d4352098ceb2ab6fda24789dc8377fcb13973fbcbc597b40365d6e3d3b8a2b74512cca6aa3710fa959af654fd989f40467ea6fa16e0d8c07421bba8bf090513b languageName: node linkType: hard -"web3-eth-iban@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-iban@npm:1.2.11" +"web3-eth-iban@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-iban@npm:1.10.0" dependencies: - bn.js: ^4.11.9 - web3-utils: 1.2.11 - checksum: 1c28b3ad2cad2af0a76b051fe2c05ed933476eaa99f2c245862f66d4e3d56e60ad26cf55120513f78648ab1ff2b8a6b751e63448cdb01b53b542334bf148286f + bn.js: ^5.2.1 + web3-utils: 1.10.0 + checksum: ca0921f0a232a343a538f6376e55ef3e29e952fba613ecda09dde82149e8088581d8f93da2ed2d8b7e008abdf6610eecc0f4f25efba0ecf412156fd70e9869c0 languageName: node linkType: hard -"web3-eth-iban@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-iban@npm:1.5.3" +"web3-eth-iban@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-iban@npm:1.7.4" dependencies: - bn.js: ^4.11.9 - web3-utils: 1.5.3 - checksum: ce14813b4cf0330a870e4339f92f11a8456dfdc222c983cc9bbc7a5363c2ce8e8f453f553664e97d55e73c63e51e067e324ba31f900d008df5ef4735951975b9 + bn.js: ^5.2.1 + web3-utils: 1.7.4 + checksum: 81a3c39baed3ff6efa034fe4f2a2f2932213cffa69084c45eb9b7ea2e4c7b902577f9c220ef4d1bbaa2907a5a436f3d723363af13edac62ac5312ba8c7c123b1 languageName: node linkType: hard -"web3-eth-personal@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-personal@npm:1.2.11" +"web3-eth-personal@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth-personal@npm:1.10.0" dependencies: "@types/node": ^12.12.6 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-net: 1.2.11 - web3-utils: 1.2.11 - checksum: a754a16aaed1e97baf963f594b69c83bc4c1cf3f5b181b18720ce292583b4a1b70c7a5c22433679c3e66166773bb43731535d085db3bcfc72af48290553f5122 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-net: 1.10.0 + web3-utils: 1.10.0 + checksum: e6c1f540d763e691d81042ec4d0a27b95345bd3ae338b8dffa36bb1a34ae34ec0193c3f0a9ff324fca2918de0d66b022750ee007cf2c3a65241028e852195356 languageName: node linkType: hard -"web3-eth-personal@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth-personal@npm:1.5.3" +"web3-eth-personal@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth-personal@npm:1.7.4" dependencies: "@types/node": ^12.12.6 - web3-core: 1.5.3 - web3-core-helpers: 1.5.3 - web3-core-method: 1.5.3 - web3-net: 1.5.3 - web3-utils: 1.5.3 - checksum: 0d3fb453f43251478949ac253c3ecf6c7d145e5310ee790e4e2b7ae5a69e63cc4cbb34be39ddd9a05d2b7d47b1e41c6b9809ea585eb00deec905dd6f1b13b996 - languageName: node - linkType: hard - -"web3-eth@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth@npm:1.2.11" - dependencies: - underscore: 1.9.1 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-eth-abi: 1.2.11 - web3-eth-accounts: 1.2.11 - web3-eth-contract: 1.2.11 - web3-eth-ens: 1.2.11 - web3-eth-iban: 1.2.11 - web3-eth-personal: 1.2.11 - web3-net: 1.2.11 - web3-utils: 1.2.11 - checksum: eaf361bc59859e7e9078e57f438564f10ea5c0cc00404d3ccf537f3c8d11d963b74f8c3981f4160f1ed2e3c4d9d97a5ff85b33744d5083afde8dfd5dde887034 - languageName: node - linkType: hard - -"web3-eth@npm:1.5.3": - version: 1.5.3 - resolution: "web3-eth@npm:1.5.3" - dependencies: - web3-core: 1.5.3 - web3-core-helpers: 1.5.3 - web3-core-method: 1.5.3 - web3-core-subscriptions: 1.5.3 - web3-eth-abi: 1.5.3 - web3-eth-accounts: 1.5.3 - web3-eth-contract: 1.5.3 - web3-eth-ens: 1.5.3 - web3-eth-iban: 1.5.3 - web3-eth-personal: 1.5.3 - web3-net: 1.5.3 - web3-utils: 1.5.3 - checksum: 2cbf70b2147d37fa3cb2c5802065c56cfacbf537808ab07e698280c8f977613329fc6ae08f351ae2cd9664e89360e4ace6a63f3cf36437226f06ac122427f19c - languageName: node - linkType: hard - -"web3-net@npm:1.2.11": - version: 1.2.11 - resolution: "web3-net@npm:1.2.11" - dependencies: - web3-core: 1.2.11 - web3-core-method: 1.2.11 - web3-utils: 1.2.11 - checksum: 76a99815699674709b869b60bf950d20167b999fe93f7d091b01ce3fd0e3dd9c30ef3519156c04eb01703791c049b19b295e6901dd41d208ea600149961f7ee6 - languageName: node - linkType: hard - -"web3-net@npm:1.5.3": - version: 1.5.3 - resolution: "web3-net@npm:1.5.3" - dependencies: - web3-core: 1.5.3 - web3-core-method: 1.5.3 - web3-utils: 1.5.3 - checksum: 4075ef714dca534ebdf3f8766fbdc6951d22a0b5d4b70f48ab014cec38970646bb4a953d95387ece33e772f3384a1a3da64ceb683607d2560a14fc6fa4efec6d - languageName: node - linkType: hard - -"web3-provider-engine@npm:14.2.1": - version: 14.2.1 - resolution: "web3-provider-engine@npm:14.2.1" - dependencies: - async: ^2.5.0 - backoff: ^2.5.0 - clone: ^2.0.0 - cross-fetch: ^2.1.0 - eth-block-tracker: ^3.0.0 - eth-json-rpc-infura: ^3.1.0 - eth-sig-util: ^1.4.2 - ethereumjs-block: ^1.2.2 - ethereumjs-tx: ^1.2.0 - ethereumjs-util: ^5.1.5 - ethereumjs-vm: ^2.3.4 - json-rpc-error: ^2.0.0 - json-stable-stringify: ^1.0.1 - promise-to-callback: ^1.0.0 - readable-stream: ^2.2.9 - request: ^2.85.0 - semaphore: ^1.0.3 - ws: ^5.1.1 - xhr: ^2.2.0 - xtend: ^4.0.1 - checksum: 45441e22633184bd5f6ea645e20f99c8002b3b64d3e564cd9d0f65bad7f0755ad2cdf9a88fcac9585e908aacea28cc6e80c0939498ee4f4c6c49107d16e011bf + web3-core: 1.7.4 + web3-core-helpers: 1.7.4 + web3-core-method: 1.7.4 + web3-net: 1.7.4 + web3-utils: 1.7.4 + checksum: 9e57f5e7d878d6d7c9ff671062d7dd18ac8fe91467d1880b842e257d9578888daa831dcdc5b798eed3299eb50c3bc6c24db2f630d40e63eed05382370d3f6933 + languageName: node + linkType: hard + +"web3-eth@npm:1.10.0": + version: 1.10.0 + resolution: "web3-eth@npm:1.10.0" + dependencies: + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-accounts: 1.10.0 + web3-eth-contract: 1.10.0 + web3-eth-ens: 1.10.0 + web3-eth-iban: 1.10.0 + web3-eth-personal: 1.10.0 + web3-net: 1.10.0 + web3-utils: 1.10.0 + checksum: d82332a20508667cf69d216530baa541c69fc44046bb7c57f0f85ba09c0eeaab753146388c66d0313673d0ea93be9325817e34cc69d7f4ddf9e01c43a130a2fe + languageName: node + linkType: hard + +"web3-eth@npm:1.7.4": + version: 1.7.4 + resolution: "web3-eth@npm:1.7.4" + dependencies: + web3-core: 1.7.4 + web3-core-helpers: 1.7.4 + web3-core-method: 1.7.4 + web3-core-subscriptions: 1.7.4 + web3-eth-abi: 1.7.4 + web3-eth-accounts: 1.7.4 + web3-eth-contract: 1.7.4 + web3-eth-ens: 1.7.4 + web3-eth-iban: 1.7.4 + web3-eth-personal: 1.7.4 + web3-net: 1.7.4 + web3-utils: 1.7.4 + checksum: 09a016cd76b87edd45f4f3c1e31589da6a9753383f366d205078ba7c5455bf520daf6905e701f66c69afc145ded59af4e388d72b41a9679085963d625adf85ae + languageName: node + linkType: hard + +"web3-net@npm:1.10.0": + version: 1.10.0 + resolution: "web3-net@npm:1.10.0" + dependencies: + web3-core: 1.10.0 + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + checksum: 5183d897ccf539adafa60e8372871f8d8ecf4c46a0943aeee1d5f78a54c8faddfcb2406269ab422e57ef871c29496dba1bffbe044693b559a3bcd7957af87363 languageName: node linkType: hard -"web3-providers-http@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-http@npm:1.2.11" +"web3-net@npm:1.7.4": + version: 1.7.4 + resolution: "web3-net@npm:1.7.4" dependencies: - web3-core-helpers: 1.2.11 - xhr2-cookies: 1.1.0 - checksum: 64760032d68826865de084c31d81be70bebc54cd82138ef724da13b60f7b341d4c0c6716912616b928680756ea6f2cef42be7d16fa9dd143a09ac55701232193 + web3-core: 1.7.4 + web3-core-method: 1.7.4 + web3-utils: 1.7.4 + checksum: 284af4860ad533bf791768ca273b5ab4dd1003d5808e4ead3c5b8e98f1ea7018ee2256032fd16ac2a5b3cabd64a6b361c6a6824949aafdb4ed25571fc7a48327 + languageName: node + linkType: hard + +"web3-providers-http@npm:1.10.0": + version: 1.10.0 + resolution: "web3-providers-http@npm:1.10.0" + dependencies: + abortcontroller-polyfill: ^1.7.3 + cross-fetch: ^3.1.4 + es6-promise: ^4.2.8 + web3-core-helpers: 1.10.0 + checksum: 2fe7c3485626e5e7cb3dd54d05e74f35aec306afe25ae35047e4db1ad75a01a4490d8abf8caa2648400c597d8a252d8cca9950977af2dc242b0ba1f95ab2d2c2 languageName: node linkType: hard -"web3-providers-http@npm:1.5.3": - version: 1.5.3 - resolution: "web3-providers-http@npm:1.5.3" +"web3-providers-http@npm:1.7.4": + version: 1.7.4 + resolution: "web3-providers-http@npm:1.7.4" dependencies: - web3-core-helpers: 1.5.3 + web3-core-helpers: 1.7.4 xhr2-cookies: 1.1.0 - checksum: 0ab32c5b53ad9dbc68dbc09f12a04809da160c93054ed357cb59b905343e3a29172c9112b1600854c6f971c913c5e6dd715560aaced9639c4b51f5d3178b3a9b + checksum: 1235247870e0ad3326ac03cbb8b05730fa864e8aae74b37d9ed96dbfc4b328db57144bc697b33f5551ef8e42a37828f7b61680a863316bcaed09b677afab6b05 languageName: node linkType: hard -"web3-providers-ipc@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-ipc@npm:1.2.11" +"web3-providers-ipc@npm:1.10.0": + version: 1.10.0 + resolution: "web3-providers-ipc@npm:1.10.0" dependencies: - oboe: 2.1.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - checksum: 0fab2f824e4c7f080fee26b76c9c8448eb51abfd285a04f3c9efe92c3b9a8742096804ec02f56bc8297e375ea12f0f2205bb6c0ae376c44c005cdfeec65d0b7e + oboe: 2.1.5 + web3-core-helpers: 1.10.0 + checksum: 103cb6b26ced5c79f76178ae4339e867f09128a8bf5041553966dbc23fb63a4de638a619cadf1f4c4fdff4f352cd63bce54f1fe2eb582fc18cea11ea64067a71 languageName: node linkType: hard -"web3-providers-ipc@npm:1.5.3": - version: 1.5.3 - resolution: "web3-providers-ipc@npm:1.5.3" +"web3-providers-ipc@npm:1.7.4": + version: 1.7.4 + resolution: "web3-providers-ipc@npm:1.7.4" dependencies: oboe: 2.1.5 - web3-core-helpers: 1.5.3 - checksum: 82103eab46cdc3071a30c3c2e564b3c44ceaf70f1780fb048c1156528cdc1d013070163a02bf2b50287b6cfcbe73f3db031fbce537d2fbc50cb8304f9e013117 + web3-core-helpers: 1.7.4 + checksum: e421d788e942cd834e56ecd1face56b987a5d0454602ed78fd94fdb618608d0338f17b23b908d6f4aa3c03032d7807180fd99a07cbf081a5498f7363f95f843f languageName: node linkType: hard -"web3-providers-ws@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-ws@npm:1.2.11" +"web3-providers-ws@npm:1.10.0": + version: 1.10.0 + resolution: "web3-providers-ws@npm:1.10.0" dependencies: eventemitter3: 4.0.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - websocket: ^1.0.31 - checksum: 4a4c591c2bd9724748e9dba124e59048b91239aa7cd435394f2a1d8e7914132920a17e56bc646f46912844fcfbbc38333b7023ebec298af36106ec4814d2ff5c + web3-core-helpers: 1.10.0 + websocket: ^1.0.32 + checksum: 0784334a9ad61c209468335bfed4f656e23b4aab8bddf834de29895fde79309bffe90bfbc65b975c6ea4870ef4521b90469aabeb3124b99d905d1a52ca7bcbe3 languageName: node linkType: hard -"web3-providers-ws@npm:1.5.3": - version: 1.5.3 - resolution: "web3-providers-ws@npm:1.5.3" +"web3-providers-ws@npm:1.7.4": + version: 1.7.4 + resolution: "web3-providers-ws@npm:1.7.4" dependencies: eventemitter3: 4.0.4 - web3-core-helpers: 1.5.3 + web3-core-helpers: 1.7.4 websocket: ^1.0.32 - checksum: 8bc5b650ded0dc716baaee8c5eebdcdbc63b4630c4be3125f0523310cc547f3809735864a2f5a1584f5c3335ffb3e202da3a4ef554c24b98519a1eafb4fd688e + checksum: 3be6fe08853d1370644bae18a55fec702ef4d66089f09ea59206ed923599e365ccbff58d8e1e04743f623c49e259fe45d2862064166b2bcd6ca2943686a90010 languageName: node linkType: hard -"web3-shh@npm:1.2.11": - version: 1.2.11 - resolution: "web3-shh@npm:1.2.11" +"web3-shh@npm:1.10.0": + version: 1.10.0 + resolution: "web3-shh@npm:1.10.0" dependencies: - web3-core: 1.2.11 - web3-core-method: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-net: 1.2.11 - checksum: 64c4a1f03bc3975a2baff9fa6d89a0050a06f179f1ec4d6e28f480b761d0efe56a9a79a5a320821e1dd503e82d44e73dd69b883b9e69d96cced3f979e0a3f4ff + web3-core: 1.10.0 + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-net: 1.10.0 + checksum: 7f4b39ba4b4f6107cb21d00d11821eb68af40d7e59e8fedf385c318954f9d9288bd075014322752e27a1d663a4c40d28bbd46ddb4e336519db9e96c9b0d3821d languageName: node linkType: hard -"web3-shh@npm:1.5.3": - version: 1.5.3 - resolution: "web3-shh@npm:1.5.3" +"web3-shh@npm:1.7.4": + version: 1.7.4 + resolution: "web3-shh@npm:1.7.4" dependencies: - web3-core: 1.5.3 - web3-core-method: 1.5.3 - web3-core-subscriptions: 1.5.3 - web3-net: 1.5.3 - checksum: 5bfdf787a55fa8c2b53f95ed1bc3f91191ebac06d99b2171d4695e83a7fde2afb4b7020bbfd59b27f3dbe44b6a2c54033fa1e62e56c3f567ea5c4c2b9ef7d75f + web3-core: 1.7.4 + web3-core-method: 1.7.4 + web3-core-subscriptions: 1.7.4 + web3-net: 1.7.4 + checksum: debdd0f8fae5ca82c14ed9cc59872a2fa63a800804ac4b355f4f9b1a030e0b1cc298b6fc6367e7d6312f5702bc1b42f419e541beed4289d4d0ff411bde6154cb languageName: node linkType: hard -"web3-utils@npm:1.2.11": - version: 1.2.11 - resolution: "web3-utils@npm:1.2.11" +"web3-utils@npm:1.10.0": + version: 1.10.0 + resolution: "web3-utils@npm:1.10.0" dependencies: - bn.js: ^4.11.9 - eth-lib: 0.2.8 + bn.js: ^5.2.1 ethereum-bloom-filters: ^1.0.6 + ethereumjs-util: ^7.1.0 ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: ^2.1.0 - underscore: 1.9.1 utf8: 3.0.0 - checksum: 1e43235963d5176e447b20b201a66fabccbe7bd4ef8bbb2edfa5ea80a41e8202a8e8f3db128b2a1662855a627a52d100e3207b81a739b937b5b3b4f9114c008f + checksum: c6b7662359c0513b5cbfe02cdcb312ce9152778bb19d94d413d44f74cfaa93b7de97190ab6ba11af25a40855c949d2427dcb751929c6d0f257da268c55a3ba2a languageName: node linkType: hard -"web3-utils@npm:1.5.3": - version: 1.5.3 - resolution: "web3-utils@npm:1.5.3" +"web3-utils@npm:1.7.4": + version: 1.7.4 + resolution: "web3-utils@npm:1.7.4" dependencies: - bn.js: ^4.11.9 - eth-lib: 0.2.8 + bn.js: ^5.2.1 ethereum-bloom-filters: ^1.0.6 + ethereumjs-util: ^7.1.0 ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: ^2.1.0 utf8: 3.0.0 - checksum: 18398478065c8517568fedd68be977ee59d0d39a16c1e0a7746243cf22ff20333b3eaeb644cd6784a629cc7b5c50c3f76ebe8416b36801c052bef36f5ae1d76c + checksum: 5d9256366904e5c24c7198a8791aa76217100aa068650ccc18264ff670d1e8d42d40fcc5ddc66e3c05fac3b480753ccf7e519709e60aefd73d71dd4c4d2adcbb languageName: node linkType: hard -"web3-utils@npm:^1.0.0-beta.31, web3-utils@npm:^1.3.0": - version: 1.7.3 - resolution: "web3-utils@npm:1.7.3" +"web3-utils@npm:^1.3.0": + version: 1.10.3 + resolution: "web3-utils@npm:1.10.3" dependencies: - bn.js: ^4.11.9 + "@ethereumjs/util": ^8.1.0 + bn.js: ^5.2.1 ethereum-bloom-filters: ^1.0.6 - ethereumjs-util: ^7.1.0 + ethereum-cryptography: ^2.1.2 ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: ^2.1.0 utf8: 3.0.0 - checksum: 96fd1d7310f4674ddccbd1f2f8e1ff1817b8869a67a1562ef3ce1130ae50dfec8e64fc4ce9f80855d87fa63fb6dd71b4561e5e1925be5b26f3787b0d4e5f89e7 + checksum: 353226710b2089a8e84f2b97cc765093e3018b850d3a6d60c92fe012829fa15a54ad15d432f1927bc185c6ef5100397a32fd4a896da5f514817c3f53583df134 languageName: node linkType: hard -"web3@npm:1.2.11": - version: 1.2.11 - resolution: "web3@npm:1.2.11" +"web3@npm:1.10.0": + version: 1.10.0 + resolution: "web3@npm:1.10.0" dependencies: - web3-bzz: 1.2.11 - web3-core: 1.2.11 - web3-eth: 1.2.11 - web3-eth-personal: 1.2.11 - web3-net: 1.2.11 - web3-shh: 1.2.11 - web3-utils: 1.2.11 - checksum: c4fa6ddaddc2de31c561590eb3703e9446c0a9bd87155f536fd72c3c22337056bbd045baf36fec6152e58ae67e552fffad29e794030cd87634becb99a079e91f + web3-bzz: 1.10.0 + web3-core: 1.10.0 + web3-eth: 1.10.0 + web3-eth-personal: 1.10.0 + web3-net: 1.10.0 + web3-shh: 1.10.0 + web3-utils: 1.10.0 + checksum: 21cce929b71b8de6844eadd6bcf611dfb91f16f2e8b89bec3f3d18b2e2548b4a2a629886962935cc15fac0ce74c9a00d9ca6b53f4be6a81bd68d17689eb134a9 languageName: node linkType: hard -"web3@npm:1.5.3": - version: 1.5.3 - resolution: "web3@npm:1.5.3" +"web3@npm:1.7.4": + version: 1.7.4 + resolution: "web3@npm:1.7.4" dependencies: - web3-bzz: 1.5.3 - web3-core: 1.5.3 - web3-eth: 1.5.3 - web3-eth-personal: 1.5.3 - web3-net: 1.5.3 - web3-shh: 1.5.3 - web3-utils: 1.5.3 - checksum: ec5380536e85aedcc90be5a0bfb3293885d9c7f1684a92fd0c0a9a863002581ac26630e9c015a7b2c79406b44e82d87ee920a27694192ca7c53d95be58ac6e7b + web3-bzz: 1.7.4 + web3-core: 1.7.4 + web3-eth: 1.7.4 + web3-eth-personal: 1.7.4 + web3-net: 1.7.4 + web3-shh: 1.7.4 + web3-utils: 1.7.4 + checksum: 1597b099e1694a96cc7683e954800049fa109499eae45bd6f44f48dd868dcc92213d1fd6f651c6af13331b77e00f2a8d21ff6a113b703728c45eb42b99541d7c languageName: node linkType: hard @@ -13685,21 +12507,7 @@ __metadata: languageName: node linkType: hard -"websocket@npm:1.0.32": - version: 1.0.32 - resolution: "websocket@npm:1.0.32" - dependencies: - bufferutil: ^4.0.1 - debug: ^2.2.0 - es5-ext: ^0.10.50 - typedarray-to-buffer: ^3.1.5 - utf-8-validate: ^5.0.2 - yaeti: ^0.0.6 - checksum: a29777a1942bf802f955782c7cf948797d19731a911b81adb957873e74b1d5356c621f217a972b075ecf04417a76897ea98dbfc19394007c4cf5e97cd4d494ac - languageName: node - linkType: hard - -"websocket@npm:^1.0.31, websocket@npm:^1.0.32": +"websocket@npm:^1.0.32": version: 1.0.34 resolution: "websocket@npm:1.0.34" dependencies: @@ -13713,13 +12521,6 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:^2.0.4": - version: 2.0.4 - resolution: "whatwg-fetch@npm:2.0.4" - checksum: de7c65a68d7d62e2f144a6b30293370b3ad82b65ebcd68f2ac8e8bbe7ede90febd98ba9486b78c1cbc950e0e8838fa5c2727f939899ab3fc7b71a04be52d33a5 - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -13743,35 +12544,37 @@ __metadata: languageName: node linkType: hard -"which-module@npm:^1.0.0": - version: 1.0.0 - resolution: "which-module@npm:1.0.0" - checksum: 98434f7deb36350cb543c1f15612188541737e1f12d39b23b1c371dff5cf4aa4746210f2bdec202d5fe9da8682adaf8e3f7c44c520687d30948cfc59d5534edb +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be languageName: node linkType: hard -"which-module@npm:^2.0.0": +"which-pm@npm:2.0.0": version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c + resolution: "which-pm@npm:2.0.0" + dependencies: + load-yaml-file: ^0.2.0 + path-exists: ^4.0.0 + checksum: e556635eaf237b3a101043a21c2890af045db40eac4df3575161d4fb834c2aa65456f81c60d8ea4db2d51fe5ac549d989eeabd17278767c2e4179361338ac5ce languageName: node linkType: hard -"which-typed-array@npm:^1.1.2": - version: 1.1.7 - resolution: "which-typed-array@npm:1.1.7" +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.2": + version: 1.1.13 + resolution: "which-typed-array@npm:1.1.13" dependencies: available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-abstract: ^1.18.5 - foreach: ^2.0.5 + call-bind: ^1.0.4 + for-each: ^0.3.3 + gopd: ^1.0.1 has-tostringtag: ^1.0.0 - is-typed-array: ^1.1.7 - checksum: 147837cf5866e36b6b2e427731709e02f79f1578477cbde68ed773a5307520a6cb6836c73c79c30690a473266ee59010b83b6d9b25d8d677a40ff77fb37a8a84 + checksum: 3828a0d5d72c800e369d447e54c7620742a4cc0c9baf1b5e8c17e9b6ff90d8d861a3a6dd4800f1953dbf80e5e5cec954a289e5b4a223e3bee4aeb1f8c5f33309 languageName: node linkType: hard -"which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": +"which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: @@ -13782,7 +12585,7 @@ __metadata: languageName: node linkType: hard -"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -13793,37 +12596,21 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:1.1.3": - version: 1.1.3 - resolution: "wide-align@npm:1.1.3" - dependencies: - string-width: ^1.0.2 || 2 - checksum: d09c8012652a9e6cab3e82338d1874a4d7db2ad1bd19ab43eb744acf0b9b5632ec406bdbbbb970a8f4771a7d5ef49824d038ba70aa884e7723f5b090ab87134d - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"window-size@npm:^0.2.0": - version: 0.2.0 - resolution: "window-size@npm:0.2.0" + isexe: ^3.1.1 bin: - window-size: cli.js - checksum: a85e2acf156cfa194301294809867bdadd8a48ee5d972d9fa8e3e1b3420a1d0201b13ac8eb0348a0d14bbf2c3316565b6a749749c2384c5d286caf8a064c4f90 + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f +"word-wrap@npm:~1.2.3": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard @@ -13844,42 +12631,43 @@ __metadata: languageName: node linkType: hard -"workerpool@npm:6.2.0": - version: 6.2.0 - resolution: "workerpool@npm:6.2.0" - checksum: 3493b4f0ef979a23d2c1583d7ef85f62fc9463cc02f82829d3e7e663b517f8ae9707da0249b382e46ac58986deb0ca2232ee1081713741211bda9254b429c9bb +"workerpool@npm:6.2.1": + version: 6.2.1 + resolution: "workerpool@npm:6.2.1" + checksum: c2c6eebbc5225f10f758d599a5c016fa04798bcc44e4c1dffb34050cd361d7be2e97891aa44419e7afe647b1f767b1dc0b85a5e046c409d890163f655028b09d languageName: node linkType: hard -"wrap-ansi@npm:^2.0.0": - version: 2.1.0 - resolution: "wrap-ansi@npm:2.1.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3 + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard -"wrap-ansi@npm:^5.1.0": - version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0" +"wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" dependencies: - ansi-styles: ^3.2.0 - string-width: ^3.0.0 - strip-ansi: ^5.0.0 - checksum: 9b48c862220e541eb0daa22661b38b947973fc57054e91be5b0f2dcc77741a6875ccab4ebe970a394b4682c8dfc17e888266a105fb8b0a9b23c19245e781ceae + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 languageName: node linkType: hard @@ -13916,18 +12704,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^5.1.1": - version: 5.2.3 - resolution: "ws@npm:5.2.3" - dependencies: - async-limiter: ~1.0.0 - checksum: bdb2223a40c2c68cf91b25a6c9b8c67d5275378ec6187f343314d3df7530e55b77cb9fe79fb1c6a9758389ac5aefc569d24236924b5c65c5dbbaff409ef739fc - languageName: node - linkType: hard - "ws@npm:^7.4.6": - version: 7.5.7 - resolution: "ws@npm:7.5.7" + version: 7.5.9 + resolution: "ws@npm:7.5.9" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -13936,7 +12715,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 5c1f669a166fb57560b4e07f201375137fa31d9186afde78b1508926345ce546332f109081574ddc4e38cc474c5406b5fc71c18d71eb75f6e2d2245576976cba + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 languageName: node linkType: hard @@ -13973,7 +12752,7 @@ __metadata: languageName: node linkType: hard -"xhr@npm:^2.0.4, xhr@npm:^2.2.0, xhr@npm:^2.3.3": +"xhr@npm:^2.0.4, xhr@npm:^2.3.3": version: 2.6.0 resolution: "xhr@npm:2.6.0" dependencies: @@ -13992,29 +12771,13 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.0, xtend@npm:~4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a languageName: node linkType: hard -"xtend@npm:~2.1.1": - version: 2.1.2 - resolution: "xtend@npm:2.1.2" - dependencies: - object-keys: ~0.4.0 - checksum: a8b79f31502c163205984eaa2b196051cd2fab0882b49758e30f2f9018255bc6c462e32a090bf3385d1bda04755ad8cc0052a09e049b0038f49eb9b950d9c447 - languageName: node - linkType: hard - -"y18n@npm:^3.2.1": - version: 3.2.2 - resolution: "y18n@npm:3.2.2" - checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -14036,6 +12799,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^2.1.2": + version: 2.1.2 + resolution: "yallist@npm:2.1.2" + checksum: 9ba99409209f485b6fcb970330908a6d41fa1c933f75e08250316cce19383179a6b70a7e0721b89672ebb6199cc377bf3e432f55100da6a7d6e11902b0a642cb + languageName: node + linkType: hard + "yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.1.1": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -14050,16 +12820,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b - languageName: node - linkType: hard - "yargs-parser@npm:20.2.4": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" @@ -14067,13 +12827,13 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^2.4.1": - version: 2.4.1 - resolution: "yargs-parser@npm:2.4.1" +"yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" dependencies: - camelcase: ^3.0.0 - lodash.assign: ^4.0.6 - checksum: f57946a93a9e0986fccbc7999a3fc8179d4693e4551ef0ace3d599c38ec004a3783efb9eed9fa5d738b30db1cfa1d3a07f4dd6ae060cfce6fe61c3ae7b7a347b + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 languageName: node linkType: hard @@ -14084,14 +12844,10 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:1.6.0": - version: 1.6.0 - resolution: "yargs-unparser@npm:1.6.0" - dependencies: - flat: ^4.1.0 - lodash: ^4.17.15 - yargs: ^13.3.0 - checksum: ca662bb94af53d816d47f2162f0a1d135783f09de9fd47645a5cb18dd25532b0b710432b680d2c065ff45de122ba4a96433c41595fa7bfcc08eb12e889db95c1 +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard @@ -14107,24 +12863,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:13.3.2, yargs@npm:^13.3.0": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" - dependencies: - cliui: ^5.0.0 - find-up: ^3.0.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^3.0.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 - languageName: node - linkType: hard - "yargs@npm:16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" @@ -14140,25 +12878,44 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^4.7.1": - version: 4.8.1 - resolution: "yargs@npm:4.8.1" +"yargs@npm:^15.1.0": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" dependencies: - cliui: ^3.2.0 - decamelize: ^1.1.1 - get-caller-file: ^1.0.1 - lodash.assign: ^4.0.3 - os-locale: ^1.4.0 - read-pkg-up: ^1.0.1 + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 require-directory: ^2.1.1 - require-main-filename: ^1.0.1 + require-main-filename: ^2.0.0 set-blocking: ^2.0.0 - string-width: ^1.0.1 - which-module: ^1.0.0 - window-size: ^0.2.0 - y18n: ^3.2.1 - yargs-parser: ^2.4.1 - checksum: 5d0a45dceaf8cff1c6a7164b2c944755a09cced3cb1d585bbc79ffed758ef9f9b54ead0879e3dacfc696ccd15fec9e6e29183c24517d7f578b47cd0614a3851d + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.7.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 languageName: node linkType: hard @@ -14180,18 +12937,19 @@ __metadata: version: 0.0.0-use.local resolution: "zetachain@workspace:." dependencies: + "@changesets/cli": ^2.23.1 + "@nomicfoundation/hardhat-verify": 2.0.3 "@nomiclabs/hardhat-ethers": ^2.0.5 - "@nomiclabs/hardhat-etherscan": 3.0.3 "@nomiclabs/hardhat-waffle": ^2.0.3 "@typechain/ethers-v5": ^10.0.0 "@typechain/hardhat": ^6.0.0 "@types/chai": ^4.3.1 - "@types/mocha": ^9.1.1 + "@types/inquirer": ^8.2.1 + "@types/mocha": ^10.0.1 "@types/node": ^17.0.25 "@typescript-eslint/eslint-plugin": ^5.20.0 "@typescript-eslint/parser": ^5.20.0 chai: ^4.3.6 - chai-bignumber: ^3.0.0 dotenv: ^16.0.0 eslint: ^8.13.0 eslint-config-prettier: ^8.5.0 @@ -14202,12 +12960,17 @@ __metadata: eslint-plugin-prettier: ^4.0.0 eslint-plugin-promise: ^6.0.0 eslint-plugin-simple-import-sort: 7.0.0 - ethereum-waffle: ^3.4.4 + eslint-plugin-sort-keys-fix: 1.1.2 + eslint-plugin-typescript-sort-keys: 2.1.0 + ethereum-waffle: ^4.0.9 ethereumjs-utils: ^5.2.5 ethers: 5.6.8 - hardhat: 2.9.7 - mocha: ^9.2.2 - ts-mocha: ^9.0.2 + hardhat: 2.12.6 + inquirer: ^8.2.4 + mocha: ^10.2.0 + solc: 0.8.7 + ts-mocha: ^10.0.0 + ts-node: 10.8.1 typechain: ^8.0.0 typescript: ^4.6.3 languageName: unknown