diff --git a/.gitignore b/.gitignore index 26988819..74758d38 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ build/contracts # buidler artifacts cache +typechain \ No newline at end of file diff --git a/hardhat.config.js b/hardhat.config.js deleted file mode 100644 index 7c82bc76..00000000 --- a/hardhat.config.js +++ /dev/null @@ -1,100 +0,0 @@ -require("@nomiclabs/hardhat-waffle"); -require("@nomiclabs/hardhat-ethers"); -require("@tenderly/hardhat-tenderly"); -require("@nomiclabs/hardhat-etherscan"); -require("@nomiclabs/hardhat-web3"); -require("hardhat-deploy"); -require("hardhat-deploy-ethers"); -require("dotenv").config(); - -const { utils } = require("ethers"); - -const PRIVATE_KEY = process.env.PRIVATE_KEY; -const ALCHEMY_ID = process.env.ALCHEMY_ID; -const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY; - -if (!process.env.ALCHEMY_ID) { - throw new Error("ENV Variable ALCHEMY_ID not set!"); -} - -/** - * @type import('hardhat/config').HardhatUserConfig - */ -module.exports = { - solidity: { - compilers: [ - { - version: "0.7.6", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - }, - }, - { - version: "0.6.0", - }, - { - version: "0.6.2", - }, - { - version: "0.6.5", - }, - ], - }, - networks: { - kovan: { - url: `https://eth-kovan.alchemyapi.io/v2/${ALCHEMY_ID}`, - accounts: [`0x${PRIVATE_KEY}`], - }, - mainnet: { - url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, - accounts: [`0x${PRIVATE_KEY}`], - timeout: 150000, - gasPrice: parseInt(utils.parseUnits("30", "gwei")), - }, - rinkeby: { - url: `https://eth-rinkeby.alchemyapi.io/v2/${ALCHEMY_ID}`, - accounts: [`0x${PRIVATE_KEY}`], - timeout: 150000, - }, - hardhat: { - forking: { - url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, - blockNumber: 12696000, - }, - blockGasLimit: 12000000, - }, - matic: { - url: "https://polygon-rpc.com/", - accounts: [`0x${PRIVATE_KEY}`], - timeout: 150000, - gasPrice: parseInt(utils.parseUnits("50", "gwei")), - }, - arbitrum: { - chainId: 42161, - url: `https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_ID}`, - accounts: [`0x${PRIVATE_KEY}`], - timeout: 150000, - gasPrice: parseInt(utils.parseUnits("2", "gwei")), - }, - avax: { - url: "https://api.avax.network/ext/bc/C/rpc", - chainId: 43114, - accounts: [`0x${PRIVATE_KEY}`], - timeout: 150000, - gasPrice: parseInt(utils.parseUnits("225", "gwei")), - }, - }, - etherscan: { - apiKey: ETHERSCAN_API_KEY, - }, - tenderly: { - project: process.env.TENDERLY_PROJECT, - username: process.env.TENDERLY_USERNAME, - }, - mocha: { - timeout: 100 * 1000, - }, -}; diff --git a/hardhat.config.ts b/hardhat.config.ts new file mode 100644 index 00000000..1c102759 --- /dev/null +++ b/hardhat.config.ts @@ -0,0 +1,130 @@ +import "@nomiclabs/hardhat-waffle"; +import "@nomiclabs/hardhat-ethers"; +import "@tenderly/hardhat-tenderly"; +import "@nomiclabs/hardhat-etherscan"; +import "@nomiclabs/hardhat-web3"; +import "hardhat-deploy"; +import "hardhat-deploy-ethers"; +import "@typechain/hardhat"; + +import { resolve } from "path"; +import { config as dotenvConfig } from "dotenv"; +import { HardhatUserConfig } from "hardhat/config"; +import { NetworkUserConfig } from "hardhat/types"; +import { utils } from "ethers"; +import Web3 from "web3"; + +dotenvConfig({ path: resolve(__dirname, "./.env") }); + +const chainIds = { + ganache: 1337, + hardhat: 31337, + mainnet: 1, + avalanche: 43114, + polygon: 137, + arbitrum: 42161, +}; + +const alchemyApiKey = process.env.ALCHEMY_API_KEY; +if (!alchemyApiKey) { + throw new Error("Please set your ALCHEMY_API_KEY in a .env file"); +} + +const PRIVATE_KEY = process.env.PRIVATE_KEY; +const ETHERSCAN_API = process.env.ETHERSCAN_API_KEY; +const POLYGONSCAN_API = process.env.POLYGON_API_KEY; +const ARBISCAN_API = process.env.ARBISCAN_API_KEY; +const SNOWTRACE_API = process.env.SNOWTRACE_API_KEY; +const mnemonic = + process.env.MNEMONIC ?? + "test test test test test test test test test test test junk"; + +function createConfig(network: string) { + return { + url: getNetworkUrl(network), + accounts: !!PRIVATE_KEY ? [`0x${PRIVATE_KEY}`] : { mnemonic }, + }; +} + +function getNetworkUrl(networkType: string) { + //console.log(process.env); + if (networkType === "avalanche") + return "https://api.avax.network/ext/bc/C/rpc"; + else if (networkType === "polygon") + return `https://polygon-mainnet.g.alchemy.com/v2/${alchemyApiKey}`; + else if (networkType === "arbitrum") + return `https://arb-mainnet.g.alchemy.com/v2/${alchemyApiKey}`; + else return `https://eth-mainnet.alchemyapi.io/v2/${alchemyApiKey}`; +} + +function getScanApiKey(networkType: string) { + if (networkType === "avalanche") return SNOWTRACE_API; + else if (networkType === "polygon") return POLYGONSCAN_API; + else if (networkType === "arbitrum") return ARBISCAN_API; + else return ETHERSCAN_API; +} + +/** + * @type import('hardhat/config').HardhatUserConfig + */ +const config: HardhatUserConfig = { + solidity: { + compilers: [ + { + version: "0.7.6", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: "0.6.0", + }, + { + version: "0.6.2", + }, + { + version: "0.6.5", + }, + ], + }, + networks: { + hardhat: { + accounts: { + mnemonic, + }, + chainId: chainIds.hardhat, + forking: { + url: String(getNetworkUrl(String(process.env.networkType))), + }, + }, + mainnet: createConfig("mainnet"), + polygon: createConfig("polygon"), + avalanche: createConfig("avalanche"), + arbitrum: createConfig("arbitrum"), + }, + paths: { + artifacts: "./artifacts", + cache: "./cache", + sources: "./contracts", + tests: "./test", + }, + etherscan: { + apiKey: getScanApiKey(getNetworkUrl(String(process.env.networkType))), + }, + typechain: { + outDir: "typechain", + target: "ethers-v5", + }, + mocha: { + timeout: 10000 * 1000, // 10,000 seconds + }, + // tenderly: { + // project: process.env.TENDERLY_PROJECT, + // username: process.env.TENDERLY_USERNAME, + // }, +}; + +export default config; diff --git a/package-lock.json b/package-lock.json index 4c82163e..8479fd20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,31 +10,43 @@ "license": "ISC", "dependencies": { "@openzeppelin/contracts": "^3.4.0-solc-0.7", + "@typechain/ethers-v5": "^8.0.5", + "@typechain/hardhat": "^3.0.0", "@uniswap/v3-core": "^1.0.0", - "@uniswap/v3-periphery": "^1.2.1", - "chalk": "^4.1.2", + "@uniswap/v3-periphery": "^1.3.0", + "chalk": "^5.0.0", "dotenv": "^10.0.0", - "hardhat-docgen": "^1.1.2", + "hardhat-docgen": "^1.2.0", + "inquirer": "^8.2.0", "minimist": "^1.2.5", - "solc": "^0.7.0" + "solc": "^0.8.10", + "typechain": "^6.0.5" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.7", + "@nomiclabs/hardhat-ethers": "^2.0.3", + "@nomiclabs/hardhat-etherscan": "^2.1.8", "@nomiclabs/hardhat-waffle": "^2.0.1", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/test-helpers": "^0.5.15", "@studydefi/money-legos": "^2.4.2", - "@tenderly/hardhat-tenderly": "^1.0.12", + "@tenderly/hardhat-tenderly": "^1.0.13", + "@types/chai": "^4.2.22", + "@types/chai-as-promised": "^7.1.4", + "@types/inquirer": "^8.1.3", + "@types/mocha": "^9.0.0", + "@types/node": "^16.11.11", + "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "ethereum-waffle": "^3.4.0", - "ethers": "^5.5.1", - "hardhat": "^2.6.7", - "hardhat-deploy": "^0.9.4", + "ethers": "^5.5.2", + "hardhat": "^2.7.0", + "hardhat-deploy": "^0.9.14", "hardhat-deploy-ethers": "^0.3.0-beta.11", "husky": "^7.0.4", - "solidity-coverage": "0.5.11", - "web3": "^1.5.2" + "solidity-coverage": "0.7.17", + "ts-node": "^10.4.0", + "typescript": "^4.5.2", + "web3": "^1.6.1" } }, "node_modules/@babel/runtime": { @@ -49,6 +61,27 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", @@ -541,6 +574,19 @@ "node": ">=10.0" } }, + "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "dev": true, + "dependencies": { + "ethers": "^5.0.2" + }, + "peerDependencies": { + "ethers": "^5.0.0", + "typechain": "^3.0.0" + } + }, "node_modules/@ethereum-waffle/compiler/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", @@ -606,6 +652,56 @@ "node": ">=8.0.0" } }, + "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "dev": true, + "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" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@ethereum-waffle/ens": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.3.0.tgz", @@ -748,12 +844,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/@ethereumjs/common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.4.0.tgz", - "integrity": "sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", + "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", "dependencies": { "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.0" + "ethereumjs-util": "^7.1.3" } }, "node_modules/@ethereumjs/common/node_modules/@types/bn.js": { @@ -770,15 +866,14 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz", - "integrity": "sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", "rlp": "^2.2.4" }, "engines": { @@ -834,12 +929,12 @@ } }, "node_modules/@ethereumjs/tx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.0.tgz", - "integrity": "sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", + "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", "dependencies": { - "@ethereumjs/common": "^2.4.0", - "ethereumjs-util": "^7.1.0" + "@ethereumjs/common": "^2.6.0", + "ethereumjs-util": "^7.1.3" } }, "node_modules/@ethereumjs/tx/node_modules/@types/bn.js": { @@ -856,15 +951,14 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz", - "integrity": "sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", "rlp": "^2.2.4" }, "engines": { @@ -1049,7 +1143,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1125,7 +1218,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "dev": true, "funding": [ { "type": "individual", @@ -1153,7 +1245,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "dev": true, "funding": [ { "type": "individual", @@ -1231,7 +1322,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1261,7 +1351,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1328,9 +1417,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz", - "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.1.tgz", + "integrity": "sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q==", "funding": [ { "type": "individual", @@ -1349,7 +1438,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "dev": true, "funding": [ { "type": "individual", @@ -1384,10 +1472,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz", - "integrity": "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==", - "dev": true, + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.1.tgz", + "integrity": "sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ==", "funding": [ { "type": "individual", @@ -1424,7 +1511,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1463,7 +1549,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "dev": true, "funding": [ { "type": "individual", @@ -1507,7 +1592,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "dev": true, "funding": [ { "type": "individual", @@ -1577,7 +1661,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "dev": true, "funding": [ { "type": "individual", @@ -1598,7 +1681,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1628,9 +1710,9 @@ } }, "node_modules/@ethersproject/web": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz", - "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", "funding": [ { "type": "individual", @@ -1653,7 +1735,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1940,10 +2021,45 @@ "dev": true, "peer": true }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz", - "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz", + "integrity": "sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag==", "dev": true, "peerDependencies": { "ethers": "^5.0.0", @@ -1951,11 +2067,10 @@ } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.7.tgz", - "integrity": "sha512-9nt9EXubnkd2aTMnQIqKtp80bQFhun88krfB31FN2wB0T54b8YuK0riG2d+EKq/D3t1Kb00oA7oFSFpHLIbLDQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", + "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", "dev": true, - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", @@ -2370,9 +2485,9 @@ } }, "node_modules/@tenderly/hardhat-tenderly": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.12.tgz", - "integrity": "sha512-zx2zVpbBxGWVp+aLgf59sZR5lxdqfq/PjqUhga6+iazukQNu/Y6pLfVnCcF1ggvLsf7gnMjwLe3YEx/GxCAykQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.13.tgz", + "integrity": "sha512-XsrF2QIUh8YmzCcWHmPnSNQjZNBQkyrHER8bcrWsFIgL7ub49hmPbpGVB2Isb6gUV/IGBpBm7R69jpmoTvJ17g==", "dev": true, "dependencies": { "axios": "^0.21.1", @@ -2998,18 +3113,6 @@ "highlightjs-solidity": "^2.0.1" } }, - "node_modules/@truffle/debug-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@truffle/debug-utils/node_modules/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -3030,21 +3133,6 @@ "node": ">=4" } }, - "node_modules/@truffle/debug-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@truffle/debug-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/@truffle/debug-utils/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3508,6 +3596,370 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "node_modules/@truffle/provider": { + "version": "0.2.42", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.42.tgz", + "integrity": "sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg==", + "dev": true, + "dependencies": { + "@truffle/error": "^0.0.14", + "@truffle/interface-adapter": "^0.5.8", + "web3": "1.5.3" + } + }, + "node_modules/@truffle/provider/node_modules/@types/node": { + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", + "dev": true + }, + "node_modules/@truffle/provider/node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/@truffle/provider/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/@truffle/provider/node_modules/ethereumjs-util": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@truffle/provider/node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/@truffle/provider/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@truffle/provider/node_modules/web3": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.5.3.tgz", + "integrity": "sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w==", + "dev": true, + "hasInstallScript": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-bzz": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.5.3.tgz", + "integrity": "sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.5.3.tgz", + "integrity": "sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "@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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-core-method": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.5.3.tgz", + "integrity": "sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-core-requestmanager": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz", + "integrity": "sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-core-subscriptions": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz", + "integrity": "sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.5.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-eth": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.5.3.tgz", + "integrity": "sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-eth-accounts": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz", + "integrity": "sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw==", + "dev": true, + "dependencies": { + "@ethereumjs/common": "^2.3.0", + "@ethereumjs/tx": "^3.2.1", + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-eth-contract": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz", + "integrity": "sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-eth-ens": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz", + "integrity": "sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-eth-personal": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz", + "integrity": "sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-net": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.5.3.tgz", + "integrity": "sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ==", + "dev": true, + "dependencies": { + "web3-core": "1.5.3", + "web3-core-method": "1.5.3", + "web3-utils": "1.5.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-providers-http": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.5.3.tgz", + "integrity": "sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw==", + "dev": true, + "dependencies": { + "web3-core-helpers": "1.5.3", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-providers-ipc": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz", + "integrity": "sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg==", + "dev": true, + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.5.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-providers-ws": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz", + "integrity": "sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg==", + "dev": true, + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.5.3", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-shh": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.5.3.tgz", + "integrity": "sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.5.3", + "web3-core-method": "1.5.3", + "web3-core-subscriptions": "1.5.3", + "web3-net": "1.5.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/provider/node_modules/web3-utils": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz", + "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@trufflesuite/chromafi": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz", @@ -3530,18 +3982,6 @@ "super-split": "^1.1.0" } }, - "node_modules/@trufflesuite/chromafi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@trufflesuite/chromafi/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3556,21 +3996,6 @@ "node": ">=4" } }, - "node_modules/@trufflesuite/chromafi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@trufflesuite/chromafi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/@trufflesuite/chromafi/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3592,17 +4017,99 @@ "node": ">=4" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-8.0.5.tgz", + "integrity": "sha512-ntpj4cS3v4WlDu+hSKSyj9A3o1tKtWC30RX1gobeYymZColeJiUemC1Kgfa0MWGmInm5CKxoHVhEvYVgPOZn1A==", "dependencies": { - "ethers": "^5.0.2" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, "peerDependencies": { - "ethers": "^5.0.0", - "typechain": "^3.0.0" + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^6.0.4", + "typescript": ">=4.0.0" + } + }, + "node_modules/@typechain/ethers-v5/node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-3.0.0.tgz", + "integrity": "sha512-FpnIIXkDXm54XCHI/Z2iOet7h1MrFSvZfuljX9Uzc6FEjEfb01Tuzu8ywe2iquD3g5JXqovgdv+M54L/2Z6jkg==", + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "hardhat": "^2.0.10", + "lodash": "^4.17.15", + "typechain": "^6.0.0" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typechain/hardhat/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@typechain/hardhat/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" } }, "node_modules/@types/abstract-leveldown": { @@ -3629,9 +4136,53 @@ } }, "node_modules/@types/chai": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", - "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", + "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/inquirer": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.1.3.tgz", + "integrity": "sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true }, "node_modules/@types/level-errors": { @@ -3654,6 +4205,12 @@ "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==" }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/mkdirp": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", @@ -3663,10 +4220,16 @@ "@types/node": "*" } }, + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "node_modules/@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==" + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -3703,8 +4266,7 @@ "node_modules/@types/prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "dev": true + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -3748,6 +4310,15 @@ "@types/sinon": "*" } }, + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/underscore": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.2.tgz", @@ -3789,9 +4360,9 @@ } }, "node_modules/@uniswap/v3-periphery": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.2.1.tgz", - "integrity": "sha512-45W8hT8X1j9ZcXa+y3NSVao90hMZtgtoJyDlMOg91wmUGi2idXAiGivOQYdB7+7Lq8Gc6Upv/ggFZknixZrv7g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.3.0.tgz", + "integrity": "sha512-HjHdI5RkjBl8zz3bqHShrbULFoZSrjbbrRHoO2vbzn+WRzTa6xY4PWphZv2Tlcb38YEKfKHp6NPl5hVedac8uw==", "dependencies": { "@openzeppelin/contracts": "3.4.1-solc-0.7-2", "@uniswap/lib": "^4.0.1-alpha", @@ -4090,6 +4661,24 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -4101,8 +4690,7 @@ "node_modules/aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", - "dev": true + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" }, "node_modules/agent-base": { "version": "6.0.2", @@ -4224,18 +4812,6 @@ "super-split": "^1.1.0" } }, - "node_modules/ansi-mark/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ansi-mark/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4250,21 +4826,6 @@ "node": ">=4" } }, - "node_modules/ansi-mark/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ansi-mark/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/ansi-mark/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4295,17 +4856,14 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/antlr4ts": { @@ -4342,6 +4900,12 @@ "readable-stream": "^2.0.6" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4378,7 +4942,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, "dependencies": { "typical": "^2.6.1" }, @@ -4392,6 +4955,15 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -4515,7 +5087,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -4650,8 +5221,7 @@ "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "node_modules/big-integer": { "version": "1.6.36", @@ -4696,6 +5266,29 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/blakejs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", @@ -4876,22 +5469,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, - "node_modules/browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "dev": true, - "dependencies": { - "js-sha3": "^0.6.1", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/browserify-sha3/node_modules/js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=", - "dev": true - }, "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", @@ -5208,15 +5785,11 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz", + "integrity": "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -5248,6 +5821,11 @@ "upper-case-first": "^1.1.0" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -5499,6 +6077,36 @@ "node": ">= 4.0" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, "node_modules/cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -5541,6 +6149,14 @@ "node": ">=6" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -5572,20 +6188,17 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/colors": { "version": "1.4.0", @@ -5617,7 +6230,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, "dependencies": { "array-back": "^2.0.0", "find-replace": "^1.0.3", @@ -5627,6 +6239,14 @@ "command-line-args": "bin/cli.js" } }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -5851,6 +6471,12 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -5945,12 +6571,6 @@ "node": "*" } }, - "node_modules/crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, "node_modules/css-loader": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", @@ -6126,11 +6746,19 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dependencies": { + "clone": "^1.0.2" + } + }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -6250,6 +6878,38 @@ "node": ">=0.10" } }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -6268,6 +6928,27 @@ "randombytes": "^2.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6992,18 +7673,6 @@ "testrpc": "build/cli.node.js" } }, - "node_modules/ethereumjs-testrpc-sc": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", - "integrity": "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.3" - }, - "bin": { - "testrpc-sc": "build/cli.node.js" - } - }, "node_modules/ethereumjs-testrpc/node_modules/acorn": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", @@ -7427,10 +8096,9 @@ } }, "node_modules/ethers": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz", - "integrity": "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==", - "dev": true, + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz", + "integrity": "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw==", "funding": [ { "type": "individual", @@ -7441,7 +8109,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.5.0", "@ethersproject/abstract-provider": "5.5.1", @@ -7458,10 +8125,10 @@ "@ethersproject/json-wallets": "5.5.0", "@ethersproject/keccak256": "5.5.0", "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.0", + "@ethersproject/networks": "5.5.1", "@ethersproject/pbkdf2": "5.5.0", "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.0", + "@ethersproject/providers": "5.5.1", "@ethersproject/random": "5.5.0", "@ethersproject/rlp": "5.5.0", "@ethersproject/sha2": "5.5.0", @@ -7471,7 +8138,7 @@ "@ethersproject/transactions": "5.5.0", "@ethersproject/units": "5.5.0", "@ethersproject/wallet": "5.5.0", - "@ethersproject/web": "5.5.0", + "@ethersproject/web": "5.5.1", "@ethersproject/wordlists": "5.5.0" } }, @@ -7479,7 +8146,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "dev": true, "funding": [ { "type": "individual", @@ -7910,6 +8576,19 @@ "node": ">=0.10.0" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -7994,6 +8673,35 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -8005,11 +8713,34 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -8105,7 +8836,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", - "dev": true, "dependencies": { "array-back": "^1.0.4", "test-value": "^2.1.0" @@ -8118,7 +8848,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, "dependencies": { "typical": "^2.6.0" }, @@ -20038,6 +20767,54 @@ "assert-plus": "^1.0.0" } }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -20086,6 +20863,51 @@ "process": "^0.11.10" } }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -20178,10 +21000,9 @@ } }, "node_modules/hardhat": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.6.7.tgz", - "integrity": "sha512-Mua01f6ZN1feQLktHSH2p5A5LCdA+Wf7+O2lJDH6wClvWPtI2eqKNNY2gxBwYXoQ28GZrT3K6mqQOZeRWAca6Q==", - "license": "SEE LICENSE IN LICENSE", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.7.0.tgz", + "integrity": "sha512-DqweY3KH5gwExoZ8EtsAfioj0Hk0NBXWXT3fMXWkiQNfyYBoZLrqdPNkbJ/E2LD4mZ+BKF7v/1chYR9ZCn2Z+g==", "dependencies": { "@ethereumjs/block": "^3.4.0", "@ethereumjs/blockchain": "^5.4.0", @@ -20228,7 +21049,7 @@ "stacktrace-parser": "^0.1.10", "true-case-path": "^2.2.1", "tsort": "0.0.1", - "uuid": "^3.3.2", + "uuid": "^8.3.2", "ws": "^7.4.6" }, "bin": { @@ -20239,11 +21060,10 @@ } }, "node_modules/hardhat-deploy": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.4.tgz", - "integrity": "sha512-0Zr8R5SAq6oK/gi170yCDqPTvKNPHdlm6wQe3ZQg/uiIDZxofpRM2frQVPUFlgdI2yUXtVcGBiPcC2r2fEockw==", + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.14.tgz", + "integrity": "sha512-mCwXeXdqtrQN8dL1gOnoGUh0z9Jylfsh56UNVZJC0c8AhjlwjLPgGE3pzNmMuyy88pj9OX4qo53X57bW2W7NJQ==", "dev": true, - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.4.0", "@ethersproject/abstract-signer": "^5.4.1", @@ -20284,6 +21104,55 @@ "hardhat": "^2.0.0" } }, + "node_modules/hardhat-deploy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/hardhat-deploy/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/hardhat-deploy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/hardhat-deploy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/hardhat-deploy/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -20329,6 +21198,15 @@ "node": ">=12" } }, + "node_modules/hardhat-deploy/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hardhat-deploy/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -20341,6 +21219,18 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/hardhat-deploy/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/hardhat-deploy/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -20351,9 +21241,9 @@ } }, "node_modules/hardhat-docgen": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.1.2.tgz", - "integrity": "sha512-gN1UyqA4kYDm/rSMRUACT6rsh7Nw5EsKItxxJxctfNFEin1Pb56C3uUftCuffT282829ofDxbrUcREcvL9+d+A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.2.0.tgz", + "integrity": "sha512-HfNxJN+AgmqflAzlSrG3NajrmoVwJRVjRUwvKAwDu8oSToQqj0n8/6P2oUH4y5/r1l4FgDhx2DClAhw4+oDqIA==", "dependencies": { "css-loader": "^2.1.0", "html-webpack-plugin": "^3.2.0", @@ -20364,7 +21254,7 @@ "webpack": "^4.29.5" }, "engines": { - "node": ">=12.10.0" + "node": ">=14.14.0" }, "peerDependencies": { "hardhat": "^2.0.0" @@ -20389,17 +21279,6 @@ "@types/node": "*" } }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/hardhat/node_modules/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -20418,19 +21297,6 @@ "node": ">=4" } }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/hardhat/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", @@ -20526,6 +21392,14 @@ "node": ">=4" } }, + "node_modules/hardhat/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -20546,11 +21420,12 @@ } }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/has-symbol-support-x": { @@ -21004,6 +21879,15 @@ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, + "node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/immediate": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", @@ -21054,9 +21938,153 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true, - "peer": true + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "dependencies": { + "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.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, "node_modules/internal-slot": { "version": "1.0.3", @@ -21345,6 +22373,14 @@ "npm": ">=3" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-lower-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", @@ -21507,6 +22543,17 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-upper-case": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", @@ -21579,94 +22626,6 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "node_modules/istanbul/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "node_modules/istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/isurl": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", @@ -21765,6 +22724,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonschema": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz", + "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -21793,16 +22761,6 @@ "node": ">=10.0.0" } }, - "node_modules/keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "dev": true, - "dependencies": { - "browserify-sha3": "^0.0.4", - "sha3": "^1.2.2" - } - }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -22110,17 +23068,6 @@ "node": ">=8" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/log-symbols/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -22134,19 +23081,6 @@ "node": ">=4" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/log-symbols/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -22229,6 +23163,12 @@ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -22363,6 +23303,15 @@ "source-map": "^0.6.1" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/merkle-patricia-tree": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz", @@ -23026,11 +23975,16 @@ "imul": "^1.0.0" } }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "node_modules/nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "devOptional": true + "optional": true }, "node_modules/nano-base32": { "version": "1.0.1", @@ -23134,6 +24088,15 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/node-environment-flags": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", @@ -23591,6 +24554,28 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, "node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -23636,6 +24621,126 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -23843,18 +24948,6 @@ "npm": ">5" } }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/patch-package/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -23869,21 +24962,6 @@ "node": ">=4" } }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/patch-package/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -24017,18 +25095,6 @@ "node": ">=0.12" } }, - "node_modules/pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=", - "dev": true, - "bin": { - "pegjs": "bin/pegjs" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -24230,17 +25296,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "node_modules/postcss/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -24265,19 +25320,6 @@ "node": ">=4" } }, - "node_modules/postcss/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/postcss/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/postcss/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -24576,6 +25618,26 @@ "node": ">=0.4.x" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -24727,6 +25789,18 @@ "node": ">= 0.10" } }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", @@ -24806,30 +25880,6 @@ "node": ">=0.10" } }, - "node_modules/req-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", - "integrity": "sha1-DXOurpJm5penj3l2AZZ352rPD/8=", - "dev": true, - "dependencies": { - "req-from": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/req-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz", - "integrity": "sha1-v4HaUUeUfTLRO5R9wSpYrUWHNQ4=", - "dev": true, - "dependencies": { - "resolve-from": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -24903,15 +25953,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -24927,6 +25968,18 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -24935,6 +25988,16 @@ "node": ">=0.12" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -24987,6 +26050,37 @@ "rlp": "bin/rlp" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -25045,6 +26139,72 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, "node_modules/schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -25247,16 +26407,6 @@ "sha.js": "bin.js" } }, - "node_modules/sha3": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.6.tgz", - "integrity": "sha512-KgLGmJGrmNB4JWVsAV11Yk6KbvsAiygWJc7t5IebWva/0NukNrjJqhtKhzy3Eiv2AKuGvhZZt7dt1mDo7HkoiQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "nan": "2.13.2" - } - }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -25279,9 +26429,9 @@ } }, "node_modules/shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "dependencies": { "glob": "^7.0.0", @@ -25292,8 +26442,7 @@ "shjs": "bin/shjs" }, "engines": { - "iojs": "*", - "node": ">=0.11.0" + "node": ">=4" } }, "node_modules/side-channel": { @@ -25312,8 +26461,7 @@ "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -25553,19 +26701,13 @@ "node": ">=0.10.0" } }, - "node_modules/sol-explore": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz", - "integrity": "sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI=", - "dev": true - }, "node_modules/solc": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.6.tgz", - "integrity": "sha512-WsR/W7CXwh2VnmZapB4JrsDeLlshoKBz5Pz/zYNulB6LBsOEHI2Zj/GeKLMFcvv57OHiXHvxq5ZOQB+EdqxlxQ==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.10.tgz", + "integrity": "sha512-I/Mcn6J5bEtJqveNLplQm9IRrhemm6v+qkw5S2+wM4x9HItJ1sYdrqVTN3j4DMhFDM3ZbvM0QywVzpPx666PHw==", "dependencies": { "command-exists": "^1.2.8", - "commander": "3.0.2", + "commander": "^8.1.0", "follow-redirects": "^1.12.1", "fs-extra": "^0.30.0", "js-sha3": "0.8.0", @@ -25581,11 +26723,6 @@ "node": ">=8.0.0" } }, - "node_modules/solc/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, "node_modules/solc/node_modules/fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", @@ -25620,341 +26757,135 @@ } }, "node_modules/solidity-coverage": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.5.11.tgz", - "integrity": "sha512-qikdsSi6+9XbfvwA0aI7HUVpF9fIFNqRWTw23M89GMDY+b6Gj0wWU9IngJS0fimoZIAdEp3bfChxvpfVcrUesg==", + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.17.tgz", + "integrity": "sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg==", "dev": true, "dependencies": { + "@solidity-parser/parser": "^0.13.2", + "@truffle/provider": "^0.2.24", + "chalk": "^2.4.2", "death": "^1.1.0", - "ethereumjs-testrpc-sc": "6.1.6", - "istanbul": "^0.4.5", - "keccakjs": "^0.2.1", - "req-cwd": "^1.0.1", - "shelljs": "^0.7.4", - "sol-explore": "^1.6.2", - "solidity-parser-sc": "0.4.11", - "tree-kill": "^1.2.0", - "web3": "^0.18.4" + "detect-port": "^1.3.0", + "fs-extra": "^8.1.0", + "ganache-cli": "^6.12.2", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.0" }, "bin": { - "solidity-coverage": "bin/exec.js" + "solidity-coverage": "plugins/bin.js" } }, - "node_modules/solidity-coverage/node_modules/bignumber.js": { - "version": "2.0.7", - "resolved": "git+ssh://git@github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "integrity": "sha512-k55rLoPK7DNCwjO/+Esh5n3lNF+lKwzfIIak1alqxXhrXsInC69JJKwEjAyCB8+IehSFkObzxzzu9URR+Q4pyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/solidity-coverage/node_modules/utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", - "dev": true - }, - "node_modules/solidity-coverage/node_modules/web3": { - "version": "0.18.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", - "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.13.2.tgz", + "integrity": "sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw==", "dev": true, "dependencies": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xhr2": "*", - "xmlhttprequest": "*" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/solidity-parser-sc": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/solidity-parser-sc/-/solidity-parser-sc-0.4.11.tgz", - "integrity": "sha512-1kV5iC7m3CtMDfmHaVNwz2saSGQVIuF16rIxU417Al38MVCWHMQQ5vT6cmLsNwDe60S74auobWij9vNawSeOyw==", + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "mocha": "^4.1.0", - "pegjs": "^0.10.0", - "yargs": "^4.6.0" - }, - "bin": { - "solidity-parser": "cli.js" - } - }, - "node_modules/solidity-parser-sc/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/solidity-parser-sc/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - } - }, - "node_modules/solidity-parser-sc/node_modules/growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/solidity-parser-sc/node_modules/has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/solidity-parser-sc/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/solidity-parser-sc/node_modules/mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solidity-parser-sc/node_modules/supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "dependencies": { - "has-flag": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, - "node_modules/solidity-parser-sc/node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "node_modules/solidity-parser-sc/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/solidity-parser-sc/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/solidity-parser-sc/node_modules/yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true, - "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", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "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" - } - }, - "node_modules/solidity-parser-sc/node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -26357,14 +27288,15 @@ "dev": true }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, "node_modules/swap-case": { @@ -26502,19 +27434,6 @@ "tar-stream": "^2.1.4" } }, - "node_modules/tar-fs/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/tar-fs/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -26596,7 +27515,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", - "dev": true, "dependencies": { "array-back": "^1.0.3", "typical": "^2.6.0" @@ -26609,7 +27527,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, "dependencies": { "typical": "^2.6.0" }, @@ -26624,6 +27541,11 @@ "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -26775,15 +27697,6 @@ "node": ">=6" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, "node_modules/true-case-path": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", @@ -26815,18 +27728,6 @@ "ts-generator": "dist/cli/run.js" } }, - "node_modules/ts-generator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ts-generator/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -26841,21 +27742,6 @@ "node": ">=4" } }, - "node_modules/ts-generator/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ts-generator/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/ts-generator/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -26889,6 +27775,68 @@ "node": ">=4" } }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.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", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -26978,34 +27926,59 @@ } }, "node_modules/typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-6.0.5.tgz", + "integrity": "sha512-Kr2rATu2Y7Y0wOC/I0zKuyLU8EEUpnuPGkiloZ65ACm4sSLFVF8Tnxn8LEUJSN93dX3RMu2DLF5fwRBOjNB+Gw==", "dependencies": { + "@types/prettier": "^2.1.1", "command-line-args": "^4.0.7", "debug": "^4.1.1", "fs-extra": "^7.0.0", + "glob": "^7.1.6", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-essentials": "^7.0.1" }, "bin": { "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.1.0" } }, "node_modules/typechain/node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/prettier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", + "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } }, "node_modules/typechain/node_modules/ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "peerDependencies": { "typescript": ">=3.7.0" } @@ -27025,9 +27998,9 @@ } }, "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27039,8 +28012,7 @@ "node_modules/typical": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", - "dev": true + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" }, "node_modules/u2f-api": { "version": "0.2.7", @@ -27374,6 +28346,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, "bin": { "uuid": "bin/uuid" } @@ -27708,30 +28681,37 @@ "node": ">=0.10.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web3": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz", - "integrity": "sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.1.tgz", + "integrity": "sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "dependencies": { - "web3-bzz": "1.6.0", - "web3-core": "1.6.0", - "web3-eth": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-shh": "1.6.0", - "web3-utils": "1.6.0" + "web3-bzz": "1.6.1", + "web3-core": "1.6.1", + "web3-eth": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-shh": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-bzz": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.0.tgz", - "integrity": "sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.1.tgz", + "integrity": "sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -27744,24 +28724,24 @@ } }, "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true }, "node_modules/web3-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.0.tgz", - "integrity": "sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.1.tgz", + "integrity": "sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ==", "dev": true, "dependencies": { "@types/bn.js": "^4.11.5", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-requestmanager": "1.6.0", - "web3-utils": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-requestmanager": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -27810,39 +28790,38 @@ } }, "node_modules/web3-core-method": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.0.tgz", - "integrity": "sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.1.tgz", + "integrity": "sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w==", "dev": true, "dependencies": { - "@ethereumjs/common": "^2.4.0", "@ethersproject/transactions": "^5.0.0-beta.135", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-utils": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-method/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-method/node_modules/web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "dependencies": { "eventemitter3": "4.0.4" @@ -27852,13 +28831,13 @@ } }, "node_modules/web3-core-method/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -27877,90 +28856,90 @@ } }, "node_modules/web3-core-requestmanager": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz", - "integrity": "sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz", + "integrity": "sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A==", "dev": true, "dependencies": { "util": "^0.12.0", - "web3-core-helpers": "1.6.0", - "web3-providers-http": "1.6.0", - "web3-providers-ipc": "1.6.0", - "web3-providers-ws": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-providers-http": "1.6.1", + "web3-providers-ipc": "1.6.1", + "web3-providers-ws": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-subscriptions": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz", - "integrity": "sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz", + "integrity": "sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0" + "web3-core-helpers": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true }, "node_modules/web3-core/node_modules/bignumber.js": { @@ -27973,49 +28952,49 @@ } }, "node_modules/web3-core/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.0.tgz", - "integrity": "sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.1.tgz", + "integrity": "sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ==", "dev": true, "dependencies": { - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-accounts": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-eth-ens": "1.6.0", - "web3-eth-iban": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-accounts": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-eth-ens": "1.6.1", + "web3-eth-iban": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28081,22 +29060,22 @@ } }, "node_modules/web3-eth-accounts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz", - "integrity": "sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz", + "integrity": "sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w==", "dev": true, "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.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28155,45 +29134,45 @@ } }, "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-contract": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz", - "integrity": "sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz", + "integrity": "sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ==", "dev": true, "dependencies": { "@types/bn.js": "^4.11.5", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28217,22 +29196,22 @@ } }, "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "dependencies": { "eventemitter3": "4.0.4" @@ -28242,45 +29221,45 @@ } }, "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "dependencies": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-ens": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz", - "integrity": "sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz", + "integrity": "sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ==", "dev": true, "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28304,22 +29283,22 @@ } }, "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "dependencies": { "eventemitter3": "4.0.4" @@ -28329,26 +29308,26 @@ } }, "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "dependencies": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28397,49 +29376,49 @@ } }, "node_modules/web3-eth-personal": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz", - "integrity": "sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz", + "integrity": "sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw==", "dev": true, "dependencies": { "@types/node": "^12.12.6", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true }, "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" @@ -28463,65 +29442,65 @@ } }, "node_modules/web3-eth/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth/node_modules/web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "dependencies": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-net": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.0.tgz", - "integrity": "sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.1.tgz", + "integrity": "sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw==", "dev": true, "dependencies": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-http": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.0.tgz", - "integrity": "sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.1.tgz", + "integrity": "sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A==", "dev": true, "dependencies": { - "web3-core-helpers": "1.6.0", + "web3-core-helpers": "1.6.1", "xhr2-cookies": "1.1.0" }, "engines": { @@ -28529,78 +29508,78 @@ } }, "node_modules/web3-providers-http/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-http/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz", - "integrity": "sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz", + "integrity": "sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ==", "dev": true, "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.6.0" + "web3-core-helpers": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz", - "integrity": "sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz", + "integrity": "sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0", + "web3-core-helpers": "1.6.1", "websocket": "^1.0.32" }, "engines": { @@ -28608,51 +29587,51 @@ } }, "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "dependencies": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "dependencies": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-shh": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.0.tgz", - "integrity": "sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.1.tgz", + "integrity": "sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A==", "dev": true, "hasInstallScript": true, "dependencies": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-net": "1.6.0" + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-net": "1.6.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.0.tgz", - "integrity": "sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.1.tgz", + "integrity": "sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w==", "dev": true, "dependencies": { "bn.js": "^4.11.9", @@ -28910,30 +29889,6 @@ "node": ">=6" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -29019,15 +29974,6 @@ "xhr-request": "^1.1.0" } }, - "node_modules/xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/xhr2-cookies": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", @@ -29207,6 +30153,15 @@ "engines": { "node": ">=6" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } } }, "dependencies": { @@ -29219,6 +30174,21 @@ "regenerator-runtime": "^0.13.4" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@ensdomains/address-encoder": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", @@ -29653,6 +30623,15 @@ "typechain": "^3.0.0" }, "dependencies": { + "@typechain/ethers-v5": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "dev": true, + "requires": { + "ethers": "^5.0.2" + } + }, "commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", @@ -29708,6 +30687,50 @@ "semver": "^5.5.0", "tmp": "0.0.33" } + }, + "ts-essentials": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "dev": true, + "requires": {} + }, + "typechain": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } } } }, @@ -29842,12 +30865,12 @@ } }, "@ethereumjs/common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.4.0.tgz", - "integrity": "sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", + "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", "requires": { "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.0" + "ethereumjs-util": "^7.1.3" }, "dependencies": { "@types/bn.js": { @@ -29864,15 +30887,14 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "ethereumjs-util": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz", - "integrity": "sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", "rlp": "^2.2.4" } } @@ -29926,12 +30948,12 @@ } }, "@ethereumjs/tx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.0.tgz", - "integrity": "sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", + "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", "requires": { - "@ethereumjs/common": "^2.4.0", - "ethereumjs-util": "^7.1.0" + "@ethereumjs/common": "^2.6.0", + "ethereumjs-util": "^7.1.3" }, "dependencies": { "@types/bn.js": { @@ -29948,15 +30970,14 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" }, "ethereumjs-util": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz", - "integrity": "sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", "rlp": "^2.2.4" } } @@ -30089,7 +31110,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/properties": "^5.5.0" @@ -30125,7 +31145,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "dev": true, "requires": { "@ethersproject/abi": "^5.5.0", "@ethersproject/abstract-provider": "^5.5.0", @@ -30143,7 +31162,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "dev": true, "requires": { "@ethersproject/address": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", @@ -30191,7 +31209,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "dev": true, "requires": { "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/basex": "^5.5.0", @@ -30211,7 +31228,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "dev": true, "requires": { "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/address": "^5.5.0", @@ -30250,9 +31266,9 @@ "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" }, "@ethersproject/networks": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz", - "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.1.tgz", + "integrity": "sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q==", "requires": { "@ethersproject/logger": "^5.5.0" } @@ -30261,7 +31277,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/sha2": "^5.5.0" @@ -30276,10 +31291,9 @@ } }, "@ethersproject/providers": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz", - "integrity": "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==", - "dev": true, + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.1.tgz", + "integrity": "sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ==", "requires": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", @@ -30306,7 +31320,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0" @@ -30325,7 +31338,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", @@ -30349,7 +31361,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -30389,7 +31400,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/constants": "^5.5.0", @@ -30400,7 +31410,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "dev": true, "requires": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", @@ -30420,9 +31429,9 @@ } }, "@ethersproject/web": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz", - "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", "requires": { "@ethersproject/base64": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -30435,7 +31444,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/hash": "^5.5.0", @@ -30683,17 +31691,43 @@ "dev": true, "peer": true }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@nomiclabs/hardhat-ethers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz", - "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz", + "integrity": "sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag==", "dev": true, "requires": {} }, "@nomiclabs/hardhat-etherscan": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.7.tgz", - "integrity": "sha512-9nt9EXubnkd2aTMnQIqKtp80bQFhun88krfB31FN2wB0T54b8YuK0riG2d+EKq/D3t1Kb00oA7oFSFpHLIbLDQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", + "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", @@ -31055,9 +32089,9 @@ } }, "@tenderly/hardhat-tenderly": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.12.tgz", - "integrity": "sha512-zx2zVpbBxGWVp+aLgf59sZR5lxdqfq/PjqUhga6+iazukQNu/Y6pLfVnCcF1ggvLsf7gnMjwLe3YEx/GxCAykQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.13.tgz", + "integrity": "sha512-XsrF2QIUh8YmzCcWHmPnSNQjZNBQkyrHER8bcrWsFIgL7ub49hmPbpGVB2Isb6gUV/IGBpBm7R69jpmoTvJ17g==", "dev": true, "requires": { "axios": "^0.21.1", @@ -31610,15 +32644,6 @@ "highlightjs-solidity": "^2.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -31636,21 +32661,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -32055,6 +33065,310 @@ } } }, + "@truffle/provider": { + "version": "0.2.42", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.42.tgz", + "integrity": "sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg==", + "dev": true, + "requires": { + "@truffle/error": "^0.0.14", + "@truffle/interface-adapter": "^0.5.8", + "web3": "1.5.3" + }, + "dependencies": { + "@types/node": { + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "dev": true + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereumjs-util": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", + "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + } + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "web3": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.5.3.tgz", + "integrity": "sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w==", + "dev": true, + "requires": { + "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" + } + }, + "web3-bzz": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.5.3.tgz", + "integrity": "sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + } + }, + "web3-core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.5.3.tgz", + "integrity": "sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.5", + "@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" + } + }, + "web3-core-method": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.5.3.tgz", + "integrity": "sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg==", + "dev": true, + "requires": { + "@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" + } + }, + "web3-core-requestmanager": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz", + "integrity": "sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg==", + "dev": true, + "requires": { + "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" + } + }, + "web3-core-subscriptions": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz", + "integrity": "sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.5.3" + } + }, + "web3-eth": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.5.3.tgz", + "integrity": "sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q==", + "dev": true, + "requires": { + "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" + } + }, + "web3-eth-accounts": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz", + "integrity": "sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.3.0", + "@ethereumjs/tx": "^3.2.1", + "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" + } + }, + "web3-eth-contract": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz", + "integrity": "sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg==", + "dev": true, + "requires": { + "@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" + } + }, + "web3-eth-ens": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz", + "integrity": "sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw==", + "dev": true, + "requires": { + "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" + } + }, + "web3-eth-personal": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz", + "integrity": "sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew==", + "dev": true, + "requires": { + "@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" + } + }, + "web3-net": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.5.3.tgz", + "integrity": "sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ==", + "dev": true, + "requires": { + "web3-core": "1.5.3", + "web3-core-method": "1.5.3", + "web3-utils": "1.5.3" + } + }, + "web3-providers-http": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.5.3.tgz", + "integrity": "sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw==", + "dev": true, + "requires": { + "web3-core-helpers": "1.5.3", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz", + "integrity": "sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg==", + "dev": true, + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.5.3" + } + }, + "web3-providers-ws": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz", + "integrity": "sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.5.3", + "websocket": "^1.0.32" + } + }, + "web3-shh": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.5.3.tgz", + "integrity": "sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q==", + "dev": true, + "requires": { + "web3-core": "1.5.3", + "web3-core-method": "1.5.3", + "web3-core-subscriptions": "1.5.3", + "web3-net": "1.5.3" + } + }, + "web3-utils": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz", + "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + } + } + }, "@trufflesuite/chromafi": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz", @@ -32077,15 +33391,6 @@ "super-split": "^1.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -32097,21 +33402,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -32129,13 +33419,80 @@ } } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-8.0.5.tgz", + "integrity": "sha512-ntpj4cS3v4WlDu+hSKSyj9A3o1tKtWC30RX1gobeYymZColeJiUemC1Kgfa0MWGmInm5CKxoHVhEvYVgPOZn1A==", "requires": { - "ethers": "^5.0.2" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "dependencies": { + "ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "requires": {} + } + } + }, + "@typechain/hardhat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-3.0.0.tgz", + "integrity": "sha512-FpnIIXkDXm54XCHI/Z2iOet7h1MrFSvZfuljX9Uzc6FEjEfb01Tuzu8ywe2iquD3g5JXqovgdv+M54L/2Z6jkg==", + "requires": { + "fs-extra": "^9.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } } }, "@types/abstract-leveldown": { @@ -32161,11 +33518,57 @@ } }, "@types/chai": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", - "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", + "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", "dev": true }, + "@types/chai-as-promised": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/inquirer": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.1.3.tgz", + "integrity": "sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==", + "dev": true, + "requires": { + "@types/through": "*", + "rxjs": "^7.2.0" + }, + "dependencies": { + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, "@types/level-errors": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", @@ -32186,6 +33589,12 @@ "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==" }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/mkdirp": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", @@ -32195,10 +33604,16 @@ "@types/node": "*" } }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==" + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==" }, "@types/node-fetch": { "version": "2.5.12", @@ -32234,8 +33649,7 @@ "@types/prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "dev": true + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==" }, "@types/qs": { "version": "6.9.7", @@ -32279,6 +33693,15 @@ "@types/sinon": "*" } }, + "@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/underscore": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.2.tgz", @@ -32311,9 +33734,9 @@ "integrity": "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA==" }, "@uniswap/v3-periphery": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.2.1.tgz", - "integrity": "sha512-45W8hT8X1j9ZcXa+y3NSVao90hMZtgtoJyDlMOg91wmUGi2idXAiGivOQYdB7+7Lq8Gc6Upv/ggFZknixZrv7g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.3.0.tgz", + "integrity": "sha512-HjHdI5RkjBl8zz3bqHShrbULFoZSrjbbrRHoO2vbzn+WRzTa6xY4PWphZv2Tlcb38YEKfKHp6NPl5hVedac8uw==", "requires": { "@openzeppelin/contracts": "3.4.1-solc-0.7-2", "@uniswap/lib": "^4.0.1-alpha", @@ -32592,6 +34015,18 @@ } } }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -32600,8 +34035,7 @@ "aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", - "dev": true + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" }, "agent-base": { "version": "6.0.2", @@ -32696,15 +34130,6 @@ "super-split": "^1.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -32716,21 +34141,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -32754,11 +34164,11 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "antlr4ts": { @@ -32792,6 +34202,12 @@ "readable-stream": "^2.0.6" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -32819,7 +34235,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, "requires": { "typical": "^2.6.1" } @@ -32830,6 +34245,12 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -32939,8 +34360,7 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "atob": { "version": "2.1.2", @@ -33041,8 +34461,7 @@ "bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "big-integer": { "version": "1.6.36", @@ -33075,6 +34494,28 @@ "file-uri-to-path": "1.0.0" } }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "blakejs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", @@ -33244,24 +34685,6 @@ } } }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "dev": true, - "requires": { - "js-sha3": "^0.6.1", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=", - "dev": true - } - } - }, "browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", @@ -33524,13 +34947,9 @@ "requires": {} }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz", + "integrity": "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==" }, "change-case": { "version": "3.0.2", @@ -33558,6 +34977,11 @@ "upper-case-first": "^1.1.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -33763,6 +35187,24 @@ "source-map": "~0.6.0" } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -33798,6 +35240,11 @@ } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -33823,17 +35270,17 @@ } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.4.0", @@ -33859,13 +35306,17 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, "requires": { "array-back": "^2.0.0", "find-replace": "^1.0.3", "typical": "^2.6.1" } }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -34060,6 +35511,12 @@ "sha.js": "^2.4.8" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -34135,12 +35592,6 @@ "randomfill": "^1.0.3" } }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, "css-loader": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", @@ -34268,11 +35719,19 @@ "peer": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -34367,6 +35826,33 @@ "optional": true, "peer": true }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -34382,6 +35868,23 @@ "randombytes": "^2.0.0" } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -35314,15 +36817,6 @@ } } }, - "ethereumjs-testrpc-sc": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", - "integrity": "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==", - "dev": true, - "requires": { - "source-map-support": "^0.5.3" - } - }, "ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", @@ -35338,10 +36832,9 @@ } }, "ethers": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz", - "integrity": "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==", - "dev": true, + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz", + "integrity": "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw==", "requires": { "@ethersproject/abi": "5.5.0", "@ethersproject/abstract-provider": "5.5.1", @@ -35358,10 +36851,10 @@ "@ethersproject/json-wallets": "5.5.0", "@ethersproject/keccak256": "5.5.0", "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.0", + "@ethersproject/networks": "5.5.1", "@ethersproject/pbkdf2": "5.5.0", "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.0", + "@ethersproject/providers": "5.5.1", "@ethersproject/random": "5.5.0", "@ethersproject/rlp": "5.5.0", "@ethersproject/sha2": "5.5.0", @@ -35371,7 +36864,7 @@ "@ethersproject/transactions": "5.5.0", "@ethersproject/units": "5.5.0", "@ethersproject/wallet": "5.5.0", - "@ethersproject/web": "5.5.0", + "@ethersproject/web": "5.5.1", "@ethersproject/wordlists": "5.5.0" }, "dependencies": { @@ -35379,7 +36872,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "dev": true, "requires": { "@ethersproject/address": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", @@ -35749,6 +37241,16 @@ "is-extendable": "^1.0.1" } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -35813,6 +37315,31 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -35824,11 +37351,28 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -35910,7 +37454,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", - "dev": true, "requires": { "array-back": "^1.0.4", "test-value": "^2.1.0" @@ -35920,7 +37463,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, "requires": { "typical": "^2.6.0" } @@ -45259,6 +46801,44 @@ "assert-plus": "^1.0.0" } }, + "ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -45298,6 +46878,42 @@ "process": "^0.11.10" } }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -45368,9 +46984,9 @@ } }, "hardhat": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.6.7.tgz", - "integrity": "sha512-Mua01f6ZN1feQLktHSH2p5A5LCdA+Wf7+O2lJDH6wClvWPtI2eqKNNY2gxBwYXoQ28GZrT3K6mqQOZeRWAca6Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.7.0.tgz", + "integrity": "sha512-DqweY3KH5gwExoZ8EtsAfioj0Hk0NBXWXT3fMXWkiQNfyYBoZLrqdPNkbJ/E2LD4mZ+BKF7v/1chYR9ZCn2Z+g==", "requires": { "@ethereumjs/block": "^3.4.0", "@ethereumjs/blockchain": "^5.4.0", @@ -45417,7 +47033,7 @@ "stacktrace-parser": "^0.1.10", "true-case-path": "^2.2.1", "tsort": "0.0.1", - "uuid": "^3.3.2", + "uuid": "^8.3.2", "ws": "^7.4.6" }, "dependencies": { @@ -45429,14 +47045,6 @@ "@types/node": "*" } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -45452,19 +47060,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", @@ -45543,13 +47138,18 @@ "requires": { "has-flag": "^3.0.0" } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, "hardhat-deploy": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.4.tgz", - "integrity": "sha512-0Zr8R5SAq6oK/gi170yCDqPTvKNPHdlm6wQe3ZQg/uiIDZxofpRM2frQVPUFlgdI2yUXtVcGBiPcC2r2fEockw==", + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.14.tgz", + "integrity": "sha512-mCwXeXdqtrQN8dL1gOnoGUh0z9Jylfsh56UNVZJC0c8AhjlwjLPgGE3pzNmMuyy88pj9OX4qo53X57bW2W7NJQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.4.0", @@ -45576,6 +47176,40 @@ "qs": "^6.9.4" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -45607,6 +47241,12 @@ "universalify": "^2.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -45617,6 +47257,15 @@ "universalify": "^2.0.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -45633,9 +47282,9 @@ "requires": {} }, "hardhat-docgen": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.1.2.tgz", - "integrity": "sha512-gN1UyqA4kYDm/rSMRUACT6rsh7Nw5EsKItxxJxctfNFEin1Pb56C3uUftCuffT282829ofDxbrUcREcvL9+d+A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.2.0.tgz", + "integrity": "sha512-HfNxJN+AgmqflAzlSrG3NajrmoVwJRVjRUwvKAwDu8oSToQqj0n8/6P2oUH4y5/r1l4FgDhx2DClAhw4+oDqIA==", "requires": { "css-loader": "^2.1.0", "html-webpack-plugin": "^3.2.0", @@ -45668,9 +47317,10 @@ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true }, "has-symbol-support-x": { "version": "1.4.2", @@ -46017,6 +47667,12 @@ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + }, "immediate": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", @@ -46061,9 +47717,119 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true, - "peer": true + "dev": true + }, + "inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "requires": { + "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.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "requires": { + "tslib": "~2.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + } + } }, "internal-slot": { "version": "1.0.3", @@ -46250,6 +48016,11 @@ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, "is-lower-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", @@ -46355,6 +48126,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "is-upper-case": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", @@ -46415,76 +48191,6 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, "isurl": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", @@ -46574,6 +48280,12 @@ "graceful-fs": "^4.1.6" } }, + "jsonschema": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz", + "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", + "dev": true + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -46595,16 +48307,6 @@ "node-gyp-build": "^4.2.0" } }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "dev": true, - "requires": { - "browserify-sha3": "^0.0.4", - "sha3": "^1.2.2" - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -46856,14 +48558,6 @@ "chalk": "^2.4.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -46874,19 +48568,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -46956,6 +48637,12 @@ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -47068,6 +48755,12 @@ "source-map": "^0.6.1" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "merkle-patricia-tree": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz", @@ -47615,11 +49308,16 @@ "imul": "^1.0.0" } }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "devOptional": true + "optional": true }, "nano-base32": { "version": "1.0.1", @@ -47716,6 +49414,15 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "requires": { + "lodash": "^4.17.21" + } + }, "node-environment-flags": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", @@ -48090,6 +49797,21 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } + } + }, "open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -48125,6 +49847,89 @@ "word-wrap": "~1.2.3" } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -48293,15 +50098,6 @@ "tmp": "^0.0.33" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -48313,21 +50109,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -48433,12 +50214,6 @@ "sha.js": "^2.4.8" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=", - "dev": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -48534,14 +50309,6 @@ "supports-color": "^6.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -48562,19 +50329,6 @@ } } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -48861,6 +50615,12 @@ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -48989,6 +50749,15 @@ "resolve": "^1.1.6" } }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "requires": { + "minimatch": "3.0.4" + } + }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", @@ -49052,24 +50821,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "req-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", - "integrity": "sha1-DXOurpJm5penj3l2AZZ352rPD/8=", - "dev": true, - "requires": { - "req-from": "^1.0.1" - } - }, - "req-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz", - "integrity": "sha1-v4HaUUeUfTLRO5R9wSpYrUWHNQ4=", - "dev": true, - "requires": { - "resolve-from": "^2.0.0" - } - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -49129,12 +50880,6 @@ "path-parse": "^1.0.6" } }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -49149,11 +50894,26 @@ "lowercase-keys": "^1.0.0" } }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -49194,6 +50954,20 @@ "bn.js": "^4.11.1" } }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -49235,6 +51009,61 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -49409,15 +51238,6 @@ "safe-buffer": "^5.0.1" } }, - "sha3": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.6.tgz", - "integrity": "sha512-KgLGmJGrmNB4JWVsAV11Yk6KbvsAiygWJc7t5IebWva/0NukNrjJqhtKhzy3Eiv2AKuGvhZZt7dt1mDo7HkoiQ==", - "dev": true, - "requires": { - "nan": "2.13.2" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -49434,9 +51254,9 @@ "dev": true }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { "glob": "^7.0.0", @@ -49457,8 +51277,7 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.1", @@ -49646,19 +51465,13 @@ } } }, - "sol-explore": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz", - "integrity": "sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI=", - "dev": true - }, "solc": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.6.tgz", - "integrity": "sha512-WsR/W7CXwh2VnmZapB4JrsDeLlshoKBz5Pz/zYNulB6LBsOEHI2Zj/GeKLMFcvv57OHiXHvxq5ZOQB+EdqxlxQ==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.10.tgz", + "integrity": "sha512-I/Mcn6J5bEtJqveNLplQm9IRrhemm6v+qkw5S2+wM4x9HItJ1sYdrqVTN3j4DMhFDM3ZbvM0QywVzpPx666PHw==", "requires": { "command-exists": "^1.2.8", - "commander": "3.0.2", + "commander": "^8.1.0", "follow-redirects": "^1.12.1", "fs-extra": "^0.30.0", "js-sha3": "0.8.0", @@ -49668,11 +51481,6 @@ "tmp": "0.0.33" }, "dependencies": { - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", @@ -49706,285 +51514,107 @@ } }, "solidity-coverage": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.5.11.tgz", - "integrity": "sha512-qikdsSi6+9XbfvwA0aI7HUVpF9fIFNqRWTw23M89GMDY+b6Gj0wWU9IngJS0fimoZIAdEp3bfChxvpfVcrUesg==", + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.17.tgz", + "integrity": "sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg==", "dev": true, "requires": { + "@solidity-parser/parser": "^0.13.2", + "@truffle/provider": "^0.2.24", + "chalk": "^2.4.2", "death": "^1.1.0", - "ethereumjs-testrpc-sc": "6.1.6", - "istanbul": "^0.4.5", - "keccakjs": "^0.2.1", - "req-cwd": "^1.0.1", - "shelljs": "^0.7.4", - "sol-explore": "^1.6.2", - "solidity-parser-sc": "0.4.11", - "tree-kill": "^1.2.0", - "web3": "^0.18.4" + "detect-port": "^1.3.0", + "fs-extra": "^8.1.0", + "ganache-cli": "^6.12.2", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.0" }, "dependencies": { - "bignumber.js": { - "version": "git+ssh://git@github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "integrity": "sha512-k55rLoPK7DNCwjO/+Esh5n3lNF+lKwzfIIak1alqxXhrXsInC69JJKwEjAyCB8+IehSFkObzxzzu9URR+Q4pyA==", - "dev": true, - "from": "bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" - }, - "utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", - "dev": true - }, - "web3": { - "version": "0.18.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", - "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", + "@solidity-parser/parser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.13.2.tgz", + "integrity": "sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw==", "dev": true, "requires": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xhr2": "*", - "xmlhttprequest": "*" + "antlr4ts": "^0.5.0-alpha.4" } - } - } - }, - "solidity-parser-sc": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/solidity-parser-sc/-/solidity-parser-sc-0.4.11.tgz", - "integrity": "sha512-1kV5iC7m3CtMDfmHaVNwz2saSGQVIuF16rIxU417Al38MVCWHMQQ5vT6cmLsNwDe60S74auobWij9vNawSeOyw==", - "dev": true, - "requires": { - "mocha": "^4.1.0", - "pegjs": "^0.10.0", - "yargs": "^4.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "ms": "2.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "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" - } - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "yallist": "^4.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "lru-cache": "^6.0.0" } }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true, - "requires": { - "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", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "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" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } } } }, @@ -50329,11 +51959,12 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^1.0.0" } }, "swap-case": { @@ -50455,19 +52086,6 @@ "tar-stream": "^2.1.4" }, "dependencies": { - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -50535,7 +52153,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", - "dev": true, "requires": { "array-back": "^1.0.3", "typical": "^2.6.0" @@ -50545,7 +52162,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, "requires": { "typical": "^2.6.0" } @@ -50558,6 +52174,11 @@ "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -50680,12 +52301,6 @@ } } }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, "true-case-path": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", @@ -50714,15 +52329,6 @@ "ts-essentials": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -50734,21 +52340,6 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -50772,6 +52363,40 @@ } } }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.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", + "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -50843,31 +52468,41 @@ } }, "typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-6.0.5.tgz", + "integrity": "sha512-Kr2rATu2Y7Y0wOC/I0zKuyLU8EEUpnuPGkiloZ65ACm4sSLFVF8Tnxn8LEUJSN93dX3RMu2DLF5fwRBOjNB+Gw==", "requires": { + "@types/prettier": "^2.1.1", "command-line-args": "^4.0.7", "debug": "^4.1.1", "fs-extra": "^7.0.0", + "glob": "^7.1.6", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-essentials": "^7.0.1" }, "dependencies": { "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "prettier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", + "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==" }, "ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "requires": {} } } @@ -50887,15 +52522,14 @@ } }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==" }, "typical": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", - "dev": true + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" }, "u2f-api": { "version": "0.2.7", @@ -51182,7 +52816,8 @@ "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -51461,25 +53096,33 @@ } } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, "web3": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz", - "integrity": "sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.1.tgz", + "integrity": "sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ==", "dev": true, "requires": { - "web3-bzz": "1.6.0", - "web3-core": "1.6.0", - "web3-eth": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-shh": "1.6.0", - "web3-utils": "1.6.0" + "web3-bzz": "1.6.1", + "web3-core": "1.6.1", + "web3-eth": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-shh": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-bzz": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.0.tgz", - "integrity": "sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.1.tgz", + "integrity": "sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng==", "dev": true, "requires": { "@types/node": "^12.12.6", @@ -51488,32 +53131,32 @@ }, "dependencies": { "@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true } } }, "web3-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.0.tgz", - "integrity": "sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.1.tgz", + "integrity": "sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ==", "dev": true, "requires": { "@types/bn.js": "^4.11.5", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-requestmanager": "1.6.0", - "web3-utils": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-requestmanager": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true }, "bignumber.js": { @@ -51523,23 +53166,23 @@ "dev": true }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } @@ -51583,46 +53226,45 @@ } }, "web3-core-method": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.0.tgz", - "integrity": "sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.1.tgz", + "integrity": "sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w==", "dev": true, "requires": { - "@ethereumjs/common": "^2.4.0", "@ethersproject/transactions": "^5.0.0-beta.135", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-utils": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "requires": { "eventemitter3": "4.0.4" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } @@ -51637,90 +53279,90 @@ } }, "web3-core-requestmanager": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz", - "integrity": "sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz", + "integrity": "sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A==", "dev": true, "requires": { "util": "^0.12.0", - "web3-core-helpers": "1.6.0", - "web3-providers-http": "1.6.0", - "web3-providers-ipc": "1.6.0", - "web3-providers-ws": "1.6.0" + "web3-core-helpers": "1.6.1", + "web3-providers-http": "1.6.1", + "web3-providers-ipc": "1.6.1", + "web3-providers-ws": "1.6.1" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-core-subscriptions": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz", - "integrity": "sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz", + "integrity": "sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g==", "dev": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0" + "web3-core-helpers": "1.6.1" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-eth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.0.tgz", - "integrity": "sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.1.tgz", + "integrity": "sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ==", "dev": true, "requires": { - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-accounts": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-eth-ens": "1.6.0", - "web3-eth-iban": "1.6.0", - "web3-eth-personal": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-accounts": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-eth-ens": "1.6.1", + "web3-eth-iban": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@ethersproject/abi": { @@ -51741,33 +53383,33 @@ } }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "requires": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } @@ -51828,22 +53470,22 @@ } }, "web3-eth-accounts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz", - "integrity": "sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz", + "integrity": "sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w==", "dev": true, "requires": { - "@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.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@types/bn.js": { @@ -51894,41 +53536,41 @@ "dev": true }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-eth-contract": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz", - "integrity": "sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz", + "integrity": "sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ==", "dev": true, "requires": { "@types/bn.js": "^4.11.5", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@ethersproject/abi": { @@ -51949,60 +53591,60 @@ } }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "requires": { "eventemitter3": "4.0.4" } }, "web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "requires": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-eth-ens": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz", - "integrity": "sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz", + "integrity": "sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ==", "dev": true, "requires": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-promievent": "1.6.0", - "web3-eth-abi": "1.6.0", - "web3-eth-contract": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@ethersproject/abi": { @@ -52023,42 +53665,42 @@ } }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-core-promievent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz", - "integrity": "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", + "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "dev": true, "requires": { "eventemitter3": "4.0.4" } }, "web3-eth-abi": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz", - "integrity": "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", + "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "dev": true, "requires": { "@ethersproject/abi": "5.0.7", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } @@ -52102,171 +53744,171 @@ } }, "web3-eth-personal": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz", - "integrity": "sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz", + "integrity": "sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw==", "dev": true, "requires": { "@types/node": "^12.12.6", - "web3-core": "1.6.0", - "web3-core-helpers": "1.6.0", - "web3-core-method": "1.6.0", - "web3-net": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" }, "dependencies": { "@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==", + "version": "12.20.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", + "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==", "dev": true }, "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-net": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.0.tgz", - "integrity": "sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.1.tgz", + "integrity": "sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw==", "dev": true, "requires": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-utils": "1.6.0" + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-providers-http": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.0.tgz", - "integrity": "sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.1.tgz", + "integrity": "sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A==", "dev": true, "requires": { - "web3-core-helpers": "1.6.0", + "web3-core-helpers": "1.6.1", "xhr2-cookies": "1.1.0" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-providers-ipc": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz", - "integrity": "sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz", + "integrity": "sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ==", "dev": true, "requires": { "oboe": "2.1.5", - "web3-core-helpers": "1.6.0" + "web3-core-helpers": "1.6.1" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-providers-ws": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz", - "integrity": "sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz", + "integrity": "sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg==", "dev": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.6.0", + "web3-core-helpers": "1.6.1", "websocket": "^1.0.32" }, "dependencies": { "web3-core-helpers": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz", - "integrity": "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", + "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "dev": true, "requires": { - "web3-eth-iban": "1.6.0", - "web3-utils": "1.6.0" + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" } }, "web3-eth-iban": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz", - "integrity": "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", + "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "dev": true, "requires": { "bn.js": "^4.11.9", - "web3-utils": "1.6.0" + "web3-utils": "1.6.1" } } } }, "web3-shh": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.0.tgz", - "integrity": "sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.1.tgz", + "integrity": "sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A==", "dev": true, "requires": { - "web3-core": "1.6.0", - "web3-core-method": "1.6.0", - "web3-core-subscriptions": "1.6.0", - "web3-net": "1.6.0" + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-net": "1.6.1" } }, "web3-utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.0.tgz", - "integrity": "sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.1.tgz", + "integrity": "sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w==", "dev": true, "requires": { "bn.js": "^4.11.9", @@ -52476,27 +54118,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -52564,12 +54185,6 @@ "xhr-request": "^1.1.0" } }, - "xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", - "dev": true - }, "xhr2-cookies": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", @@ -52711,6 +54326,12 @@ "lodash": "^4.17.15", "yargs": "^13.3.0" } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true } } } diff --git a/package.json b/package.json index 62f04e3f..2ba0d8d6 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,14 @@ "description": "", "directories": {}, "scripts": { - "test": "hardhat test", + "test": "hardhat run scripts/tests/global-test.ts", "coverage": "./node_modules/.bin/solidity-coverage", "check": "node status-checks/huskyCheck.js", "check-husky": "node status-checks/huskyCheck.js", - "deploy": "node scripts/deployConnectorsFromCmd.js" + "deploy": "node scripts/deployConnectorsFromCmd.js", + "test:runner": "hardhat run scripts/tests/run-tests.ts", + "typechain": "hardhat typechain", + "compile": "hardhat compile" }, "repository": { "type": "git", @@ -22,30 +25,42 @@ "homepage": "https://github.com/InstaDApp/dsa-connectors-new#readme", "dependencies": { "@openzeppelin/contracts": "^3.4.0-solc-0.7", + "@typechain/ethers-v5": "^8.0.5", + "@typechain/hardhat": "^3.0.0", "@uniswap/v3-core": "^1.0.0", - "@uniswap/v3-periphery": "^1.2.1", - "chalk": "^4.1.2", + "@uniswap/v3-periphery": "^1.3.0", + "chalk": "^5.0.0", "dotenv": "^10.0.0", - "hardhat-docgen": "^1.1.2", + "hardhat-docgen": "^1.2.0", + "inquirer": "^8.2.0", "minimist": "^1.2.5", - "solc": "^0.7.0" + "solc": "^0.8.10", + "typechain": "^6.0.5" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.7", + "@nomiclabs/hardhat-ethers": "^2.0.3", + "@nomiclabs/hardhat-etherscan": "^2.1.8", "@nomiclabs/hardhat-waffle": "^2.0.1", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/test-helpers": "^0.5.15", "@studydefi/money-legos": "^2.4.2", - "@tenderly/hardhat-tenderly": "^1.0.12", + "@tenderly/hardhat-tenderly": "^1.0.13", + "@types/chai": "^4.2.22", + "@types/chai-as-promised": "^7.1.4", + "@types/inquirer": "^8.1.3", + "@types/mocha": "^9.0.0", + "@types/node": "^16.11.11", + "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "ethereum-waffle": "^3.4.0", - "ethers": "^5.5.1", - "hardhat": "^2.6.7", - "hardhat-deploy": "^0.9.4", + "ethers": "^5.5.2", + "hardhat": "^2.7.0", + "hardhat-deploy": "^0.9.14", "hardhat-deploy-ethers": "^0.3.0-beta.11", "husky": "^7.0.4", - "solidity-coverage": "0.5.11", - "web3": "^1.5.2" + "solidity-coverage": "0.7.17", + "ts-node": "^10.4.0", + "typescript": "^4.5.2", + "web3": "^1.6.1" } } diff --git a/scripts/buildDSAv2.js b/scripts/buildDSAv2.js deleted file mode 100644 index 0f56a8c3..00000000 --- a/scripts/buildDSAv2.js +++ /dev/null @@ -1,15 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; -const addresses = require("./constant/addresses"); -const abis = require("./constant/abis"); - -const instaImplementations_m1 = require("../deployements/mainnet/Implementation_m1.sol/InstaImplementationM1.json") - -module.exports = async function (owner) { - const instaIndex = await ethers.getContractAt(abis.core.instaIndex, addresses.core.instaIndex) - - const tx = await instaIndex.build(owner, 2, owner); - const receipt = await tx.wait() - const event = receipt.events.find(a => a.event === "LogAccountCreated") - return await ethers.getContractAt(instaImplementations_m1.abi, event.args.account) -}; diff --git a/scripts/constant/abis.js b/scripts/constant/abis.ts similarity index 91% rename from scripts/constant/abis.js rename to scripts/constant/abis.ts index cb62ccfb..43097ba5 100644 --- a/scripts/constant/abis.js +++ b/scripts/constant/abis.ts @@ -1,4 +1,4 @@ -module.exports = { +export const abis: Record = { core: { connectorsV2: require("./abi/core/connectorsV2.json"), instaIndex: require("./abi/core/instaIndex.json"), diff --git a/scripts/constant/addresses.js b/scripts/constant/addresses.js deleted file mode 100644 index 77ee389e..00000000 --- a/scripts/constant/addresses.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - connectors: { - basic: "0xe5398f279175962E56fE4c5E0b62dc7208EF36c6", - auth: "0xd1aff9f2acf800c876c409100d6f39aea93fc3d9", - "INSTAPOOL-A": "0x5806af7ab22e2916fa582ff05731bf7c682387b2", - }, - core: { - connectorsV2: "0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11", - instaIndex: "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723", - }, -}; diff --git a/scripts/constant/constant.js b/scripts/constant/constant.js deleted file mode 100644 index 100da5a5..00000000 --- a/scripts/constant/constant.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - address_zero: "0x0000000000000000000000000000000000000000", - eth_addr: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - max_value: "115792089237316195423570985008687907853269984665640564039457584007913129639935" - }; - \ No newline at end of file diff --git a/scripts/constant/constant.ts b/scripts/constant/constant.ts new file mode 100644 index 00000000..9e659d77 --- /dev/null +++ b/scripts/constant/constant.ts @@ -0,0 +1,6 @@ +export const constants = { + address_zero: "0x0000000000000000000000000000000000000000", + native_address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + max_value: + "115792089237316195423570985008687907853269984665640564039457584007913129639935", +}; diff --git a/scripts/constant/tokens.js b/scripts/constant/tokens.js deleted file mode 100644 index c4183095..00000000 --- a/scripts/constant/tokens.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - "eth": { - "type": "token", - "symbol": "ETH", - "name": "Ethereum", - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "decimals": 18 - }, - "dai": { - "type": "token", - "symbol": "DAI", - "name": "DAI Stable", - "address": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "decimals": 18 - }, - "usdc": { - "type": "token", - "symbol": "USDC", - "name": "USD Coin", - "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "decimals": 6 - } -} \ No newline at end of file diff --git a/scripts/deploy.js b/scripts/deploy.js deleted file mode 100644 index 26f65d8e..00000000 --- a/scripts/deploy.js +++ /dev/null @@ -1,38 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; - -const deployConnector = require("./deployConnector"); - -async function main() { - const accounts = await hre.ethers.getSigners() - const wallet = accounts[0] - - const connectMapping = { - '1INCH-A': 'ConnectV2OneInch', - '1INCH-B': 'ConnectV2OneProto', - 'AAVE-V1-A': 'ConnectV2AaveV1', - 'AAVE-V2-A': 'ConnectV2AaveV2', - 'AUTHORITY-A': 'ConnectV2Auth', - 'BASIC-A': 'ConnectV2Basic', - 'COMP-A': 'ConnectV2COMP', - 'COMPOUND-A': 'ConnectV2Compound', - 'DYDX-A': 'ConnectV2Dydx', - 'FEE-A': 'ConnectV2Fee', - 'GELATO-A': 'ConnectV2Gelato', - 'MAKERDAO-A': 'ConnectV2Maker', - 'UNISWAP-A': 'ConnectV2UniswapV2' - } - - const addressMapping = {} - - for (const key in connectMapping) { - addressMapping[key] = await deployConnector(connectMapping[key]) - } -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); diff --git a/scripts/deployAndEnableConnector.js b/scripts/deployAndEnableConnector.js deleted file mode 100644 index 42d331d1..00000000 --- a/scripts/deployAndEnableConnector.js +++ /dev/null @@ -1,19 +0,0 @@ -const abis = require("./constant/abis"); -const addresses = require("./constant/addresses"); - -const hre = require("hardhat"); -const { ethers, waffle } = hre; -const { deployContract } = waffle; -const fs = require("fs") - - -module.exports = async function ({connectorName, contractArtifact, signer, connectors}) { - const connectorInstanace = await deployContract(signer, contractArtifact, []); - - await connectors.connect(signer).addConnectors([connectorName], [connectorInstanace.address]) - - addresses.connectors[connectorName] = connectorInstanace.address - abis.connectors[connectorName] = contractArtifact.abi; - - return connectorInstanace; -}; diff --git a/scripts/deployAvaxConnector.js b/scripts/deployAvaxConnector.js deleted file mode 100644 index f385fc8c..00000000 --- a/scripts/deployAvaxConnector.js +++ /dev/null @@ -1,27 +0,0 @@ -const hre = require("hardhat"); -const { ethers, deployments, getUnnamedAccounts } = hre; -const { deploy } = deployments; - - -async function main() { - - const deployer = (await getUnnamedAccounts())[0] - - const connector = "ConnectV2InstaPoolV3Avalanche" - - const connectorInstance = await deploy(connector, { - from: deployer, - }) - console.log(`${connector} deployed: `, connectorInstance.address); - - await hre.run("sourcify", { - address: connectorInstance.address, - }) -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); \ No newline at end of file diff --git a/scripts/deployConnector.js b/scripts/deployConnector.js deleted file mode 100644 index f0ae463d..00000000 --- a/scripts/deployConnector.js +++ /dev/null @@ -1,24 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; - -module.exports = async (connectorName) => { - const Connector = await ethers.getContractFactory(connectorName); - const connector = await Connector.deploy(); - await connector.deployed(); - - console.log(`${connectorName} Deployed: ${connector.address}`); - - try { - await hre.run("verify:verify", { - address: connector.address, - constructorArguments: [] - } - ) - } catch (error) { - console.log(`Failed to verify: ${connectorName}@${connector.address}`) - console.log(error) - console.log() - } - - return connector.address -} \ No newline at end of file diff --git a/scripts/deployConnectorsFromCmd.js b/scripts/deployConnectorsFromCmd.js deleted file mode 100644 index f2584fa5..00000000 --- a/scripts/deployConnectorsFromCmd.js +++ /dev/null @@ -1,105 +0,0 @@ -const fs = require("fs"); -const hre = require("hardhat"); -const { ethers } = hre; - -let args = process.argv; -args = args.splice(2, args.length); -let params = {}; - -for (let i = 0; i < args.length; i += 2) { - if (args[i][0] !== "-" || args[i][1] !== "-") { - console.log("Please add '--' for the key"); - process.exit(-1); - } - let key = args[i].slice(2, args[i].length); - params[key] = args[i + 1]; -} - -if (!params.hasOwnProperty('connector')) { - console.error("Should include connector params") - process.exit(-1); -} - -if (!params.hasOwnProperty('network')) { - console.error("Should include network params") - process.exit(-1); -} - -if (!params.hasOwnProperty('gasPrice')) { - console.error("Should include gas params") - process.exit(-1); -} - -let privateKey = process.env.PRIVATE_KEY; -let provider = new ethers.providers.JsonRpcProvider(hre.config.networks[params['network']].url); -let wallet = new ethers.Wallet(privateKey, provider); - -hre.network.name = params['networkName']; -hre.network.config = hre.config.networks[params['networkName']]; -hre.network.provider = provider; -let contracts = []; - -const parseFile = async (filePath) => { - const data = fs.readFileSync(filePath, "utf-8"); - let parsedData = data.split("contract "); - parsedData = parsedData[parsedData.length - 1].split(" "); - parsedData = parsedData[0]; - return parsedData; -} - -const parseDir = async (root, basePath, addPath) => { - for(let i = 0; i < root.length; i++) { - addPath = "/" + root[i]; - const dir = fs.readdirSync(basePath + addPath); - if(dir.indexOf("main.sol") !== -1) { - const fileData = await parseFile(basePath + addPath + "/main.sol"); - contracts.push(fileData) - } else { - await parseDir(dir, basePath + addPath, ""); - } - } -} - -const main = async () => { - const mainnet = fs.readdirSync("./contracts/mainnet/connectors/"); - const polygon = fs.readdirSync("./contracts/polygon/connectors/"); - let basePathMainnet = "./contracts/mainnet/connectors/"; - let basePathPolygon = "./contracts/polygon/connectors/"; - - const connectorName = params['connector']; - - await parseDir(mainnet, basePathMainnet, ""); - await parseDir(polygon, basePathPolygon, ""); - - if(contracts.indexOf(connectorName) === -1) { - throw new Error("can not find the connector!\n" + "supported connector names are:\n" + contracts.join("\n")); - } - - const Connector = await ethers.getContractFactory(connectorName); - const connector = await Connector.connect(wallet).deploy({ gasPrice: ethers.utils.parseUnits(params['gasPrice'], "gwei") }); - await connector.deployed(); - - console.log(`${connectorName} Deployed: ${connector.address}`); - try { - await hre.run("verify:verify", { - address: connector.address, - constructorArguments: [] - } - ) - } catch (error) { - console.log(`Failed to verify: ${connectorName}@${connector.address}`) - console.log(error) - } - - return connector.address -} - -main() - .then(() => { - console.log("Done successfully"); - process.exit(0) - }) - .catch(err => { - console.log("error:", err); - process.exit(1); - }) \ No newline at end of file diff --git a/scripts/deployInstaMappingController.js b/scripts/deployInstaMappingController.js deleted file mode 100644 index f6919bb2..00000000 --- a/scripts/deployInstaMappingController.js +++ /dev/null @@ -1,36 +0,0 @@ -const hre = require('hardhat') -const { ethers } = hre - -async function main () { - if (hre.network.name === 'mainnet') { - console.log( - '\n\n Deploying Contracts to mainnet. Hit ctrl + c to abort' - ) - } else if (hre.network.name === 'hardhat') { - console.log( - '\n\n Deploying Contracts to hardhat.' - ) - } - - const InstaMappingController = await ethers.getContractFactory('InstaMappingController') - const instaMappingController = await InstaMappingController.deploy() - await instaMappingController.deployed() - - console.log('InstaMappingController deployed: ', instaMappingController.address) - - if (hre.network.name === 'mainnet') { - await hre.run('verify:verify', { - address: instaMappingController.address, - constructorArguments: [] - }) - } else if (hre.network.name === 'hardhat') { - console.log("Contracts deployed.") - } -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/deployMappingContract.js b/scripts/deployMappingContract.js deleted file mode 100644 index 7fce2acd..00000000 --- a/scripts/deployMappingContract.js +++ /dev/null @@ -1,38 +0,0 @@ -const hre = require('hardhat') -const { ethers } = hre - -async function main () { - if (hre.network.name === 'mainnet') { - console.log( - '\n\n Deploying Contracts to mainnet. Hit ctrl + c to abort' - ) - } else if (hre.network.name === 'hardhat') { - console.log( - '\n\n Deploying Contracts to hardhat.' - ) - } - - const mappingContract = "CONTRACT_NAME" - - const InstaProtocolMapping = await ethers.getContractFactory(mappingContract) - const instaProtocolMapping = await InstaProtocolMapping.deploy() - await instaProtocolMapping.deployed() - - console.log(`${mappingContract} deployed: `, instaProtocolMapping.address) - - if (hre.network.name === 'mainnet') { - await hre.run('verify:verify', { - address: instaProtocolMapping.address, - constructorArguments: [] - }) - } else if (hre.network.name === 'hardhat') { - console.log("Contracts deployed.") - } -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/deploySingle.js b/scripts/deploySingle.js deleted file mode 100644 index 50ed7298..00000000 --- a/scripts/deploySingle.js +++ /dev/null @@ -1,23 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; - -const deployConnector = require("./deployConnector"); - -async function main() { - const address = await deployConnector("ConnectOne") // Example - - const connectorsAbi = [ - "function addConnectors(string[] _connectorNames, address[] _connectors)" - ] - - const connectorsContract = new ethers.Contract("0x84b457c6D31025d56449D5A01F0c34bF78636f67", connectorsAbi, ethers.provider); - - await connectorsContract.addConnectors(['1inch'], [address]) -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error); - process.exit(1); - }); \ No newline at end of file diff --git a/scripts/deployment/deploy.ts b/scripts/deployment/deploy.ts new file mode 100644 index 00000000..381fe091 --- /dev/null +++ b/scripts/deployment/deploy.ts @@ -0,0 +1,35 @@ +import { ethers } from "hardhat"; +import { deployConnector } from "./deployConnector"; + +async function main() { + const accounts = await ethers.getSigners(); + + const connectMapping: Record = { + "1INCH-A": "ConnectV2OneInch", + "1INCH-B": "ConnectV2OneProto", + "AAVE-V1-A": "ConnectV2AaveV1", + "AAVE-V2-A": "ConnectV2AaveV2", + "AUTHORITY-A": "ConnectV2Auth", + "BASIC-A": "ConnectV2Basic", + "COMP-A": "ConnectV2COMP", + "COMPOUND-A": "ConnectV2Compound", + "DYDX-A": "ConnectV2Dydx", + "FEE-A": "ConnectV2Fee", + "GELATO-A": "ConnectV2Gelato", + "MAKERDAO-A": "ConnectV2Maker", + "UNISWAP-A": "ConnectV2UniswapV2", + }; + + const addressMapping: Record = {}; + + for (const key in connectMapping) { + addressMapping[key] = await deployConnector(connectMapping[key]); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deployAndVerifyOnSourcify.ts b/scripts/deployment/deployAndVerifyOnSourcify.ts new file mode 100644 index 00000000..50e877d0 --- /dev/null +++ b/scripts/deployment/deployAndVerifyOnSourcify.ts @@ -0,0 +1,24 @@ +import hre from "hardhat"; +const { ethers, deployments, getUnnamedAccounts } = hre; +const { deploy } = deployments; + +async function main() { + const deployer = (await getUnnamedAccounts())[0]; + const connector = "// Add connector name over here Eg: ConnectV2InstaPoolV3Avalanche" + + const connectorInstance = await deploy(connector, { + from: deployer, + }); + console.log(`${connector} deployed: `, connectorInstance.address); + + await hre.run("sourcify", { + address: connectorInstance.address, + }); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployCompoundMapping.js b/scripts/deployment/deployCompoundMapping.ts similarity index 88% rename from scripts/deployCompoundMapping.js rename to scripts/deployment/deployCompoundMapping.ts index 498b00d5..a5c78cd8 100644 --- a/scripts/deployCompoundMapping.js +++ b/scripts/deployment/deployCompoundMapping.ts @@ -1,8 +1,6 @@ -const hre = require("hardhat"); +import hre from "hardhat"; const { ethers } = hre; - async function main() { - const CONNECTORS_V2 = "0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11"; const ctokenMapping = { @@ -23,7 +21,7 @@ async function main() { "AAVE-A": "0xe65cdb6479bac1e22340e4e755fae7e509ecd06c", "TUSD-A": "0x12392f67bdf24fae0af363c24ac620a2f67dad86", "LINK-A": "0xface851a4921ce59e912d19329929ce6da6eb0c7", - } + }; const tokenMapping = { "ETH-A": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", @@ -43,7 +41,7 @@ async function main() { "AAVE-A": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", "TUSD-A": "0x0000000000085d4780B73119b644AE5ecd22b376", "LINK-A": "0x514910771af9ca656af840dff83e8264ecf986ca", - } + }; const Mapping = await ethers.getContractFactory("InstaCompoundMapping"); const mapping = await Mapping.deploy( @@ -58,25 +56,24 @@ async function main() { try { await hre.run("verify:verify", { - address: mapping.address, - constructorArguments: [ - CONNECTORS_V2, - Object.keys(ctokenMapping), - Object.values(tokenMapping), - Object.values(ctokenMapping) - ] - } - ) -} catch (error) { - console.log(`Failed to verify: InstaCompoundMapping@${mapping.address}`) - console.log(error) - console.log() -} + address: mapping.address, + constructorArguments: [ + CONNECTORS_V2, + Object.keys(ctokenMapping), + Object.values(tokenMapping), + Object.values(ctokenMapping), + ], + }); + } catch (error) { + console.log(`Failed to verify: InstaCompoundMapping@${mapping.address}`); + console.log(error); + console.log(); + } } main() .then(() => process.exit(0)) - .catch(error => { + .catch((error) => { console.error(error); process.exit(1); - }); \ No newline at end of file + }); diff --git a/scripts/deployment/deployConnector.ts b/scripts/deployment/deployConnector.ts new file mode 100644 index 00000000..44e4667d --- /dev/null +++ b/scripts/deployment/deployConnector.ts @@ -0,0 +1,10 @@ +import { ethers } from "hardhat"; + +export const deployConnector = async (connectorName: string) => { + const Connector = await ethers.getContractFactory(connectorName); + const connector = await Connector.deploy(); + await connector.deployed(); + + console.log(`${connectorName} Deployed: ${connector.address}`); + return connector.address; +}; diff --git a/scripts/deployment/deployConnectorsFromCmd.ts b/scripts/deployment/deployConnectorsFromCmd.ts new file mode 100644 index 00000000..f3c24f45 --- /dev/null +++ b/scripts/deployment/deployConnectorsFromCmd.ts @@ -0,0 +1,111 @@ +import fs from "fs"; +import hre from "hardhat" +const { ethers, network, config } = hre; + +let args = process.argv; +args = args.splice(2, args.length); +let params: Record = {}; + +for (let i = 0; i < args.length; i += 2) { + if (args[i][0] !== "-" || args[i][1] !== "-") { + console.log("Please add '--' for the key"); + process.exit(-1); + } + let key = args[i].slice(2, args[i].length); + params[key] = args[i + 1]; +} + +if (!params.hasOwnProperty("connector")) { + console.error("Should include connector params"); + process.exit(-1); +} + +if (!params.hasOwnProperty("network")) { + console.error("Should include network params"); + process.exit(-1); +} + +if (!params.hasOwnProperty("gasPrice")) { + console.error("Should include gas params"); + process.exit(-1); +} + +let privateKey = String(process.env.PRIVATE_KEY); +let provider = new ethers.providers.JsonRpcProvider( + config.networks[params["network"]].url +); +let wallet = new ethers.Wallet(privateKey, provider); + +network.name = params["networkName"]; +network.config = config.networks[params["networkName"]]; +network.provider = provider; +let contracts: (string | string[])[] = []; + +const parseFile = async (filePath: fs.PathOrFileDescriptor) => { + const data = fs.readFileSync(filePath, "utf-8"); + let parsedData = data.split("contract "); + parsedData = parsedData[parsedData.length - 1].split(" "); + return parsedData[0]; +}; + +const parseDir = async (root: string | any[], basePath: string, addPath: string) => { + for (let i = 0; i < root.length; i++) { + addPath = "/" + root[i]; + const dir = fs.readdirSync(basePath + addPath); + if (dir.indexOf("main.sol") !== -1) { + const fileData = await parseFile(basePath + addPath + "/main.sol"); + contracts.push(fileData); + } else { + await parseDir(dir, basePath + addPath, ""); + } + } +}; + +const main = async () => { + const mainnet = fs.readdirSync("./contracts/mainnet/connectors/"); + const polygon = fs.readdirSync("./contracts/polygon/connectors/"); + let basePathMainnet = "./contracts/mainnet/connectors/"; + let basePathPolygon = "./contracts/polygon/connectors/"; + + const connectorName = params["connector"]; + + await parseDir(mainnet, basePathMainnet, ""); + await parseDir(polygon, basePathPolygon, ""); + + if (contracts.indexOf(connectorName) === -1) { + throw new Error( + "can not find the connector!\n" + + "supported connector names are:\n" + + contracts.join("\n") + ); + } + + const Connector = await ethers.getContractFactory(connectorName); + const connector = await Connector.connect(wallet).deploy({ + gasPrice: ethers.utils.parseUnits(params["gasPrice"], "gwei"), + }); + await connector.deployed(); + + console.log(`${connectorName} Deployed: ${connector.address}`); + try { + await hre.run("verify:verify", { + address: connector.address, + constructorArguments: [], + }); + } catch (error) { + console.log(`Failed to verify: ${connectorName}@${connector.address}`); + console.log(error); + } + + return connector.address; +}; + +main() + .then(() => { + console.log("Done successfully"); + process.exit(0); + }) + .catch((err) => { + console.log("error:", err); + process.exit(1); + }); diff --git a/scripts/deployment/deployInstaMappingController.ts b/scripts/deployment/deployInstaMappingController.ts new file mode 100644 index 00000000..daeed499 --- /dev/null +++ b/scripts/deployment/deployInstaMappingController.ts @@ -0,0 +1,37 @@ +import hre from "hardhat"; +const { ethers } = hre; + +async function main() { + if (hre.network.name === "mainnet") { + console.log("\n\n Deploying Contracts to mainnet. Hit ctrl + c to abort"); + } else if (hre.network.name === "hardhat") { + console.log("\n\n Deploying Contracts to hardhat."); + } + + const InstaMappingController = await ethers.getContractFactory( + "InstaMappingController" + ); + const instaMappingController = await InstaMappingController.deploy(); + await instaMappingController.deployed(); + + console.log( + "InstaMappingController deployed: ", + instaMappingController.address + ); + + if (hre.network.name === "mainnet") { + await hre.run("verify:verify", { + address: instaMappingController.address, + constructorArguments: [], + }); + } else if (hre.network.name === "hardhat") { + console.log("Contracts deployed."); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/deployMappingContract.ts b/scripts/deployment/deployMappingContract.ts new file mode 100644 index 00000000..69a4bc4d --- /dev/null +++ b/scripts/deployment/deployMappingContract.ts @@ -0,0 +1,34 @@ +import hre from "hardhat"; +const { ethers } = hre; + +async function main() { + if (hre.network.name === "mainnet") { + console.log("\n\n Deploying Contracts to mainnet. Hit ctrl + c to abort"); + } else if (hre.network.name === "hardhat") { + console.log("\n\n Deploying Contracts to hardhat."); + } + + const mappingContract = "CONTRACT_NAME"; + + const InstaProtocolMapping = await ethers.getContractFactory(mappingContract); + const instaProtocolMapping = await InstaProtocolMapping.deploy(); + await instaProtocolMapping.deployed(); + + console.log(`${mappingContract} deployed: `, instaProtocolMapping.address); + + if (hre.network.name === "mainnet") { + await hre.run("verify:verify", { + address: instaProtocolMapping.address, + constructorArguments: [], + }); + } else if (hre.network.name === "hardhat") { + console.log("Contracts deployed."); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/encodeFlashcastData.js b/scripts/encodeFlashcastData.js deleted file mode 100644 index a674c1af..00000000 --- a/scripts/encodeFlashcastData.js +++ /dev/null @@ -1,16 +0,0 @@ -const abis = require("./constant/abis"); -const addresses = require("./constant/addresses"); -const { web3 } = hre; - -const encodeSpells = require("./encodeSpells.js") - - -module.exports = function (spells) { - const encodeSpellsData = encodeSpells(spells); - const targetType = "string[]"; - let argTypes = [targetType, "bytes[]"]; - return web3.eth.abi.encodeParameters(argTypes, [ - encodeSpellsData[0], - encodeSpellsData[1], - ]); -}; diff --git a/scripts/encodeSpells.js b/scripts/encodeSpells.js deleted file mode 100644 index 719ca8be..00000000 --- a/scripts/encodeSpells.js +++ /dev/null @@ -1,18 +0,0 @@ -const abis = require("./constant/abis"); -const addresses = require("./constant/addresses"); -const { web3 } = hre; - -module.exports = function (spells) { - const targets = spells.map(a => a.connector) - const calldatas = spells.map(a => { - const functionName = a.method; - // console.log(functionName) - const abi = abis.connectors[a.connector].find(b => { - return b.name === functionName - }); - // console.log(functionName) - if (!abi) throw new Error("Couldn't find function") - return web3.eth.abi.encodeFunctionCall(abi, a.args) - }) - return [targets, calldatas] -}; diff --git a/scripts/getMasterSigner.js b/scripts/getMasterSigner.js deleted file mode 100644 index d0c19d6a..00000000 --- a/scripts/getMasterSigner.js +++ /dev/null @@ -1,25 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; -const addresses = require("./constant/addresses"); -const abis = require("./constant/abis"); - -module.exports = async function() { - const [_, __, ___, wallet3] = await ethers.getSigners(); - const instaIndex = new ethers.Contract( - addresses.core.instaIndex, - abis.core.instaIndex, - wallet3 - ); - - const masterAddress = await instaIndex.master(); // TODO: make it constant? - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [masterAddress], - }); - await wallet3.sendTransaction({ - to: masterAddress, - value: ethers.utils.parseEther("10"), - }); - - return await ethers.getSigner(masterAddress); -}; diff --git a/scripts/polygon/buildDSAv2.js b/scripts/polygon/buildDSAv2.js deleted file mode 100644 index 967d879f..00000000 --- a/scripts/polygon/buildDSAv2.js +++ /dev/null @@ -1,15 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; -const addresses = require("./constant/addresses"); -const abis = require("../constant/abis"); - -const instaImplementations_m1 = require("../../deployements/mainnet/Implementation_m1.sol/InstaImplementationM1.json") - -module.exports = async function (owner) { - const instaIndex = await ethers.getContractAt(abis.core.instaIndex, addresses.core.instaIndex) - - const tx = await instaIndex.build(owner, 2, owner); - const receipt = await tx.wait() - const event = receipt.events.find(a => a.event === "LogAccountCreated") - return await ethers.getContractAt(instaImplementations_m1.abi, event.args.account) -}; diff --git a/scripts/polygon/constant/constant.js b/scripts/polygon/constant/constant.js deleted file mode 100644 index 62933314..00000000 --- a/scripts/polygon/constant/constant.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - address_zero: "0x0000000000000000000000000000000000000000", - eth_addr: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - matic_addr: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - max_value: "115792089237316195423570985008687907853269984665640564039457584007913129639935" - }; - \ No newline at end of file diff --git a/scripts/polygon/constant/tokens.js b/scripts/polygon/constant/tokens.js deleted file mode 100644 index 55946203..00000000 --- a/scripts/polygon/constant/tokens.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - "matic": { - "type": "token", - "symbol": "MATIC", - "name": "Matic", - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "decimals": 18 - }, - "eth": { - "type": "token", - "symbol": "ETH", - "name": "Ethereum", - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "decimals": 18 - }, - "dai": { - "type": "token", - "symbol": "DAI", - "name": "DAI Stable", - "address": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "decimals": 18 - }, - "usdc": { - "type": "token", - "symbol": "USDC", - "name": "USD Coin", - "address": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "decimals": 6 - } -} \ No newline at end of file diff --git a/scripts/polygon/deployAndEnableConnector.js b/scripts/polygon/deployAndEnableConnector.js deleted file mode 100644 index 52d80b5e..00000000 --- a/scripts/polygon/deployAndEnableConnector.js +++ /dev/null @@ -1,19 +0,0 @@ -const abis = require("../constant/abis"); -const addresses = require("./constant/addresses"); - -const hre = require("hardhat"); -const { ethers, waffle } = hre; -const { deployContract } = waffle; -const fs = require("fs") - - -module.exports = async function ({connectorName, contractArtifact, signer, connectors}) { - const connectorInstanace = await deployContract(signer, contractArtifact, []); - - await connectors.connect(signer).addConnectors([connectorName], [connectorInstanace.address]) - - addresses.connectors[connectorName] = connectorInstanace.address - abis.connectors[connectorName] = contractArtifact.abi; - - return connectorInstanace; -}; diff --git a/scripts/polygon/encodeSpells.js b/scripts/polygon/encodeSpells.js deleted file mode 100644 index ba1cddcb..00000000 --- a/scripts/polygon/encodeSpells.js +++ /dev/null @@ -1,18 +0,0 @@ -const abis = require("../constant/abis"); -const addresses = require("./constant/addresses"); -const { web3 } = hre; - -module.exports = function (spells) { - const targets = spells.map(a => a.connector) - const calldatas = spells.map(a => { - const functionName = a.method; - // console.log(functionName) - const abi = abis.connectors[a.connector].find(b => { - return b.name === functionName - }); - // console.log(functionName) - if (!abi) throw new Error("Couldn't find function") - return web3.eth.abi.encodeFunctionCall(abi, a.args) - }) - return [targets, calldatas] -}; diff --git a/scripts/polygon/getMasterSigner.js b/scripts/polygon/getMasterSigner.js deleted file mode 100644 index 9edb0417..00000000 --- a/scripts/polygon/getMasterSigner.js +++ /dev/null @@ -1,25 +0,0 @@ -const hre = require("hardhat"); -const { ethers } = hre; -const addresses = require("./constant/addresses"); -const abis = require("../constant/abis"); - -module.exports = async function() { - const [_, __, ___, wallet3] = await ethers.getSigners(); - const instaIndex = new ethers.Contract( - addresses.core.instaIndex, - abis.core.instaIndex, - wallet3 - ); - - const masterAddress = await instaIndex.master(); // TODO: make it constant? - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [masterAddress], - }); - await wallet3.sendTransaction({ - to: masterAddress, - value: ethers.utils.parseEther("10"), - }); - - return await ethers.getSigner(masterAddress); -}; diff --git a/scripts/addLiquidity.js b/scripts/tests/addLiquidity.ts similarity index 73% rename from scripts/addLiquidity.js rename to scripts/tests/addLiquidity.ts index c461a775..f29d6374 100644 --- a/scripts/addLiquidity.js +++ b/scripts/tests/addLiquidity.ts @@ -1,18 +1,20 @@ -const { ethers } = require("hardhat"); -const impersonateAccounts = require("./impersonate"); +import { Provider } from "@ethersproject/abstract-provider"; +import { Signer } from "@ethersproject/abstract-signer"; +import { ethers } from "hardhat"; +import { impersonateAccounts } from "./impersonate"; -const mineTx = async (tx) => { +const mineTx = async (tx: any) => { await (await tx).wait(); }; -const tokenMapping = { +const tokenMapping: Record = { usdc: { impersonateSigner: "0xfcb19e6a322b27c06842a71e8c725399f049ae3a", address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", abi: [ "function mint(address _to, uint256 _amount) external returns (bool);", ], - process: async function(owner, to, amt) { + process: async function(owner: Signer | Provider, to: any, amt: any) { const contract = new ethers.Contract(this.address, this.abi, owner); await mineTx(contract.mint(to, amt)); @@ -22,7 +24,7 @@ const tokenMapping = { impersonateSigner: "0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503", abi: ["function transfer(address to, uint value)"], address: "0x6b175474e89094c44da98b954eedeac495271d0f", - process: async function(owner, to, amt) { + process: async function(owner: Signer | Provider, to: any, amt: any) { const contract = new ethers.Contract(this.address, this.abi, owner); await mineTx(contract.transfer(to, amt)); }, @@ -34,7 +36,7 @@ const tokenMapping = { "function issue(uint amount)", "function transfer(address to, uint value)", ], - process: async function(owner, address, amt) { + process: async function(owner: Signer | Provider, address: any, amt: any) { const contract = new ethers.Contract(this.address, this.abi, owner); await mineTx(contract.issue(amt)); @@ -45,7 +47,7 @@ const tokenMapping = { impersonateSigner: "0xCA06411bd7a7296d7dbdd0050DFc846E95fEBEB7", address: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", abi: ["function mint(address _to, uint256 _amount) public returns (bool)"], - process: async function(owner, address, amt) { + process: async function(owner: Signer | Provider, address: any, amt: any) { const contract = new ethers.Contract(this.address, this.abi, owner); await mineTx(contract.mint(address, amt)); }, @@ -54,20 +56,19 @@ const tokenMapping = { impersonateSigner: "0x75e89d5979E4f6Fba9F97c104c2F0AFB3F1dcB88", address: "0x6f40d4a6237c257fff2db00fa0510deeecd303eb", abi: ["function transfer(address to, uint value)"], - process: async function(owner, address, amt) { + process: async function(owner: Signer | Provider, address: any, amt: any) { const contract = new ethers.Contract(this.address, this.abi, owner); await mineTx(contract.transfer(address, amt)); }, - } + }, }; -module.exports = async (tokenName, address, amt) => { +export async function addLiquidity(tokenName: string, address: any, amt: any) { const [signer] = await ethers.getSigners(); tokenName = tokenName.toLowerCase(); if (!tokenMapping[tokenName]) { throw new Error( - "Add liquidity doesn't support the following token: ", - tokenName + `Add liquidity doesn't support the following token: ${tokenName}` ); } @@ -84,4 +85,4 @@ module.exports = async (tokenName, address, amt) => { }); await token.process(impersonatedSigner, address, amt); -}; +} diff --git a/scripts/tests/arbitrum/addresses.ts b/scripts/tests/arbitrum/addresses.ts new file mode 100644 index 00000000..d2da378f --- /dev/null +++ b/scripts/tests/arbitrum/addresses.ts @@ -0,0 +1,11 @@ +export const addresses: Record = { + connectors: { + // basic: "0x6214f9c4F9700fc7a50B5f9aEEB819d647406Ac7", + // auth: "0xD6daA927ad756a4022858dddcc4E26137b30DB4D", + // "INSTAPOOL-A": "0x8f1e38c53af7bD2b2bE01b9580911b7Cca504F1b", + }, + core: { + connectorsV2: "0x67fCE99Dd6d8d659eea2a1ac1b8881c57eb6592B", + instaIndex: "0x1eE00C305C51Ff3bE60162456A9B533C07cD9288", + }, +}; diff --git a/scripts/tests/arbitrum/tokens.ts b/scripts/tests/arbitrum/tokens.ts new file mode 100644 index 00000000..fc679ab4 --- /dev/null +++ b/scripts/tests/arbitrum/tokens.ts @@ -0,0 +1,23 @@ +export const tokens = { + eth: { + type: "token", + symbol: "ETH", + name: "Ethereum", + address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + decimals: 18, + }, + dai: { + type: "token", + symbol: "DAI", + name: "DAI Stable", + address: "0xd586e7f844cea2f87f50152665bcbc2c279d8d70", + decimals: 18, + }, + usdc: { + type: "token", + symbol: "USDC", + name: "USD Coin", + address: "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", + decimals: 6, + }, +}; diff --git a/scripts/tests/avalanche/addresses.ts b/scripts/tests/avalanche/addresses.ts new file mode 100644 index 00000000..d2da378f --- /dev/null +++ b/scripts/tests/avalanche/addresses.ts @@ -0,0 +1,11 @@ +export const addresses: Record = { + connectors: { + // basic: "0x6214f9c4F9700fc7a50B5f9aEEB819d647406Ac7", + // auth: "0xD6daA927ad756a4022858dddcc4E26137b30DB4D", + // "INSTAPOOL-A": "0x8f1e38c53af7bD2b2bE01b9580911b7Cca504F1b", + }, + core: { + connectorsV2: "0x67fCE99Dd6d8d659eea2a1ac1b8881c57eb6592B", + instaIndex: "0x1eE00C305C51Ff3bE60162456A9B533C07cD9288", + }, +}; diff --git a/scripts/tests/avalanche/tokens.ts b/scripts/tests/avalanche/tokens.ts new file mode 100644 index 00000000..fc679ab4 --- /dev/null +++ b/scripts/tests/avalanche/tokens.ts @@ -0,0 +1,23 @@ +export const tokens = { + eth: { + type: "token", + symbol: "ETH", + name: "Ethereum", + address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + decimals: 18, + }, + dai: { + type: "token", + symbol: "DAI", + name: "DAI Stable", + address: "0xd586e7f844cea2f87f50152665bcbc2c279d8d70", + decimals: 18, + }, + usdc: { + type: "token", + symbol: "USDC", + name: "USD Coin", + address: "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", + decimals: 6, + }, +}; diff --git a/scripts/tests/buildDSAv2.ts b/scripts/tests/buildDSAv2.ts new file mode 100644 index 00000000..163db741 --- /dev/null +++ b/scripts/tests/buildDSAv2.ts @@ -0,0 +1,29 @@ +import { ethers } from "hardhat"; + +import { addresses as addressesPolygon } from "./polygon/addresses"; +import { addresses as addressesArbitrum } from "./arbitrum/addresses"; +import { addresses as addressesAvalanche } from "./avalanche/addresses"; +import { addresses } from "./mainnet/addresses"; +import { abis } from "../constant/abis"; +import { abi } from "../../deployements/mainnet/Implementation_m1.sol/InstaImplementationM1.json"; + +function getAddress(network: string | undefined) { + if (network === "polygon") return addressesPolygon.core.instaIndex; + else if (network === "arbitrum") return addressesArbitrum.core.instaIndex; + else if (network === "avalanche") return addressesAvalanche.core.instaIndex; + else return addresses.core.instaIndex; +} + +export async function buildDSAv2(owner: any) { + const instaIndex = await ethers.getContractAt( + abis.core.instaIndex, + getAddress(String(process.env.networkType)) + ); + + const tx = await instaIndex.build(owner, 2, owner); + const receipt = await tx.wait(); + const event = receipt.events.find( + (a: { event: string }) => a.event === "LogAccountCreated" + ); + return await ethers.getContractAt(abi, event.args.account); +} diff --git a/scripts/tests/command.ts b/scripts/tests/command.ts new file mode 100644 index 00000000..51a07234 --- /dev/null +++ b/scripts/tests/command.ts @@ -0,0 +1,33 @@ +import { execFile, spawn } from "child_process"; + +interface ICommand { + readonly cmd: string; + readonly args: string[]; + readonly env: { + [param: string]: string; + }; +} + +export async function execScript(input: ICommand): Promise { + return new Promise((resolve, reject) => { + let cmdEnv = Object.create(process.env); + for (let param in input.env) { + cmdEnv[param] = input.env[param]; + } + + const proc = spawn(input.cmd, [...input.args], { + env: cmdEnv, + shell: true, + stdio: "inherit", + }); + + proc.on("exit", (code) => { + if (code !== 0) { + reject(code); + return; + } + + resolve(code); + }); + }); +} diff --git a/scripts/tests/deployAndEnableConnector.ts b/scripts/tests/deployAndEnableConnector.ts new file mode 100644 index 00000000..e08142e4 --- /dev/null +++ b/scripts/tests/deployAndEnableConnector.ts @@ -0,0 +1,47 @@ +import { addresses as addressesPolygon } from "./polygon/addresses"; +import { addresses } from "./mainnet/addresses"; +import { abis } from "../constant/abis"; +import { addresses as addressesArbitrum } from "./arbitrum/addresses"; +import { addresses as addressesAvalanche } from "./avalanche/addresses"; + +import hre from "hardhat"; +import type { Signer, Contract } from "ethers"; +import type { ContractJSON } from "ethereum-waffle/dist/esm/ContractJSON"; + +const { ethers, waffle } = hre; +const { deployContract } = waffle; + +interface DeployInterface { + connectorName: string; + contractArtifact: ContractJSON; + signer: Signer; + connectors: Contract; +} + +function getAddress(network: string | undefined) { + if (network === "polygon") return addressesPolygon; + else if (network === "arbitrum") return addressesArbitrum; + else if (network === "avalanche") return addressesAvalanche; + else return addresses; +} + +export async function deployAndEnableConnector( + { + connectorName, + contractArtifact, + signer, + connectors + } : DeployInterface +) { + const connectorInstanace: Contract = await deployContract(signer, contractArtifact); + + await connectors + .connect(signer) + .addConnectors([connectorName], [connectorInstanace.address]); + + getAddress(String(process.env.networkType)).connectors[connectorName] = + connectorInstanace.address; + abis.connectors[connectorName] = contractArtifact.abi; + + return connectorInstanace; +} diff --git a/scripts/tests/encodeFlashcastData.ts b/scripts/tests/encodeFlashcastData.ts new file mode 100644 index 00000000..759b9de9 --- /dev/null +++ b/scripts/tests/encodeFlashcastData.ts @@ -0,0 +1,13 @@ +import hre from "hardhat"; +const { web3 } = hre; + +import { encodeSpells } from "./encodeSpells"; + +export default function encodeFlashcastData(spells: any) { + const encodeSpellsData = encodeSpells(spells); + let argTypes = ["string[]", "bytes[]"]; + return web3.eth.abi.encodeParameters(argTypes, [ + encodeSpellsData[0], + encodeSpellsData[1], + ]); +}; diff --git a/scripts/tests/encodeSpells.ts b/scripts/tests/encodeSpells.ts new file mode 100644 index 00000000..62a7a8bb --- /dev/null +++ b/scripts/tests/encodeSpells.ts @@ -0,0 +1,17 @@ +import { web3 } from "hardhat"; +import { abis } from "../constant/abis"; + +export function encodeSpells(spells: any[]) { + const targets = spells.map((a) => a.connector); + const calldatas = spells.map((a) => { + const functionName = a.method; + // console.log(functionName) + const abi = abis.connectors[a.connector].find((b: { name: any }) => { + return b.name === functionName; + }); + // console.log(functionName) + if (!abi) throw new Error("Couldn't find function"); + return web3.eth.abi.encodeFunctionCall(abi, a.args); + }); + return [targets, calldatas]; +} diff --git a/scripts/tests/getMasterSigner.ts b/scripts/tests/getMasterSigner.ts new file mode 100644 index 00000000..c09fec74 --- /dev/null +++ b/scripts/tests/getMasterSigner.ts @@ -0,0 +1,35 @@ +import { ethers, network } from "hardhat"; +import { addresses } from "./mainnet/addresses"; +import { addresses as addressesPolygon } from "./polygon/addresses"; +import { addresses as addressesArbitrum } from "./arbitrum/addresses"; +import { addresses as addressesAvalanche } from "./avalanche/addresses"; +import { abis } from "../constant/abis"; + +function getAddress(network: string | undefined) { + if (network === "polygon") return addressesPolygon.core.instaIndex; + else if (network === "arbitrum") return addressesArbitrum.core.instaIndex; + else if (network === "avalanche") return addressesAvalanche.core.instaIndex; + else return addresses.core.instaIndex; +} + +export async function getMasterSigner() { + const [_, __, ___, wallet3] = await ethers.getSigners(); + const instaIndex = new ethers.Contract( + getAddress(String(process.env.networkType)), + abis.core.instaIndex, + wallet3 + ); + + const masterAddress = await instaIndex.master(); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [masterAddress], + }); + + await network.provider.send("hardhat_setBalance", [ + masterAddress, + "0x8ac7230489e80000", // 1e19 wei + ]); + + return await ethers.getSigner(masterAddress); +} diff --git a/scripts/tests/global-test.ts b/scripts/tests/global-test.ts new file mode 100644 index 00000000..7a00510f --- /dev/null +++ b/scripts/tests/global-test.ts @@ -0,0 +1,44 @@ +import { promises as fs } from "fs"; + +import { join } from "path"; +import { execScript } from "./command"; + +let start: number, end: number; + +async function testRunner() { + const chain = ["avalanche", "mainnet", "polygon"]; + start = Date.now(); + + for (let ch of chain) { + console.log(`📗Running test for %c${ch}: `, "blue"); + let path: string; + const testsPath = join(__dirname, "../../test", ch); + await fs.access(testsPath); + const availableTests = await fs.readdir(testsPath); + + if (availableTests.length !== 0) { + for (let test of availableTests) { + path = join(testsPath, test); + path += "/*"; + await execScript({ + cmd: "npx", + args: ["hardhat", "test", path], + env: { + networkType: ch, + }, + }); + } + } + } + + end = Date.now(); +} + +testRunner() + .then(() => + console.log( + `🙌 finished running the test, total time taken ${(end - start) / + 1000} sec` + ) + ) + .catch((err) => console.error("❌ failed due to error: ", err)); diff --git a/scripts/impersonate.js b/scripts/tests/impersonate.ts similarity index 70% rename from scripts/impersonate.js rename to scripts/tests/impersonate.ts index fb485cee..29f010d8 100644 --- a/scripts/impersonate.js +++ b/scripts/tests/impersonate.ts @@ -1,6 +1,6 @@ -const { ethers, network } = require("hardhat"); +import { ethers, network } from "hardhat"; -module.exports = async (accounts) => { +export const impersonateAccounts = async (accounts: any) => { const signers = []; for (const account of accounts) { await network.provider.request({ @@ -10,6 +10,5 @@ module.exports = async (accounts) => { signers.push(await ethers.getSigner(account)); } - return signers; }; diff --git a/scripts/tests/mainnet/addresses.ts b/scripts/tests/mainnet/addresses.ts new file mode 100644 index 00000000..f3e74d20 --- /dev/null +++ b/scripts/tests/mainnet/addresses.ts @@ -0,0 +1,11 @@ +export const addresses: Record = { + connectors: { + "basic": "0xe5398f279175962E56fE4c5E0b62dc7208EF36c6", + "auth": "0xd1aff9f2acf800c876c409100d6f39aea93fc3d9", + "INSTAPOOL-A": "0x5806af7ab22e2916fa582ff05731bf7c682387b2", + }, + core: { + "connectorsV2": "0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11", + "instaIndex": "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723", + }, +}; diff --git a/scripts/tests/mainnet/tokens.ts b/scripts/tests/mainnet/tokens.ts new file mode 100644 index 00000000..d3c95180 --- /dev/null +++ b/scripts/tests/mainnet/tokens.ts @@ -0,0 +1,23 @@ +export const tokens = { + eth: { + type: "token", + symbol: "ETH", + name: "Ethereum", + address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + decimals: 18, + }, + dai: { + type: "token", + symbol: "DAI", + name: "DAI Stable", + address: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + decimals: 18, + }, + usdc: { + type: "token", + symbol: "USDC", + name: "USD Coin", + address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + decimals: 6, + }, +}; diff --git a/scripts/polygon/constant/addresses.js b/scripts/tests/polygon/addresses.ts similarity index 84% rename from scripts/polygon/constant/addresses.js rename to scripts/tests/polygon/addresses.ts index baaaa3da..7c13c34c 100644 --- a/scripts/polygon/constant/addresses.js +++ b/scripts/tests/polygon/addresses.ts @@ -1,4 +1,4 @@ -module.exports = { +export const addresses: Record = { connectors: { basic: "0x1cAF5EC802ca602E98139AD96A8f2B7BC524264E", auth: "0xf6474aD0dA75A0dE15D2c915e601D9f754B9e6fe", @@ -7,4 +7,4 @@ module.exports = { connectorsV2: "0x2A00684bFAb9717C21271E0751BCcb7d2D763c88", instaIndex: "0xA9B99766E6C676Cf1975c0D3166F96C0848fF5ad", }, -}; +}; \ No newline at end of file diff --git a/scripts/tests/polygon/tokens.ts b/scripts/tests/polygon/tokens.ts new file mode 100644 index 00000000..d621b68e --- /dev/null +++ b/scripts/tests/polygon/tokens.ts @@ -0,0 +1,30 @@ +export const tokens = { + matic: { + type: "token", + symbol: "MATIC", + name: "Matic", + address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + decimals: 18, + }, + eth: { + type: "token", + symbol: "ETH", + name: "Ethereum", + address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + decimals: 18, + }, + dai: { + type: "token", + symbol: "DAI", + name: "DAI Stable", + address: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + decimals: 18, + }, + usdc: { + type: "token", + symbol: "USDC", + name: "USD Coin", + address: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + decimals: 6, + }, +}; diff --git a/scripts/tests/run-tests.ts b/scripts/tests/run-tests.ts new file mode 100644 index 00000000..de397629 --- /dev/null +++ b/scripts/tests/run-tests.ts @@ -0,0 +1,68 @@ +import inquirer from "inquirer"; +import { promises as fs } from "fs"; + +import { join } from "path"; +import { execScript } from "./command"; + +let start: number, end: number; + +async function testRunner() { + const { chain } = await inquirer.prompt([ + { + name: "chain", + message: "What chain do you want to run tests on?", + type: "list", + choices: ["mainnet", "polygon", "avalanche", "arbitrum"], + }, + ]); + const testsPath = join(__dirname, "../../test", chain); + await fs.access(testsPath); + const availableTests = await fs.readdir(testsPath); + if (availableTests.length === 0) { + throw new Error(`No tests available for ${chain}`); + } + + const { testName } = await inquirer.prompt([ + { + name: "testName", + message: "For which resolver you want to run the tests?", + type: "list", + choices: ["all", ...availableTests], + }, + ]); + start = Date.now(); + let path: string; + if (testName === "all") { + for (let test of availableTests) { + path = join(testsPath, test); + path += "/*"; + await execScript({ + cmd: "npx", + args: ["hardhat", "test", path], + env: { + networkType: chain, + }, + }); + } + } else { + path = join(testsPath, testName); + path += "/*"; + + await execScript({ + cmd: "npx", + args: ["hardhat", "test", path], + env: { + networkType: chain, + }, + }); + } + end = Date.now(); +} + +testRunner() + .then(() => + console.log( + `🙌 finished the test runner, time taken ${(end - start) / 1000} sec` + ) + ) + .catch((err) => console.error("❌ failed due to error: ", err)); diff --git a/status-checks/check.js b/status-checks/check.js deleted file mode 100644 index c0848d77..00000000 --- a/status-checks/check.js +++ /dev/null @@ -1,370 +0,0 @@ -const fs = require('fs') -const path = require('path') - -const forbiddenStrings = ['selfdestruct'] - -const getConnectorsList = async (connectorsRootsDirs) => { - try { - const connectors = [] - for (let index = 0; index < connectorsRootsDirs.length; index++) { - const dirs = [connectorsRootsDirs[index]] - while (dirs.length) { - const currentDir = dirs.pop() - const subs = fs.readdirSync(currentDir, { withFileTypes: true }) - for (let index = 0; index < subs.length; index++) { - const sub = subs[index] - if (sub.isFile() && sub.name === 'main.sol') { - connectors.push(currentDir) - } else if (sub.isDirectory()) { - dirs.push(`${currentDir}/${sub.name}`) - } - } - } - } - return connectors.map(dir => ({ path: dir })) - } catch (error) { - return Promise.reject(error) - } -} - -const checkCodeForbidden = async (code, codePath) => { - try { - const forbidden = [] - for (let i1 = 0; i1 < forbiddenStrings.length; i1++) { - const forbiddenStr = forbiddenStrings[i1] - const strs = code.split('\n') - for (let i2 = 0; i2 < strs.length; i2++) { - if (strs[i2].includes(forbiddenStr)) { - forbidden.push(`found '${forbiddenStr}' in ${codePath}:${i2 + 1}`) - } - } - } - return forbidden - } catch (error) { - return Promise.reject(error) - } -} - -const checkForbidden = async (parentPath, codePath = './main.sol') => { - try { - if (codePath.startsWith('@')) { - codePath = path.resolve('node_modules', `./${codePath}`) - } else { - codePath = path.resolve(parentPath, codePath) - } - const code = fs.readFileSync(codePath, { encoding: 'utf8' }) - const forbidden = await checkCodeForbidden(code, codePath) - if (code.includes('import')) { - const importsPathes = code - .split('\n') - .filter(str => str.includes('import') && str.includes('from') && str.includes('.sol')) - .map(str => str.split('from')[1].replace(/["; ]/gi, '')) - for (let index = 0; index < importsPathes.length; index++) { - const forbiddenErrors = await checkForbidden( - path.parse(codePath).dir, - importsPathes[index] - ) - forbidden.push(...forbiddenErrors) - } - } - return codePath.endsWith('main.sol') ? { forbiddenErrors: forbidden, code } : forbidden - } catch (error) { - return Promise.reject(error) - } -} - -const checkEvents = async (connector) => { - try { - const errors = [] - const warnings = [] - const eventsPath = `${connector.path}/events.sol` - const mainPath = `${connector.path}/main.sol` - if (connector.events.length) { - const eventNames = [] - for (let i1 = 0; i1 < connector.mainEvents.length; i1++) { - const mainEvent = connector.mainEvents[i1] - const name = mainEvent.split('(')[0] - eventNames.push(name) - const event = connector.events.find(e => e.split('(')[0].split(' ')[1] === name) - if (event) { - const mainEventArgs = mainEvent.split('(')[1].split(')')[0].split(',').map(a => a.trim()) - const eventArgs = event.split('(')[1].split(')')[0].split(',').map(a => a.trim()) - if (mainEventArgs.length !== eventArgs.length) { - errors.push(`arguments amount don't match for ${name} at ${mainPath}:${connector.mainEventsLines[i1]}`) - continue - } - for (let i2 = 0; i2 < mainEventArgs.length; i2++) { - if (!mainEventArgs[i2].startsWith(eventArgs[i2].split(' ')[0])) { - errors.push(`invalid argument #${i2 + 1} for ${name} at ${mainPath}:${connector.mainEventsLines[i1]}`) - } - } - } else { - errors.push(`event ${name} missing at ${eventsPath}`) - } - } - if (connector.mainEvents.length < connector.events.length) { - const deprecatedEvents = connector.events.filter(e => { - let used = false - for (let index = 0; index < eventNames.length; index++) { - if (e.split('(')[0].split(' ')[1] === eventNames[index]) used = true - } - return !used - }) - warnings.push(`${deprecatedEvents.map(e => e.split('(')[0].split(' ')[1]).join(', ')} event(s) not used at ${connector.path}/main.sol`) - } - } else { - warnings.push(`missing events file for ${connector.path}/main.sol`) - } - return { eventsErrors: errors, eventsWarnings: warnings } - } catch (error) { - return Promise.reject(error) - } -} - -const getCommments = async (strs) => { - try { - const comments = [] - let type - for (let index = strs.length - 1; index >= 0; index--) { - const str = strs[index] - if (!type) { - if (str.trim().startsWith('//')) { - type = 'single' - } else if (str.trim().startsWith('*/')) { - type = 'multiple' - } - } - if (type === 'single' && str.trim().startsWith('//')) { - comments.push(str.replace(/[/]/gi, '').trim()) - } else if (type === 'multiple' && !str.trim().startsWith('/**') && !str.trim().startsWith('*/')) { - comments.push(str.replace(/[*]/gi, '').trim()) - } else if (type === 'single' && !str.trim().startsWith('//')) { - break - } else if (type === 'multiple' && str.trim().startsWith('/**')) { - break - } - } - return comments - } catch (error) { - return Promise.reject(error) - } -} - -const parseCode = async (connector) => { - try { - const strs = connector.code.split('\n') - const events = [] - const eventsFirstLines = [] - let func = [] - let funcs = [] - let event = [] - let mainEvents = [] - let firstLine - let mainEventsLines = [] - for (let index = 0; index < strs.length; index++) { - const str = strs[index] - if (str.includes('function') && !str.trim().startsWith('//')) { - func = [str] - firstLine = index + 1 - } else if (func.length && !str.trim().startsWith('//')) { - func.push(str) - } - if (func.length && str.startsWith(`${func[0].split('function')[0]}}`)) { - funcs.push({ - raw: func.map(str => str.trim()).join(' '), - comments: await getCommments(strs.slice(0, firstLine)), - firstLine - }) - func = [] - } - } - const allPublicFuncs = funcs - .filter(({ raw }) => { - return raw.includes('external') || raw.includes('public') - }) - .map(f => { - const name = f.raw.split('(')[0].split('function')[1].trim() - return { - ...f, - name - } - }) - funcs = allPublicFuncs - .filter(({ raw }) => { - if (raw.includes('returns')) { - const returns = raw.split('returns')[1].split('(')[1].split(')')[0] - return returns.includes('string') && returns.includes('bytes') - } - return false - }) - .map(f => { - const args = f.raw.split('(')[1].split(')')[0].split(',') - .map(arg => arg.trim()) - .filter(arg => arg !== '') - return { - ...f, - args - } - }) - const eventsPath = `${connector.path}/events.sol` - if (fs.existsSync(eventsPath)) { - mainEvents = funcs - .map(({ raw }) => raw.split('_eventName')[2].trim().split('"')[1]) - .filter(raw => !!raw) - mainEventsLines = mainEvents.map(me => strs.findIndex(str => str.includes(me)) + 1) - const eventsCode = fs.readFileSync(eventsPath, { encoding: 'utf8' }) - const eventsStrs = eventsCode.split('\n') - for (let index = 0; index < eventsStrs.length; index++) { - const str = eventsStrs[index] - if (str.includes('event')) { - event = [str] - firstLine = index + 1 - } else if (event.length && !str.trim().startsWith('//')) { - event.push(str) - } - if (event.length && str.includes(')')) { - events.push(event.map(str => str.trim()).join(' ')) - eventsFirstLines.push(firstLine) - event = [] - } - } - } - return { - ...connector, - events, - eventsFirstLines, - mainEvents, - mainEventsLines, - funcs, - allPublicFuncs - } - } catch (error) { - return Promise.reject(error) - } -} - -const checkComments = async (connector) => { - try { - const errors = [] - for (let i1 = 0; i1 < connector.funcs.length; i1++) { - const func = connector.funcs[i1] - for (let i2 = 0; i2 < func.args.length; i2++) { - const argName = func.args[i2].split(' ').pop() - if (!func.comments.some( - comment => comment.startsWith('@param') && comment.split(' ')[1] === argName - )) { - errors.push(`argument ${argName} has no @param for function ${func.name} at ${connector.path}/main.sol:${func.firstLine}`) - } - } - const reqs = ['@dev', '@notice'] - for (let i3 = 0; i3 < reqs.length; i3++) { - if (!func.comments.some(comment => comment.startsWith(reqs[i3]))) { - errors.push(`no ${reqs[i3]} for function ${func.name} at ${connector.path}/main.sol:${func.firstLine}`) - } - } - } - return errors - } catch (error) { - return Promise.reject(error) - } -} - -const checkPublicFuncs = async (connector) => { - try { - const errors = [] - for (let i1 = 0; i1 < connector.allPublicFuncs.length; i1++) { - const { raw, firstLine, name } = connector.allPublicFuncs[i1] - if (!raw.includes('payable')) { - errors.push(`public function ${name} is not payable at ${connector.path}/main.sol:${firstLine}`) - } - } - return errors - } catch (error) { - return Promise.reject(error) - } -} - -const checkName = async (connector) => { - try { - const strs = connector.code.split('\n') - let haveName = false - for (let index = strs.length - 1; index > 0; index--) { - const str = strs[index] - if (str.includes('string') && str.includes('public') && str.includes('name = ')) { - haveName = true - } - } - return haveName ? [] : [`name variable missing in ${connector.path}/main.sol`] - } catch (error) { - return Promise.reject(error) - } -} - -const checkHeadComments = async (connector) => { - try { - const errors = [] - const strs = connector.code.split('\n') - let haveTitle = false - let haveDev = false - for (let index = 0; index < strs.length; index++) { - if (!strs[index].includes('{')) { - if (strs[index].includes('@title')) haveTitle = true - if (strs[index].includes('@dev')) haveDev = true - } else { - break - } - } - if (!haveTitle) errors.push(`@title missing in ${connector.path}/main.sol`) - if (!haveDev) errors.push(`@dev missing in ${connector.path}/main.sol`) - return errors - } catch (error) { - return Promise.reject(error) - } -} - -async function checkMain () { - try { - const connectorsRootsDirsDefault = ['mainnet', 'polygon'].map(v=> `contracts/${v}/connectors`) - const customPathArg = process.argv.find(a => a.startsWith('connector=')) - const connectorsRootsDirs = customPathArg - ? [customPathArg.slice(10)] - : connectorsRootsDirsDefault - const errors = [] - const warnings = [] - const connectors = await getConnectorsList(connectorsRootsDirs) - for (let index = 0; index < connectors.length; index++) { - const { forbiddenErrors, code } = await checkForbidden(connectors[index].path) - connectors[index].code = code - connectors[index] = await parseCode(connectors[index]) - const { eventsErrors, eventsWarnings } = await checkEvents(connectors[index]) - const commentsErrors = await checkComments(connectors[index]) - const nameErrors = await checkName(connectors[index]) - const headCommentsErrors = await checkHeadComments(connectors[index]) - const publicFuncsErrors = await checkPublicFuncs(connectors[index]) - - errors.push(...forbiddenErrors) - errors.push(...eventsErrors) - errors.push(...commentsErrors) - errors.push(...nameErrors) - errors.push(...headCommentsErrors) - errors.push(...publicFuncsErrors) - warnings.push(...eventsWarnings) - } - if (errors.length) { - console.log('\x1b[31m%s\x1b[0m', `Total errors: ${errors.length}`) - errors.forEach(error => console.log('\x1b[31m%s\x1b[0m', error)) - } else { - console.log('\x1b[32m%s\x1b[0m', 'No Errors Found') - } - if (warnings.length) { - console.log('\x1b[33m%s\x1b[0m', `Total warnings: ${warnings.length}`) - warnings.forEach(warning => console.log('\x1b[33m%s\x1b[0m', warning)) - } else { - console.log('\x1b[32m%s\x1b[0m', 'No Warnings Found') - } - if (errors.length) return Promise.reject(errors.join('\n')) - } catch (error) { - console.error('check execution error:', error) - } -} -module.exports = checkMain diff --git a/status-checks/check.ts b/status-checks/check.ts new file mode 100644 index 00000000..371c3825 --- /dev/null +++ b/status-checks/check.ts @@ -0,0 +1,448 @@ +import * as fs from "fs"; +import * as path from "path"; + +const forbiddenStrings: any = ["selfdestruct"]; + +const getConnectorsList= async (connectorsRootsDirs: string | any[]): Promise> => { + try { + const connectors = []; + for (let index = 0; index < connectorsRootsDirs.length; index++) { + const dirs = [connectorsRootsDirs[index]]; + while (dirs.length) { + const currentDir = dirs.pop(); + const subs = fs.readdirSync(currentDir, { withFileTypes: true }); + for (let index = 0; index < subs.length; index++) { + const sub = subs[index]; + if (sub.isFile() && sub.name === "main.sol") { + connectors.push(currentDir); + } else if (sub.isDirectory()) { + dirs.push(`${currentDir}/${sub.name}`); + } + } + } + } + return connectors.map((dir) => ({ path: dir })); + } catch (error) { + return Promise.reject(error); + } +}; + +const checkCodeForbidden = async (code: string, codePath: string) => { + try { + const forbidden = []; + for (let i1 = 0; i1 < forbiddenStrings.length; i1++) { + const forbiddenStr = forbiddenStrings[i1]; + const strs = code.split("\n"); + for (let i2 = 0; i2 < strs.length; i2++) { + if (strs[i2].includes(forbiddenStr)) { + forbidden.push(`found '${forbiddenStr}' in ${codePath}:${i2 + 1}`); + } + } + } + return forbidden; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkForbidden = async (parentPath: string, codePath = "./main.sol") => { + try { + if (codePath.startsWith("@")) { + codePath = path.resolve("node_modules", `./${codePath}`); + } else { + codePath = path.resolve(parentPath, codePath); + } + const code = fs.readFileSync(codePath, { encoding: "utf8" }); + const forbidden: any = await checkCodeForbidden(code, codePath); + if (code.includes("import")) { + const importsPathes = code + .split("\n") + .filter( + (str) => + str.includes("import") && + str.includes("from") && + str.includes(".sol") + ) + .map((str) => str.split("from")[1].replace(/["; ]/gi, "")); + for (let index = 0; index < importsPathes.length; index++) { + const forbiddenErrors = await checkForbidden( + path.parse(codePath).dir, + importsPathes[index] + ); + forbidden.push(...forbiddenErrors); + } + } + return codePath.endsWith("main.sol") + ? { forbiddenErrors: forbidden, code } + : forbidden; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkEvents = async (connector: { + path: any; + events?: any; + mainEvents?: any; + mainEventsLines?: any; +}) => { + try { + const errors = []; + const warnings = []; + const eventsPath = `${connector.path}/events.sol`; + const mainPath = `${connector.path}/main.sol`; + if (connector.events.length) { + const eventNames = []; + for (let i1 = 0; i1 < connector.mainEvents.length; i1++) { + const mainEvent = connector.mainEvents[i1]; + const name = mainEvent.split("(")[0]; + eventNames.push(name); + const event = connector.events.find( + (e: string) => e.split("(")[0].split(" ")[1] === name + ); + if (event) { + const mainEventArgs = mainEvent + .split("(")[1] + .split(")")[0] + .split(",") + .map((a: string) => a.trim()); + const eventArgs = event + .split("(")[1] + .split(")")[0] + .split(",") + .map((a: string) => a.trim()); + if (mainEventArgs.length !== eventArgs.length) { + errors.push( + `arguments amount don't match for ${name} at ${mainPath}:${connector.mainEventsLines[i1]}` + ); + continue; + } + for (let i2 = 0; i2 < mainEventArgs.length; i2++) { + if (!mainEventArgs[i2].startsWith(eventArgs[i2].split(" ")[0])) { + errors.push( + `invalid argument #${i2 + 1} for ${name} at ${mainPath}:${ + connector.mainEventsLines[i1] + }` + ); + } + } + } else { + errors.push(`event ${name} missing at ${eventsPath}`); + } + } + if (connector.mainEvents.length < connector.events.length) { + const deprecatedEvents = connector.events.filter((e) => { + let used = false; + for (let index = 0; index < eventNames.length; index++) { + if (e.split("(")[0].split(" ")[1] === eventNames[index]) + used = true; + } + return !used; + }); + warnings.push( + `${deprecatedEvents + .map((e: string) => e.split("(")[0].split(" ")[1]) + .join(", ")} event(s) not used at ${connector.path}/main.sol` + ); + } + } else { + warnings.push(`missing events file for ${connector.path}/main.sol`); + } + return { eventsErrors: errors, eventsWarnings: warnings }; + } catch (error) { + return Promise.reject(error); + } +}; + +const getCommments = async (strs: string | any[]) => { + try { + const comments = []; + let type: string; + for (let index = strs.length - 1; index >= 0; index--) { + const str = strs[index]; + if (!type) { + if (str.trim().startsWith("//")) { + type = "single"; + } else if (str.trim().startsWith("*/")) { + type = "multiple"; + } + } + if (type === "single" && str.trim().startsWith("//")) { + comments.push(str.replace(/[/]/gi, "").trim()); + } else if ( + type === "multiple" && + !str.trim().startsWith("/**") && + !str.trim().startsWith("*/") + ) { + comments.push(str.replace(/[*]/gi, "").trim()); + } else if (type === "single" && !str.trim().startsWith("//")) { + break; + } else if (type === "multiple" && str.trim().startsWith("/**")) { + break; + } + } + return comments; + } catch (error) { + return Promise.reject(error); + } +}; + +const parseCode = async (connector: { path: any; code?: any }) => { + try { + const strs = connector.code.split("\n"); + const events = []; + const eventsFirstLines = []; + let func = []; + let funcs = []; + let event = []; + let mainEvents = []; + let firstLine: number; + let mainEventsLines = []; + for (let index = 0; index < strs.length; index++) { + const str = strs[index]; + if (str.includes("function") && !str.trim().startsWith("//")) { + func = [str]; + firstLine = index + 1; + } else if (func.length && !str.trim().startsWith("//")) { + func.push(str); + } + if (func.length && str.startsWith(`${func[0].split("function")[0]}}`)) { + funcs.push({ + raw: func.map((str) => str.trim()).join(" "), + comments: await getCommments(strs.slice(0, firstLine)), + firstLine, + }); + func = []; + } + } + const allPublicFuncs = funcs + .filter(({ raw }) => { + return raw.includes("external") || raw.includes("public"); + }) + .map((f) => { + const name = f.raw + .split("(")[0] + .split("function")[1] + .trim(); + return { + ...f, + name, + }; + }); + funcs = allPublicFuncs + .filter(({ raw }) => { + if (raw.includes("returns")) { + const returns = raw + .split("returns")[1] + .split("(")[1] + .split(")")[0]; + return returns.includes("string") && returns.includes("bytes"); + } + return false; + }) + .map((f) => { + const args = f.raw + .split("(")[1] + .split(")")[0] + .split(",") + .map((arg) => arg.trim()) + .filter((arg) => arg !== ""); + return { + ...f, + args, + }; + }); + const eventsPath = `${connector.path}/events.sol`; + if (fs.existsSync(eventsPath)) { + mainEvents = funcs + .map( + ({ raw }) => + raw + .split("_eventName")[2] + .trim() + .split('"')[1] + ) + .filter((raw) => !!raw); + mainEventsLines = mainEvents.map( + (me) => strs.findIndex((str: string | any[]) => str.includes(me)) + 1 + ); + const eventsCode = fs.readFileSync(eventsPath, { encoding: "utf8" }); + const eventsStrs = eventsCode.split("\n"); + for (let index = 0; index < eventsStrs.length; index++) { + const str = eventsStrs[index]; + if (str.includes("event")) { + event = [str]; + firstLine = index + 1; + } else if (event.length && !str.trim().startsWith("//")) { + event.push(str); + } + if (event.length && str.includes(")")) { + events.push(event.map((str) => str.trim()).join(" ")); + eventsFirstLines.push(firstLine); + event = []; + } + } + } + return { + ...connector, + events, + eventsFirstLines, + mainEvents, + mainEventsLines, + funcs, + allPublicFuncs, + }; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkComments = async (connector) => { + try { + const errors = []; + for (let i1 = 0; i1 < connector.funcs.length; i1++) { + const func = connector.funcs[i1]; + for (let i2 = 0; i2 < func.args.length; i2++) { + const argName = func.args[i2].split(" ").pop(); + if ( + !func.comments.some( + (comment: string) => + comment.startsWith("@param") && comment.split(" ")[1] === argName + ) + ) { + errors.push( + `argument ${argName} has no @param for function ${func.name} at ${connector.path}/main.sol:${func.firstLine}` + ); + } + } + const reqs = ["@dev", "@notice"]; + for (let i3 = 0; i3 < reqs.length; i3++) { + if (!func.comments.some((comment) => comment.startsWith(reqs[i3]))) { + errors.push( + `no ${reqs[i3]} for function ${func.name} at ${connector.path}/main.sol:${func.firstLine}` + ); + } + } + } + return errors; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkPublicFuncs = async (connector: { + path: any; + allPublicFuncs?: any; +}) => { + try { + const errors = []; + for (let i1 = 0; i1 < connector.allPublicFuncs.length; i1++) { + const { raw, firstLine, name } = connector.allPublicFuncs[i1]; + if (!raw.includes("payable")) { + errors.push( + `public function ${name} is not payable at ${connector.path}/main.sol:${firstLine}` + ); + } + } + return errors; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkName = async (connector: { path: any; code?: any }) => { + try { + const strs = connector.code.split("\n"); + let haveName = false; + for (let index = strs.length - 1; index > 0; index--) { + const str = strs[index]; + if ( + str.includes("string") && + str.includes("public") && + str.includes("name = ") + ) { + haveName = true; + } + } + return haveName + ? [] + : [`name variable missing in ${connector.path}/main.sol`]; + } catch (error) { + return Promise.reject(error); + } +}; + +const checkHeadComments = async (connector: { path: any; code?: any }) => { + try { + const errors = []; + const strs = connector.code.split("\n"); + let haveTitle = false; + let haveDev = false; + for (let index = 0; index < strs.length; index++) { + if (!strs[index].includes("{")) { + if (strs[index].includes("@title")) haveTitle = true; + if (strs[index].includes("@dev")) haveDev = true; + } else { + break; + } + } + if (!haveTitle) errors.push(`@title missing in ${connector.path}/main.sol`); + if (!haveDev) errors.push(`@dev missing in ${connector.path}/main.sol`); + return errors; + } catch (error) { + return Promise.reject(error); + } +}; + +async function checkMain() { + try { + const connectorsRootsDirsDefault = ["mainnet", "polygon"].map( + (v) => `contracts/${v}/connectors` + ); + const customPathArg = process.argv.find((a) => a.startsWith("connector=")); + const connectorsRootsDirs = customPathArg + ? [customPathArg.slice(10)] + : connectorsRootsDirsDefault; + const errors = []; + const warnings = []; + const connectors = await getConnectorsList(connectorsRootsDirs); + for (let index = 0; index < connectors.length; index++) { + const { forbiddenErrors, code } = await checkForbidden( + connectors[index].path + ); + connectors[index].code = code; + connectors[index] = await parseCode(connectors[index]); + const { eventsErrors, eventsWarnings } = await checkEvents( + connectors[index] + ); + const commentsErrors = await checkComments(connectors[index]); + const nameErrors = await checkName(connectors[index]); + const headCommentsErrors = await checkHeadComments(connectors[index]); + const publicFuncsErrors = await checkPublicFuncs(connectors[index]); + + errors.push(...forbiddenErrors); + errors.push(...eventsErrors); + errors.push(...commentsErrors); + errors.push(...nameErrors); + errors.push(...headCommentsErrors); + errors.push(...publicFuncsErrors); + warnings.push(...eventsWarnings); + } + if (errors.length) { + console.log("\x1b[31m%s\x1b[0m", `Total errors: ${errors.length}`); + errors.forEach((error) => console.log("\x1b[31m%s\x1b[0m", error)); + } else { + console.log("\x1b[32m%s\x1b[0m", "No Errors Found"); + } + if (warnings.length) { + console.log("\x1b[33m%s\x1b[0m", `Total warnings: ${warnings.length}`); + warnings.forEach((warning) => console.log("\x1b[33m%s\x1b[0m", warning)); + } else { + console.log("\x1b[32m%s\x1b[0m", "No Warnings Found"); + } + if (errors.length) return Promise.reject(errors.join("\n")); + } catch (error) { + console.error("check execution error:", error); + } +} +export default checkMain; diff --git a/status-checks/checks.js b/status-checks/checks.js deleted file mode 100644 index 871dccf0..00000000 --- a/status-checks/checks.js +++ /dev/null @@ -1,13 +0,0 @@ -const checkMain = require('./check') - -module.exports = [{ - name: 'Solidity check', - callback: async () => { - try { - await checkMain() - return 'Check passed!' - } catch (error) { - throw new Error('Check failed!') - } - } -}] diff --git a/status-checks/checks.ts b/status-checks/checks.ts new file mode 100644 index 00000000..8eb8fa71 --- /dev/null +++ b/status-checks/checks.ts @@ -0,0 +1,15 @@ +import checkMain from "./check"; + +export default [ + { + name: "Solidity check", + callback: async () => { + try { + await checkMain(); + return "Check passed!"; + } catch (error) { + throw new Error("Check failed!"); + } + }, + }, +]; diff --git a/status-checks/huskyCheck.js b/status-checks/huskyCheck.js deleted file mode 100644 index c7f7fc82..00000000 --- a/status-checks/huskyCheck.js +++ /dev/null @@ -1,9 +0,0 @@ -const checkMain = require('./check'); - -(async function runHusky () { - try { - await checkMain() - } catch (error) { - process.exit(1) - } -})() diff --git a/status-checks/huskyCheck.ts b/status-checks/huskyCheck.ts new file mode 100644 index 00000000..658a76d9 --- /dev/null +++ b/status-checks/huskyCheck.ts @@ -0,0 +1,9 @@ +import checkMain from "./check"; + +(async function runHusky() { + try { + await checkMain(); + } catch (error) { + process.exit(1); + } +})(); diff --git a/status-checks/index.js b/status-checks/index.js deleted file mode 100644 index 0be169ba..00000000 --- a/status-checks/index.js +++ /dev/null @@ -1,54 +0,0 @@ -const cp = require('child_process') -const fetch = require('node-fetch') - -const checks = require('./checks') - -const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/') - -function getCurrentCommitSha () { - return cp - .execSync('git rev-parse HEAD') - .toString() - .trim() -} -// The SHA provied by GITHUB_SHA is the merge (PR) commit. -// We need to get the current commit sha ourself. -const sha = getCurrentCommitSha() - -async function setStatus (context, state, description) { - return fetch(`https://api.github.com/repos/${owner}/${repo}/statuses/${sha}`, { - method: 'POST', - body: JSON.stringify({ - state, - description, - context - }), - headers: { - Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, - 'Content-Type': 'application/json' - } - }) -} - -(async () => { - console.log(`Starting status checks for commit ${sha}`) - - // Run in parallel - await Promise.all( - checks.map(async check => { - const { name, callback } = check - - await setStatus(name, 'pending', 'Running check..') - - try { - const response = await callback() - await setStatus(name, 'success', response) - } catch (err) { - const message = err ? err.message : 'Something went wrong' - await setStatus(name, 'failure', message) - } - }) - ) - - console.log('Finished status checks') -})() diff --git a/status-checks/index.ts b/status-checks/index.ts new file mode 100644 index 00000000..e3c91c00 --- /dev/null +++ b/status-checks/index.ts @@ -0,0 +1,56 @@ +import * as cp from "child_process"; +import fetch from "node-fetch"; + +import checks from "./checks"; + +const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); + +function getCurrentCommitSha() { + return cp + .execSync("git rev-parse HEAD") + .toString() + .trim(); +} +// The SHA provied by GITHUB_SHA is the merge (PR) commit. +// We need to get the current commit sha ourself. +const sha = getCurrentCommitSha(); + +async function setStatus(context: any, state: string, description: string) { + return fetch( + `https://api.github.com/repos/${owner}/${repo}/statuses/${sha}`, + { + method: "POST", + body: JSON.stringify({ + state, + description, + context, + }), + headers: { + Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, + "Content-Type": "application/json", + }, + } + ); +} + +(async () => { + console.log(`Starting status checks for commit ${sha}`); + // Run in parallel + await Promise.all( + checks.map(async (check: { name: any; callback: any }) => { + const { name, callback } = check; + + await setStatus(name, "pending", "Running check.."); + + try { + const response = await callback(); + await setStatus(name, "success", response); + } catch (err) { + const message = err ? err.message : "Something went wrong"; + await setStatus(name, "failure", message); + } + }) + ); + + console.log("Finished status checks"); +})(); diff --git a/status-checks/readme.md b/status-checks/readme.md index ed376c25..aa1ff952 100644 --- a/status-checks/readme.md +++ b/status-checks/readme.md @@ -1,4 +1,3 @@ - # Check run use diff --git a/test/uniswap-sell-beta/uniswap-sell-beta.js b/test/arbitrum/uniswap-sell-beta/uniswap-sell-beta.ts similarity index 80% rename from test/uniswap-sell-beta/uniswap-sell-beta.js rename to test/arbitrum/uniswap-sell-beta/uniswap-sell-beta.ts index 0530e2b4..c4cf12ac 100644 --- a/test/uniswap-sell-beta/uniswap-sell-beta.js +++ b/test/arbitrum/uniswap-sell-beta/uniswap-sell-beta.ts @@ -1,22 +1,23 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; -const { provider, deployContract } = waffle; +import { BigNumberish } from "@ethersproject/bignumber"; +import { Contract } from "@ethersproject/contracts"; +import { expect } from "chai"; +import hre, { artifacts } from "hardhat"; +const { ethers } = hre; const USDC_ADDR = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; const WETH_ADDR = "0x82af49447d8a07e3bd95bd0d56f35241523fbab1"; -describe("Uniswap-sell-beta", function() { - let UniswapSellBeta, uniswapSellBeta; +describe("Uniswap-sell-beta", function () { + let UniswapSellBeta, uniswapSellBeta: Contract; - async function setBalance(address) { - await network.provider.send("hardhat_setBalance", [ + async function setBalance(address: string) { + await hre.network.provider.send("hardhat_setBalance", [ address, ethers.utils.parseEther("10.0").toHexString(), ]); } - async function impersonate(owner, account, token0, decimals) { + async function impersonate(owner: string, account: any, token0: string, decimals: BigNumberish | undefined) { const tokenArtifact = await artifacts.readArtifact( "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20" ); @@ -50,8 +51,8 @@ describe("Uniswap-sell-beta", function() { } beforeEach(async () => { - const account0 = "0x36cc7B13029B5DEe4034745FB4F24034f3F2ffc6"; - const account1 = "0xce2cc46682e9c6d5f174af598fb4931a9c0be68e"; + const account0 = "0xa067668661c84476afcdc6fa5d758c4c01c34352"; + const account1 = "0x0db3fe3b770c95a0b99d1ed6f2627933466c0dd8"; const [owner, add1, add2] = await ethers.getSigners(); await impersonate(owner.address, account1, USDC_ADDR, 6); @@ -64,7 +65,7 @@ describe("Uniswap-sell-beta", function() { await uniswapSellBeta.deployed(); }); - it("Should have contracts deployed.", async function() { + it("Should have contracts deployed.", async function () { expect(uniswapSellBeta.address).to.exist; }); diff --git a/test/b.protocol/b.compound.test.js b/test/b.protocol/b.compound.test.js deleted file mode 100644 index 582a01ca..00000000 --- a/test/b.protocol/b.compound.test.js +++ /dev/null @@ -1,139 +0,0 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; -const { provider, deployContract } = waffle - -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") - -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/compound/main.sol/ConnectV2BCompound.json") - -describe("B.Compound", function () { - const connectorName = "B.COMPOUND-TEST-A" - - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - - const wallets = provider.getWallets() - const [wallet0, wallet1, wallet2, wallet3] = wallets - before(async () => { - await hre.network.provider.request({ - method: "hardhat_reset", - params: [ - { - forking: { - jsonRpcUrl: hre.config.networks.hardhat.forking.url, - blockNumber: 13300000, - }, - }, - ], - }); - masterSigner = await getMasterSigner(wallet3) - instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - connector = await deployAndEnableConnector({ - connectorName, - contractArtifact: connectV2CompoundArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - console.log("Connector address", connector.address) - }) - - it("Should have contracts deployed.", async function () { - expect(!!instaConnectorsV2.address).to.be.true; - expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; - expect(await connector.name()).to.be.equal("B.Compound-v1.0"); - }); - - describe("DSA wallet setup", function () { - it("Should build DSA v2", async function () { - dsaWallet0 = await buildDSAv2(wallet0.address) - expect(!!dsaWallet0.address).to.be.true; - }); - - it("Deposit ETH into DSA wallet", async function () { - await wallet0.sendTransaction({ - to: dsaWallet0.address, - value: ethers.utils.parseEther("10") - }); - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); - }); - }); - - describe("Main", function () { - - it("Should deposit ETH in Compound", async function () { - const amount = ethers.utils.parseEther("1") // 1 ETH - const spells = [ - { - connector: connectorName, - method: "deposit", - args: ["ETH-A", amount, 0, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); - }); - - it("Should borrow and payback DAI from Compound", async function () { - const amount = ethers.utils.parseEther("100") // 100 DAI - const setId = "83478237" - const spells = [ - { - connector: connectorName, - method: "borrow", - args: ["DAI-A", amount, 0, setId] - }, - { - connector: connectorName, - method: "payback", - args: ["DAI-A", 0, setId, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); - }); - - it("Should deposit all ETH in Compound", async function () { - const spells = [ - { - connector: connectorName, - method: "deposit", - args: ["ETH-A", constants.max_value, 0, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("0")); - }); - - it("Should withdraw all ETH from Compound", async function () { - const spells = [ - { - connector: connectorName, - method: "withdraw", - args: ["ETH-A", constants.max_value, 0, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); - }); - }) -}) diff --git a/test/aave/v1.test.js b/test/mainnet/aave/v1.test.ts similarity index 64% rename from test/aave/v1.test.js rename to test/mainnet/aave/v1.test.ts index 970ef3e8..a65c3a24 100644 --- a/test/aave/v1.test.js +++ b/test/mainnet/aave/v1.test.ts @@ -1,28 +1,27 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const abis = require("../../scripts/constant/abis"); -const addresses = require("../../scripts/constant/addresses"); -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector"); -const getMasterSigner = require("../../scripts/getMasterSigner"); -const buildDSAv2 = require("../../scripts/buildDSAv2"); -const ConnectV2AaveV1 = require("../../artifacts/contracts/mainnet/connectors/aave/v1/main.sol/ConnectV2AaveV1.json"); -const { parseEther } = require("@ethersproject/units"); -const encodeSpells = require("../../scripts/encodeSpells"); -const tokens = require("../../scripts/constant/tokens"); -const constants = require("../../scripts/constant/constant"); -const addLiquidity = require("../../scripts/addLiquidity"); +import hre from "hardhat"; +import { expect } from "chai"; +import { abis } from "../../../scripts/constant/abis"; +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { ConnectV2AaveV1, ConnectV2AaveV1__factory } from "../../../typechain"; +import { parseEther } from "@ethersproject/units"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { tokens } from "../../../scripts/tests/mainnet/tokens"; +import { constants } from "../../../scripts/constant/constant"; +import { addLiquidity } from "../../../scripts/tests/addLiquidity"; const { ethers } = hre; +import type { Signer, Contract } from "ethers"; -const ALCHEMY_ID = process.env.ALCHEMY_ID; - -describe("Aave V1", function() { +describe("Aave V1", function () { const connectorName = "AAVEV1-TEST-A"; - let wallet0, wallet1; - let dsaWallet0; - let instaConnectorsV2; - let connector; - let masterSigner; + let wallet0: Signer, wallet1: Signer; + let dsaWallet0: Contract; + let instaConnectorsV2: Contract; + let connector: any; + let masterSigner: Signer; before(async () => { try { @@ -31,6 +30,7 @@ describe("Aave V1", function() { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 12796965, }, @@ -45,7 +45,7 @@ describe("Aave V1", function() { ); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: ConnectV2AaveV1, + contractArtifact: ConnectV2AaveV1__factory, signer: masterSigner, connectors: instaConnectorsV2, }); @@ -58,16 +58,16 @@ describe("Aave V1", function() { it("should have contracts deployed", async () => { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); - describe("DSA wallet setup", function() { - it("Should build DSA v2", async function() { - dsaWallet0 = await buildDSAv2(wallet0.address); + describe("DSA wallet setup", function () { + it("Should build DSA v2", async function () { + dsaWallet0 = await buildDSAv2(wallet0.getAddress()); expect(!!dsaWallet0.address).to.be.true; }); - it("Deposit ETH into DSA wallet", async function() { + it("Deposit ETH into DSA wallet", async function () { await wallet0.sendTransaction({ to: dsaWallet0.address, value: parseEther("10"), @@ -78,8 +78,8 @@ describe("Aave V1", function() { }); }); - describe("Main", function() { - it("should deposit ETH in Aave V1", async function() { + describe("Main", function () { + it("should deposit ETH in Aave V1", async function () { const amt = parseEther("1"); const spells = [ { @@ -91,7 +91,7 @@ describe("Aave V1", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); @@ -100,7 +100,7 @@ describe("Aave V1", function() { ); }); - it("Should borrow and payback DAI from Aave V1", async function() { + it("Should borrow and payback DAI from Aave V1", async function () { const amt = parseEther("100"); // 100 DAI // add a little amount of dai to cover any shortfalls @@ -122,14 +122,14 @@ describe("Aave V1", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("9") ); }); - it("Should deposit all ETH in Aave V1", async function() { + it("Should deposit all ETH in Aave V1", async function () { const spells = [ { connector: connectorName, @@ -140,14 +140,14 @@ describe("Aave V1", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("0") ); }); - it("Should withdraw all ETH from Aave V1", async function() { + it("Should withdraw all ETH from Aave V1", async function () { const spells = [ { connector: connectorName, @@ -158,7 +158,7 @@ describe("Aave V1", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( ethers.utils.parseEther("10") diff --git a/test/aave/v2.test.js b/test/mainnet/aave/v2.test.ts similarity index 70% rename from test/aave/v2.test.js rename to test/mainnet/aave/v2.test.ts index 67aac908..6752e6a6 100644 --- a/test/aave/v2.test.js +++ b/test/mainnet/aave/v2.test.ts @@ -1,33 +1,34 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const abis = require("../../scripts/constant/abis"); -const addresses = require("../../scripts/constant/addresses"); -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector"); -const getMasterSigner = require("../../scripts/getMasterSigner"); -const buildDSAv2 = require("../../scripts/buildDSAv2"); -const ConnectV2AaveV2 = require("../../artifacts/contracts/mainnet/connectors/aave/v2/main.sol/ConnectV2AaveV2.json"); -const { parseEther } = require("@ethersproject/units"); -const encodeSpells = require("../../scripts/encodeSpells"); -const tokens = require("../../scripts/constant/tokens"); -const constants = require("../../scripts/constant/constant"); -const addLiquidity = require("../../scripts/addLiquidity"); +import { expect } from "chai"; +import hre from "hardhat"; +import { abis } from "../../../scripts/constant/abis"; +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { ConnectV2AaveV2, ConnectV2AaveV2__factory } from "../../../typechain"; +import { parseEther } from "@ethersproject/units"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { tokens } from "../../../scripts/tests/mainnet/tokens"; +import { constants } from "../../../scripts/constant/constant"; +import { addLiquidity } from "../../../scripts/tests/addLiquidity"; const { ethers } = hre; +import type { Signer, Contract } from "ethers"; -describe("Aave V2", function() { +describe("Aave V2", function () { const connectorName = "AAVEV2-TEST-A"; + let connector: any; - let wallet0, wallet1; - let dsaWallet0; - let instaConnectorsV2; - let connector; - let masterSigner; - + let wallet0: Signer, wallet1:Signer; + let dsaWallet0: any; + let instaConnectorsV2: Contract; + let masterSigner: Signer; before(async () => { await hre.network.provider.request({ method: "hardhat_reset", params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 12796965, }, @@ -42,7 +43,7 @@ describe("Aave V2", function() { ); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: ConnectV2AaveV2, + contractArtifact: ConnectV2AaveV2__factory, signer: masterSigner, connectors: instaConnectorsV2, }); @@ -52,16 +53,16 @@ describe("Aave V2", function() { it("should have contracts deployed", async () => { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); - describe("DSA wallet setup", function() { - it("Should build DSA v2", async function() { - dsaWallet0 = await buildDSAv2(wallet0.address); + describe("DSA wallet setup", function () { + it("Should build DSA v2", async function () { + dsaWallet0 = await buildDSAv2(wallet0.getAddress()); expect(!!dsaWallet0.address).to.be.true; }); - it("Deposit ETH into DSA wallet", async function() { + it("Deposit ETH into DSA wallet", async function () { await wallet0.sendTransaction({ to: dsaWallet0.address, value: parseEther("10"), @@ -72,8 +73,8 @@ describe("Aave V2", function() { }); }); - describe("Main", function() { - it("should deposit ETH in Aave V2", async function() { + describe("Main", function () { + it("should deposit ETH in Aave V2", async function () { const amt = parseEther("1"); const spells = [ { @@ -85,7 +86,7 @@ describe("Aave V2", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); @@ -94,7 +95,7 @@ describe("Aave V2", function() { ); }); - it("Should borrow and payback DAI from Aave V2", async function() { + it("Should borrow and payback DAI from Aave V2", async function () { const amt = parseEther("100"); // 100 DAI const setId = "83478237"; const spells = [ @@ -112,14 +113,14 @@ describe("Aave V2", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("9") ); }); - it("Should borrow and payback half DAI from Aave V2", async function() { + it("Should borrow and payback half DAI from Aave V2", async function () { const amt = parseEther("100"); // 100 DAI // const setId = "83478237"; await addLiquidity("dai", dsaWallet0.address, parseEther("1")); @@ -138,7 +139,7 @@ describe("Aave V2", function() { let tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("9") @@ -154,14 +155,14 @@ describe("Aave V2", function() { tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("9") ); }); - it("Should deposit all ETH in Aave V2", async function() { + it("Should deposit all ETH in Aave V2", async function () { const spells = [ { connector: connectorName, @@ -172,14 +173,14 @@ describe("Aave V2", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( ethers.utils.parseEther("0") ); }); - it("Should withdraw all ETH from Aave V2", async function() { + it("Should withdraw all ETH from Aave V2", async function () { const spells = [ { connector: connectorName, @@ -190,7 +191,7 @@ describe("Aave V2", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( ethers.utils.parseEther("10") @@ -215,7 +216,7 @@ describe("Aave V2", function() { const tx = await dsaWallet0 .connect(wallet0) - .cast(...encodeSpells(spells), wallet1.address); + .cast(...encodeSpells(spells), wallet1.getAddress()); await tx.wait(); expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( ethers.utils.parseEther("10") diff --git a/test/mainnet/b.protocol/b.compound.test.ts b/test/mainnet/b.protocol/b.compound.test.ts new file mode 100644 index 00000000..3402321a --- /dev/null +++ b/test/mainnet/b.protocol/b.compound.test.ts @@ -0,0 +1,138 @@ +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; //check +const { provider, deployContract } = waffle + +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { constants } from "../../../scripts/constant/constant"; +import { ConnectV2BCompound__factory } from "../../../typechain"; +import type { Signer, Contract } from "ethers"; + +describe("B.Compound", function () { + const connectorName = "B.COMPOUND-TEST-A" + + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: Contract; + + const wallets = provider.getWallets() + const [wallet0, wallet1, wallet2, wallet3] = wallets + before(async () => { + await hre.network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + // @ts-ignore + jsonRpcUrl: hre.config.networks.hardhat.forking.url, + blockNumber: 13300000, + }, + }, + ], + }); + masterSigner = await getMasterSigner() + instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2BCompound__factory, + signer: masterSigner, + connectors: instaConnectorsV2 + }) + console.log("Connector address", connector.address) + }) + + it("Should have contracts deployed.", async function () { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; + expect(await connector.name()).to.be.equal("B.Compound-v1.0"); + }); + + describe("DSA wallet setup", function () { + it("Should build DSA v2", async function () { + dsaWallet0 = await buildDSAv2(wallet0.address) + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit ETH into DSA wallet", async function () { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: ethers.utils.parseEther("10") + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); + }); + }); + + describe("Main", function () { + + it("Should deposit ETH in Compound", async function () { + const amount = ethers.utils.parseEther("1") // 1 ETH + const spells = [ + { + connector: connectorName, + method: "deposit", + args: ["ETH-A", amount, 0, 0] + } + ] + + const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) + const receipt = await tx.wait() + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); + }); + + it("Should borrow and payback DAI from Compound", async function () { + const amount = ethers.utils.parseEther("100") // 100 DAI + const setId = "83478237" + const spells = [ + { + connector: connectorName, + method: "borrow", + args: ["DAI-A", amount, 0, setId] + }, + { + connector: connectorName, + method: "payback", + args: ["DAI-A", 0, setId, 0] + } + ] + + const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) + const receipt = await tx.wait() + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); + }); + + it("Should deposit all ETH in Compound", async function () { + const spells = [ + { + connector: connectorName, + method: "deposit", + args: ["ETH-A", constants.max_value, 0, 0] + } + ] + + const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) + const receipt = await tx.wait() + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("0")); + }); + + it("Should withdraw all ETH from Compound", async function () { + const spells = [ + { + connector: connectorName, + method: "withdraw", + args: ["ETH-A", constants.max_value, 0, 0] + } + ] + + const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) + const receipt = await tx.wait() + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); + }); + }) +}) diff --git a/test/b.protocol/b.liquity.test.js b/test/mainnet/b.protocol/b.liquity.test.ts similarity index 82% rename from test/b.protocol/b.liquity.test.js rename to test/mainnet/b.protocol/b.liquity.test.ts index c50f111c..88e5f7c6 100644 --- a/test/b.protocol/b.liquity.test.js +++ b/test/mainnet/b.protocol/b.liquity.test.ts @@ -1,37 +1,33 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; //check const { provider, deployContract } = waffle -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") - -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectorLiquityArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/liquity/main.sol/ConnectV2BLiquity.json") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { abis } from "../../../scripts/constant/abis"; +import { ConnectV2BLiquity__factory } from "../../../typechain"; +import type { Signer, Contract } from "ethers"; +import { addresses } from "../../../scripts/tests/mainnet/addresses"; const LUSD_WHALE = "0x66017D22b0f8556afDd19FC67041899Eb65a21bb" // stability pool - const BAMM_ADDRESS = "0x0d3AbAA7E088C2c82f54B2f47613DA438ea8C598" describe("B.Liquity", function () { const connectorName = "B.LIQUITY-TEST-A" - let dsaWallet0; - let dsaWallet1; - let masterSigner; - let instaConnectorsV2; - let connector; - let manager; - let vat; - let lusd; - let bammToken; - let stabilityPool; + let dsaWallet0: any; + let dsaWallet1: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: Contract; + let manager: Contract; + let vat: Contract; + let lusd: Contract; + let bammToken: Contract; + let stabilityPool: Contract; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -41,17 +37,18 @@ describe("B.Liquity", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 12996875, }, }, ], }); - masterSigner = await getMasterSigner(wallet3) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectorLiquityArtifacts, + contractArtifact: ConnectV2BLiquity__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -73,7 +70,7 @@ describe("B.Liquity", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; expect(await connector.name()).to.be.equal("B.Liquity-v1"); }); @@ -178,12 +175,12 @@ describe("B.Liquity", function () { }) }) -function veryClose(n1, n2) { +function veryClose(n1: any, n2: any) { n1 = web3.utils.toBN(n1) n2 = web3.utils.toBN(n2) - _10000 = web3.utils.toBN(10000) - _9999 = web3.utils.toBN(9999) + let _10000 = web3.utils.toBN(10000) + let _9999 = web3.utils.toBN(9999) if (n1.mul(_10000).lt(n2.mul(_9999))) return false if (n2.mul(_10000).lt(n1.mul(_9999))) return false diff --git a/test/b.protocol/b.maker.test.js b/test/mainnet/b.protocol/b.maker.test.ts similarity index 89% rename from test/b.protocol/b.maker.test.js rename to test/mainnet/b.protocol/b.maker.test.ts index 5cc97daa..53bcd8bd 100644 --- a/test/b.protocol/b.maker.test.js +++ b/test/mainnet/b.protocol/b.maker.test.ts @@ -1,31 +1,29 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); +import { expect } from "chai"; +import hre from "hardhat"; const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") - -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectorMakerArtifacts = require("../../artifacts/contracts/mainnet/connectors/b.protocol/makerdao/main.sol/ConnectV2BMakerDAO.json") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { tokens } from "../../../scripts/tests/mainnet/tokens"; +import { ConnectV2BMakerDAO__factory } from "../../../typechain"; +import type { Signer, Contract } from "ethers"; describe("B.Maker", function () { const connectorName = "B.MAKER-TEST-A" - let dsaWallet0; - let dsaWallet1; - let masterSigner; - let instaConnectorsV2; - let connector; - let manager; - let vat; - let dai; + let dsaWallet0: any; + let dsaWallet1: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; + let manager: any; + let vat: any; + let dai: any; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -35,17 +33,18 @@ describe("B.Maker", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 12696000, }, }, ], }); - masterSigner = await getMasterSigner(wallet3) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectorMakerArtifacts, + contractArtifact: ConnectV2BMakerDAO__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -67,7 +66,7 @@ describe("B.Maker", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; expect(await connector.name()).to.be.equal("B.MakerDAO-v1.0"); }); @@ -96,9 +95,9 @@ describe("B.Maker", function () { }); describe("Main", function () { - let vault - let ilk - let urn + let vault: any; + let ilk: any; + let urn: any; it("Should open ETH-A vault Maker", async function () { vault = Number(await manager.cdpi()) + 1 @@ -314,7 +313,7 @@ describe("B.Maker", function () { }) }) -async function daiToArt(vat, ilk, dai) { +async function daiToArt(vat: any, ilk: any, dai: any) { const ilks = await vat.ilks(ilk) const rate = ilks[1] // second parameter const _1e27 = ethers.utils.parseEther("1000000000") // 1e9 * 1e18 @@ -323,12 +322,12 @@ async function daiToArt(vat, ilk, dai) { return art.add(1) } -function veryClose(n1, n2) { +function veryClose(n1: any, n2: any) { n1 = web3.utils.toBN(n1) n2 = web3.utils.toBN(n2) - _10000 = web3.utils.toBN(10000) - _9999 = web3.utils.toBN(9999) + let _10000 = web3.utils.toBN(10000) + let _9999 = web3.utils.toBN(9999) if (n1.mul(_10000).lt(n2.mul(_9999))) return false if (n2.mul(_10000).lt(n1.mul(_9999))) return false diff --git a/test/basic-ERC1155/ERC1155-transfer.js b/test/mainnet/basic-ERC1155/ERC1155-transfer.ts similarity index 72% rename from test/basic-ERC1155/ERC1155-transfer.js rename to test/mainnet/basic-ERC1155/ERC1155-transfer.ts index a0835384..ceffc1cd 100644 --- a/test/basic-ERC1155/ERC1155-transfer.js +++ b/test/mainnet/basic-ERC1155/ERC1155-transfer.ts @@ -1,21 +1,18 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); +import { expect } from "chai" +import hre from "hardhat" const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle -const { abi: implementationsABI } = require("../../scripts/constant/abi/core/InstaImplementations.json") +import { abi } from "../../../scripts/constant/abi/core/InstaImplementations.json" -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { addresses } from "../../../scripts/tests/mainnet/addresses" +import { abis } from "../../../scripts/constant/abis" +import type { Signer, Contract } from "ethers"; -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2BasicERC1155Artifacts = require("../../artifacts/contracts/mainnet/connectors/basic-ERC1155/main.sol/ConnectV2BasicERC1155.json") -const erc1155Artifacts = require("../../artifacts/@openzeppelin/contracts/token/ERC1155/IERC1155.sol/IERC1155.json") +import { ConnectV2BasicERC1155__factory, IERC1155__factory } from "../../../typechain"; const TOKEN_CONTRACT_ADDR = "0x1ca3262009b21F944e6b92a2a88D039D06F1acFa"; const TOKEN_OWNER_ADDR = "0x1ca3262009b21F944e6b92a2a88D039D06F1acFa"; @@ -26,13 +23,15 @@ const implementationsMappingAddr = "0xCBA828153d3a85b30B5b912e1f2daCac5816aE9D" describe("BASIC-ERC1155", function () { const connectorName = "BASIC-ERC1155-A" - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - let nftContract; - let tokenOwner; - let instaImplementationsMapping; + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: Contract; + let nftContract: Contract; + let tokenOwner: any; + let instaImplementationsMapping: any; + let InstaAccountV2DefaultImpl: any; + let instaAccountV2DefaultImpl: any; const wallets = provider.getWallets() @@ -43,6 +42,7 @@ describe("BASIC-ERC1155", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, @@ -54,26 +54,25 @@ describe("BASIC-ERC1155", function () { params: [TOKEN_OWNER_ADDR], }); - await network.provider.send("hardhat_setBalance", [ + await hre.network.provider.send("hardhat_setBalance", [ TOKEN_OWNER_ADDR, - "0x1000000000000000", + "0x10000000000000000", ]); - // get tokenOwner tokenOwner = await ethers.getSigner( TOKEN_OWNER_ADDR ); - nftContract = await ethers.getContractAt(erc1155Artifacts.abi, TOKEN_CONTRACT_ADDR) - masterSigner = await getMasterSigner(wallet3) + nftContract = await ethers.getContractAt(IERC1155__factory.abi, TOKEN_CONTRACT_ADDR) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - instaImplementationsMapping = await ethers.getContractAt(implementationsABI, implementationsMappingAddr); + instaImplementationsMapping = await ethers.getContractAt(abi, implementationsMappingAddr); InstaAccountV2DefaultImpl = await ethers.getContractFactory("InstaDefaultImplementation") instaAccountV2DefaultImpl = await InstaAccountV2DefaultImpl.deploy(addresses.core.instaIndex); await instaAccountV2DefaultImpl.deployed() connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectV2BasicERC1155Artifacts, + contractArtifact: ConnectV2BasicERC1155__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -83,17 +82,15 @@ describe("BASIC-ERC1155", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("Implementations", function () { - it("Should add default implementation to mapping.", async function () { const tx = await instaImplementationsMapping.connect(masterSigner).setDefaultImplementation(instaAccountV2DefaultImpl.address); await tx.wait() expect(await instaImplementationsMapping.defaultImplementation()).to.be.equal(instaAccountV2DefaultImpl.address); }); - }); describe("DSA wallet setup", function () { diff --git a/test/basic-ERC721/ERC721-transfer.js b/test/mainnet/basic-ERC721/ERC721-transfer.ts similarity index 73% rename from test/basic-ERC721/ERC721-transfer.js rename to test/mainnet/basic-ERC721/ERC721-transfer.ts index 73dce8ca..1ed72c0c 100644 --- a/test/basic-ERC721/ERC721-transfer.js +++ b/test/mainnet/basic-ERC721/ERC721-transfer.ts @@ -1,21 +1,18 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); +import { expect } from "chai"; +import hre, { network } from "hardhat"; const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle -const { abi: implementationsABI } = require("../../scripts/constant/abi/core/InstaImplementations.json") +import { abi } from "../../../scripts/constant/abi/core/InstaImplementations.json" -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { addresses } from "../../../scripts/tests/mainnet/addresses" +import { abis } from "../../../scripts/constant/abis" +import type { Signer, Contract } from "ethers"; -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2BasicERC721Artifacts = require("../../artifacts/contracts/mainnet/connectors/basic-ERC721/main.sol/ConnectV2BasicERC721.json") -const erc721Artifacts = require("../../artifacts/@openzeppelin/contracts/token/ERC721/IERC721.sol/IERC721.json") +import { ConnectV2BasicERC721__factory, IERC721__factory } from "../../../typechain"; const TOKEN_CONTRACT_ADDR = "0x4d695c615a7aacf2d7b9c481b66045bb2457dfde"; const TOKEN_OWNER_ADDR = "0x8c6b10d42ff08e56133fca0dac75e1931b1fcc23"; @@ -26,14 +23,15 @@ const implementationsMappingAddr = "0xCBA828153d3a85b30B5b912e1f2daCac5816aE9D" describe("BASIC-ERC721", function () { const connectorName = "BASIC-ERC721-A" - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - let nftContract; - let tokenOwner; - let instaImplementationsMapping; - + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; + let nftContract: any; + let tokenOwner: any; + let instaImplementationsMapping: any; + let InstaAccountV2DefaultImpl: any; + let instaAccountV2DefaultImpl: any; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -43,6 +41,7 @@ describe("BASIC-ERC721", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, @@ -56,24 +55,24 @@ describe("BASIC-ERC721", function () { await network.provider.send("hardhat_setBalance", [ TOKEN_OWNER_ADDR, - "0x1000000000000000", + "0x10000000000000000", ]); // get tokenOwner tokenOwner = await ethers.getSigner( TOKEN_OWNER_ADDR ); - nftContract = await ethers.getContractAt(erc721Artifacts.abi, TOKEN_CONTRACT_ADDR) - masterSigner = await getMasterSigner(wallet3) + nftContract = await ethers.getContractAt(IERC721__factory.abi, TOKEN_CONTRACT_ADDR) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - instaImplementationsMapping = await ethers.getContractAt(implementationsABI, implementationsMappingAddr); + instaImplementationsMapping = await ethers.getContractAt(abi, implementationsMappingAddr); InstaAccountV2DefaultImpl = await ethers.getContractFactory("InstaDefaultImplementation") instaAccountV2DefaultImpl = await InstaAccountV2DefaultImpl.deploy(addresses.core.instaIndex); await instaAccountV2DefaultImpl.deployed() connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectV2BasicERC721Artifacts, + contractArtifact: ConnectV2BasicERC721__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -83,11 +82,10 @@ describe("BASIC-ERC721", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("Implementations", function () { - it("Should add default implementation to mapping.", async function () { const tx = await instaImplementationsMapping.connect(masterSigner).setDefaultImplementation(instaAccountV2DefaultImpl.address); await tx.wait() diff --git a/test/compound/compound.test.js b/test/mainnet/compound/compound.test.ts similarity index 80% rename from test/compound/compound.test.js rename to test/mainnet/compound/compound.test.ts index 0719eb94..89c582ff 100644 --- a/test/compound/compound.test.js +++ b/test/mainnet/compound/compound.test.ts @@ -1,27 +1,26 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; -const { provider, deployContract } = waffle +import { expect } from "chai"; +import hre from "hardhat"; +const { waffle, ethers } = hre; +const { provider, deployContract} = waffle -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") +import type { Signer, Contract } from "ethers"; -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/compound/main.sol/ConnectV2Compound.json") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { constants } from "../../../scripts/constant/constant"; +import { ConnectV2Compound__factory } from "../../../typechain"; describe("Compound", function () { const connectorName = "COMPOUND-TEST-A" - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -31,17 +30,18 @@ describe("Compound", function () { params: [ { forking: { + //@ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, }, ], }); - masterSigner = await getMasterSigner(wallet3) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectV2CompoundArtifacts, + contractArtifact: ConnectV2Compound__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -51,7 +51,7 @@ describe("Compound", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("DSA wallet setup", function () { diff --git a/test/instapool/instapool.test.js b/test/mainnet/instapool/instapool.test.ts similarity index 74% rename from test/instapool/instapool.test.js rename to test/mainnet/instapool/instapool.test.ts index cbae67c2..59f8d13d 100644 --- a/test/instapool/instapool.test.js +++ b/test/mainnet/instapool/instapool.test.ts @@ -1,28 +1,26 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); +import { expect } from "chai"; +import hre from "hardhat"; const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const encodeFlashcastData = require("../../scripts/encodeFlashcastData.js") -const getMasterSigner = require("../../scripts/getMasterSigner") +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import encodeFlashcastData from "../../../scripts/tests/encodeFlashcastData" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/compound/main.sol/ConnectV2Compound.json") +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import type { Signer, Contract } from "ethers"; +import { ConnectV2Compound__factory } from "../../../typechain"; describe("Instapool", function () { const connectorName = "COMPOUND-TEST-A" - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -32,17 +30,18 @@ describe("Instapool", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, }, ], }); - masterSigner = await getMasterSigner(wallet3) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectV2CompoundArtifacts, + contractArtifact: ConnectV2Compound__factory, signer: masterSigner, connectors: instaConnectorsV2 }) @@ -52,7 +51,7 @@ describe("Instapool", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("DSA wallet setup", function () { diff --git a/test/liquity/liquity.contracts.js b/test/mainnet/liquity/liquity.contracts.ts similarity index 99% rename from test/liquity/liquity.contracts.js rename to test/mainnet/liquity/liquity.contracts.ts index f6a6df74..7cee4a17 100644 --- a/test/liquity/liquity.contracts.js +++ b/test/mainnet/liquity/liquity.contracts.ts @@ -69,7 +69,7 @@ const COLL_SURPLUS_ABI = [ "function getCollateral(address _account) external view returns (uint)", ]; -module.exports = { +export default { TROVE_MANAGER_ADDRESS, TROVE_MANAGER_ABI, BORROWER_OPERATIONS_ADDRESS, diff --git a/test/liquity/liquity.helpers.js b/test/mainnet/liquity/liquity.helpers.ts similarity index 72% rename from test/liquity/liquity.helpers.js rename to test/mainnet/liquity/liquity.helpers.ts index f6aa3e34..97814e71 100644 --- a/test/liquity/liquity.helpers.js +++ b/test/mainnet/liquity/liquity.helpers.ts @@ -1,45 +1,43 @@ -const hre = require("hardhat"); -const hardhatConfig = require("../../hardhat.config"); +import hre from "hardhat"; +import { ethers } from "hardhat"; +import hardhatConfig from "../../../hardhat.config"; // Instadapp deployment and testing helpers -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js"); -const encodeSpells = require("../../scripts/encodeSpells.js"); -const getMasterSigner = require("../../scripts/getMasterSigner"); -const buildDSAv2 = require("../../scripts/buildDSAv2"); +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector" +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2" +import { encodeSpells } from "../../../scripts/tests/encodeSpells" +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner" -// Instadapp instadappAddresses/ABIs -const instadappAddresses = require("../../scripts/constant/addresses"); -const instadappAbi = require("../../scripts/constant/abis"); +// Instadapp addresses/ABIs +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; // Instadapp Liquity Connector artifacts -const connectV2LiquityArtifacts = require("../../artifacts/contracts/mainnet/connectors/liquity/main.sol/ConnectV2Liquity.json"); -const connectV2BasicV1Artifacts = require("../../artifacts/contracts/mainnet/connectors/basic/main.sol/ConnectV2Basic.json"); -const { ethers } = require("hardhat"); +import { ConnectV2Liquity__factory, ConnectV2Basic__factory } from "../../../typechain"; // Instadapp uses a fake address to represent native ETH -const { eth_addr: ETH_ADDRESS } = require("../../scripts/constant/constant"); - +import { constants } from "../../../scripts/constant/constant"; +import type { Signer, Contract, BigNumber } from "ethers"; const LIQUITY_CONNECTOR = "LIQUITY-v1-TEST"; const LUSD_GAS_COMPENSATION = hre.ethers.utils.parseUnits("200", 18); // 200 LUSD gas compensation repaid after loan repayment const LIQUIDATABLE_TROVES_BLOCK_NUMBER = 12478159; // Deterministic block number for tests to run against, if you change this, tests will break. const JUSTIN_SUN_ADDRESS = "0x903d12bf2c57a29f32365917c706ce0e1a84cce3"; // LQTY whale address const LIQUIDATABLE_TROVE_ADDRESS = "0xafbeb4cb97f3b08ec2fe07ef0dac15d37013a347"; // Trove which is liquidatable at blockNumber: LIQUIDATABLE_TROVES_BLOCK_NUMBER -const MAX_GAS = hardhatConfig.networks.hardhat.blockGasLimit; // Maximum gas limit (12000000) +// @ts-ignore +const MAX_GAS = hardhatConfig.networks.hardhat.blockGasLimit ?? 12000000; // Maximum gas limit (12000000) const INSTADAPP_BASIC_V1_CONNECTOR = "Basic-v1"; +const ETH = constants.native_address const openTroveSpell = async ( - dsa, - signer, - depositAmount, - borrowAmount, - upperHint, - lowerHint, - maxFeePercentage + dsa: any, + signer: Signer, + depositAmount: any, + borrowAmount: any, + upperHint: any, + lowerHint: any, + maxFeePercentage: any ) => { - let address = signer.address; - if (signer.address === undefined) { - address = await signer.getAddress(); - } + let address = await signer.getAddress(); const openTroveSpell = { connector: LIQUITY_CONNECTOR, @@ -63,9 +61,9 @@ const openTroveSpell = async ( }; const createDsaTrove = async ( - dsa, - signer, - liquity, + dsa: any, + signer: any, + liquity: any, depositAmount = hre.ethers.utils.parseEther("5"), borrowAmount = hre.ethers.utils.parseUnits("2000", 18) ) => { @@ -86,32 +84,31 @@ const createDsaTrove = async ( ); }; -const sendToken = async (token, amount, from, to) => { +const sendToken = async (token: any, amount: any, from: any, to: any) => { await hre.network.provider.request({ method: "hardhat_impersonateAccount", params: [from], }); - const signer = await hre.ethers.provider.getSigner(from); + const signer = hre.ethers.provider.getSigner(from); - return await token.connect(signer).transfer(to, amount, { - gasPrice: 0, - }); + return await token.connect(signer).transfer(to, amount); }; -const resetInitialState = async (walletAddress, contracts, isDebug = false) => { +const resetInitialState = async (walletAddress: any, contracts: any, isDebug = false) => { const liquity = await deployAndConnect(contracts, isDebug); const dsa = await buildDSAv2(walletAddress); return [liquity, dsa]; }; -const resetHardhatBlockNumber = async (blockNumber) => { +const resetHardhatBlockNumber = async (blockNumber: number) => { return await hre.network.provider.request({ method: "hardhat_reset", params: [ { forking: { - jsonRpcUrl: hardhatConfig.networks.hardhat.forking.url, + // @ts-ignore + jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber, }, }, @@ -119,31 +116,33 @@ const resetHardhatBlockNumber = async (blockNumber) => { }); }; -const deployAndConnect = async (contracts, isDebug = false) => { +const deployAndConnect = async (contracts: any, isDebug = false) => { // Pin Liquity tests to a particular block number to create deterministic state (Ether price etc.) await resetHardhatBlockNumber(LIQUIDATABLE_TROVES_BLOCK_NUMBER); - const liquity = { - troveManager: null, - borrowerOperations: null, - stabilityPool: null, - lusdToken: null, - lqtyToken: null, - activePool: null, - priceFeed: null, - hintHelpers: null, - sortedTroves: null, - staking: null, - collSurplus: null, + type Liquidity = { + troveManager: Contract, + borrowerOperations: Contract, + stabilityPool: Contract, + lusdToken: Contract, + lqtyToken: Contract, + activePool: Contract, + priceFeed: Contract, + hintHelpers: Contract, + sortedTroves: Contract, + staking: Contract, + collSurplus: Contract, }; + const liquity = {} as Liquidity + const masterSigner = await getMasterSigner(); const instaConnectorsV2 = await ethers.getContractAt( - instadappAbi.core.connectorsV2, - instadappAddresses.core.connectorsV2 + abis.core.connectorsV2, + addresses.core.connectorsV2 ); const connector = await deployAndEnableConnector({ connectorName: LIQUITY_CONNECTOR, - contractArtifact: connectV2LiquityArtifacts, + contractArtifact: ConnectV2Liquity__factory, signer: masterSigner, connectors: instaConnectorsV2, }); @@ -152,7 +151,7 @@ const deployAndConnect = async (contracts, isDebug = false) => { const basicConnector = await deployAndEnableConnector({ connectorName: "Basic-v1", - contractArtifact: connectV2BasicV1Artifacts, + contractArtifact: ConnectV2Basic__factory, signer: masterSigner, connectors: instaConnectorsV2, }); @@ -226,7 +225,7 @@ const deployAndConnect = async (contracts, isDebug = false) => { return liquity; }; -const getTroveInsertionHints = async (depositAmount, borrowAmount, liquity) => { +const getTroveInsertionHints = async (depositAmount: BigNumber, borrowAmount: BigNumber, liquity: any) => { const nominalCR = await liquity.hintHelpers.computeNominalCR( depositAmount, borrowAmount @@ -260,7 +259,7 @@ const getTroveInsertionHints = async (depositAmount, borrowAmount, liquity) => { let randomSeed = 4223; -const getRedemptionHints = async (amount, liquity) => { +const getRedemptionHints = async (amount: any, liquity: any) => { const ethPrice = await liquity.priceFeed.callStatic.fetchPrice(); const [ firstRedemptionHint, @@ -300,7 +299,7 @@ const getRedemptionHints = async (amount, liquity) => { }; }; -const redeem = async (amount, from, wallet, liquity) => { +const redeem = async (amount: any, from: any, wallet: { address: any; }, liquity: any) => { await sendToken(liquity.lusdToken, amount, from, wallet.address); const { partialRedemptionHintNicr, @@ -326,7 +325,7 @@ const redeem = async (amount, from, wallet, liquity) => { ); }; -module.exports = { +export default { deployAndConnect, resetInitialState, createDsaTrove, @@ -340,5 +339,5 @@ module.exports = { LIQUIDATABLE_TROVE_ADDRESS, MAX_GAS, INSTADAPP_BASIC_V1_CONNECTOR, - ETH_ADDRESS, + ETH, }; diff --git a/test/liquity/liquity.test.js b/test/mainnet/liquity/liquity.test.ts similarity index 88% rename from test/liquity/liquity.test.js rename to test/mainnet/liquity/liquity.test.ts index e2acde15..10cfe29e 100644 --- a/test/liquity/liquity.test.js +++ b/test/mainnet/liquity/liquity.test.ts @@ -1,24 +1,23 @@ -const hre = require("hardhat"); -const { expect } = require("chai"); +import hre from "hardhat"; +import { expect } from "chai"; // Instadapp deployment and testing helpers -const buildDSAv2 = require("../../scripts/buildDSAv2"); -const encodeSpells = require("../../scripts/encodeSpells.js"); +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; // Liquity smart contracts -const contracts = require("./liquity.contracts"); +import contracts from "./liquity.contracts"; // Liquity helpers -const helpers = require("./liquity.helpers"); +import helpers from "./liquity.helpers"; describe("Liquity", () => { const { waffle, ethers } = hre; const { provider } = waffle; - + let userWallet: any; // Waffle test account 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (holds 1000 ETH) - const userWallet = provider.getWallets()[0]; - let dsa = null; - let liquity = null; + let dsaWallet0: any; + let liquity: any; before(async () => { await hre.network.provider.request({ @@ -26,6 +25,7 @@ describe("Liquity", () => { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, @@ -46,9 +46,10 @@ describe("Liquity", () => { }); beforeEach(async () => { + userWallet = provider.getWallets()[0]; // Build a new DSA before each test so we start each test from the same default state - dsa = await buildDSAv2(userWallet.address); - expect(dsa.address).to.exist; + dsaWallet0 = await buildDSAv2(userWallet.address); + expect(dsaWallet0.address).to.exist; }); describe("Main (Connector)", () => { @@ -64,45 +65,50 @@ describe("Liquity", () => { userWallet.address ); const originalDsaBalance = await ethers.provider.getBalance( - dsa.address + dsaWallet0.address ); - const openTroveSpell = { - connector: helpers.LIQUITY_CONNECTOR, - method: "open", - args: [ - depositAmount, - maxFeePercentage, - borrowAmount, - upperHint, - lowerHint, - [0, 0], - [0, 0], - ], - }; + const openTroveSpell = [ + { + connector: helpers.LIQUITY_CONNECTOR, + method: "open", + args: [ + depositAmount, + maxFeePercentage, + borrowAmount, + upperHint, + lowerHint, + [0, 0], + [0, 0], + ], + }, + ]; - await dsa + await dsaWallet0 .connect(userWallet) - .cast(...encodeSpells([openTroveSpell]), userWallet.address, { + .cast(...encodeSpells(openTroveSpell), userWallet.address, { value: depositAmount, - gasPrice: 0, }); const userBalance = await ethers.provider.getBalance( userWallet.address ); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); - expect(userBalance).eq( + expect(userBalance).lt( originalUserBalance.sub(depositAmount), - "User's Ether balance should decrease by the amount they deposited" + "User's Ether balance should decrease" ); expect(dsaEthBalance).to.eq( @@ -136,14 +142,14 @@ describe("Liquity", () => { userWallet.address ); const originalDsaBalance = await ethers.provider.getBalance( - dsa.address + dsaWallet0.address ); const depositId = 1; // Choose an ID to store and retrieve the deposited ETH const depositEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "deposit", - args: [helpers.ETH_ADDRESS, depositAmount, 0, depositId], + args: [helpers.ETH, depositAmount, 0, depositId], }; const openTroveSpell = { @@ -161,26 +167,29 @@ describe("Liquity", () => { }; const spells = [depositEthSpell, openTroveSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { value: depositAmount, - gasPrice: 0, }); const userBalance = await ethers.provider.getBalance( userWallet.address ); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); - expect(userBalance).eq( + expect(userBalance).lt( originalUserBalance.sub(depositAmount), "User's Ether balance should decrease by the amount they deposited" ); @@ -216,7 +225,7 @@ describe("Liquity", () => { userWallet.address ); const originalDsaBalance = await ethers.provider.getBalance( - dsa.address + dsaWallet0.address ); const borrowId = 1; @@ -240,33 +249,36 @@ describe("Liquity", () => { args: [ contracts.LUSD_TOKEN_ADDRESS, 0, // Amount comes from the previous spell's setId - dsa.address, + dsaWallet0.address, borrowId, 0, ], }; const spells = [openTroveSpell, withdrawLusdSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { value: depositAmount, - gasPrice: 0, }); const userBalance = await ethers.provider.getBalance( userWallet.address ); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); - expect(userBalance).eq( + expect(userBalance).lt( originalUserBalance.sub(depositAmount), "User's Ether balance should decrease by the amount they deposited" ); @@ -313,7 +325,7 @@ describe("Liquity", () => { ], }; - const openTx = await dsa.cast( + const openTx = await dsaWallet0.cast( ...encodeSpells([openTroveSpell]), userWallet.address, { @@ -321,8 +333,9 @@ describe("Liquity", () => { } ); const receipt = await openTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; expect(castLogEvent.eventNames[0]).eq( "LogOpen(address,uint256,uint256,uint256,uint256[],uint256[])" ); @@ -336,7 +349,7 @@ describe("Liquity", () => { "uint256[]", ], [ - dsa.address, + dsaWallet0.address, maxFeePercentage, depositAmount, borrowAmount, @@ -354,7 +367,7 @@ describe("Liquity", () => { const borrowAmount = ethers.utils.parseUnits("2000", 18); // Create a dummy Trove await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -362,11 +375,11 @@ describe("Liquity", () => { ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); // Send DSA account enough LUSD (from Stability Pool) to close their Trove @@ -378,11 +391,11 @@ describe("Liquity", () => { liquity.lusdToken, extraLusdRequiredToCloseTrove, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const originalDsaLusdBalance = await liquity.lusdToken.balanceOf( - dsa.address + dsaWallet0.address ); expect( @@ -396,17 +409,21 @@ describe("Liquity", () => { args: [0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([closeTroveSpell]), userWallet.address); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); expect(troveDebt, "Trove debt should equal 0 after close").to.eq(0); @@ -429,13 +446,13 @@ describe("Liquity", () => { it("closes a Trove using LUSD obtained from a previous spell", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); // Send user enough LUSD to repay the loan, we'll use a deposit and withdraw spell to obtain it @@ -449,7 +466,7 @@ describe("Liquity", () => { // Allow DSA to spend user's LUSD await liquity.lusdToken .connect(userWallet) - .approve(dsa.address, troveDebtBefore); + .approve(dsaWallet0.address, troveDebtBefore); // Simulate a spell which would have pulled LUSD from somewhere (e.g. Uniswap) into InstaMemory // In this case we're simply running a deposit spell from the user's EOA @@ -466,16 +483,18 @@ describe("Liquity", () => { }; const spells = [depositLusdSpell, closeTroveSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); expect(troveDebt, "Trove debt should equal 0 after close").to.eq(0); @@ -496,7 +515,7 @@ describe("Liquity", () => { const borrowAmount = ethers.utils.parseUnits("2000", 18); // Create a dummy Trove await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -504,10 +523,10 @@ describe("Liquity", () => { ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); // Send DSA account enough LUSD (from Stability Pool) to close their Trove @@ -518,10 +537,10 @@ describe("Liquity", () => { liquity.lusdToken, extraLusdRequiredToCloseTrove, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const originalDsaLusdBalance = await liquity.lusdToken.balanceOf( - dsa.address + dsaWallet0.address ); expect( @@ -541,28 +560,32 @@ describe("Liquity", () => { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "withdraw", args: [ - helpers.ETH_ADDRESS, + helpers.ETH, 0, // amount comes from the previous spell's setId - dsa.address, + dsaWallet0.address, collateralWithdrawId, 0, ], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast( ...encodeSpells([closeTroveSpell, withdrawEthSpell]), userWallet.address ); - const dsaEthBalance = await ethers.provider.getBalance(dsa.address); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); + const dsaEthBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address + ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); expect(troveDebt, "Trove debt should equal 0 after close").to.eq(0); @@ -588,7 +611,7 @@ describe("Liquity", () => { const borrowAmount = ethers.utils.parseUnits("2000", 18); // Create a dummy Trove await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -598,7 +621,7 @@ describe("Liquity", () => { liquity.lusdToken, ethers.utils.parseUnits("2500", 18), contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const closeTroveSpell = { @@ -607,16 +630,17 @@ describe("Liquity", () => { args: [0], }; - const closeTx = await dsa + const closeTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([closeTroveSpell]), userWallet.address); const receipt = await closeTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256"], - [dsa.address, 0] + [dsaWallet0.address, 0] ); expect(castLogEvent.eventNames[0]).eq("LogClose(address,uint256)"); expect(castLogEvent.eventParams[0]).eq(expectedEventParams); @@ -625,11 +649,10 @@ describe("Liquity", () => { describe("deposit()", () => { it("deposits ETH into a Trove", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const topupAmount = ethers.utils.parseEther("1"); @@ -641,14 +664,14 @@ describe("Liquity", () => { args: [topupAmount, upperHint, lowerHint, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([depositEthSpell]), userWallet.address, { value: topupAmount, }); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const expectedTroveCollateral = troveCollateralBefore.add( @@ -662,10 +685,9 @@ describe("Liquity", () => { }); it("deposits using ETH gained from a previous spell", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const topupAmount = ethers.utils.parseEther("1"); @@ -673,7 +695,7 @@ describe("Liquity", () => { const depositEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "deposit", - args: [helpers.ETH_ADDRESS, topupAmount, 0, depositId], + args: [helpers.ETH, topupAmount, 0, depositId], }; const upperHint = ethers.constants.AddressZero; @@ -685,14 +707,14 @@ describe("Liquity", () => { }; const spells = [depositEthSpell, depositEthToTroveSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { value: topupAmount, }); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const expectedTroveCollateral = troveCollateralBefore.add( @@ -706,8 +728,7 @@ describe("Liquity", () => { }); it("returns Instadapp event name and data", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const topupAmount = ethers.utils.parseEther("1"); const upperHint = ethers.constants.AddressZero; @@ -718,18 +739,19 @@ describe("Liquity", () => { args: [topupAmount, upperHint, lowerHint, 0, 0], }; - const depositTx = await dsa + const depositTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([depositEthSpell]), userWallet.address, { value: topupAmount, }); const receipt = await depositTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256"], - [dsa.address, topupAmount, 0, 0] + [dsaWallet0.address, topupAmount, 0, 0] ); expect(castLogEvent.eventNames[0]).eq( "LogDeposit(address,uint256,uint256,uint256)" @@ -740,11 +762,10 @@ describe("Liquity", () => { describe("withdraw()", () => { it("withdraws ETH from a Trove", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const withdrawAmount = ethers.utils.parseEther("1"); const upperHint = ethers.constants.AddressZero; @@ -755,12 +776,12 @@ describe("Liquity", () => { args: [withdrawAmount, upperHint, lowerHint, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([withdrawEthSpell]), userWallet.address); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const expectedTroveCollateral = troveCollateralBefore.sub( withdrawAmount @@ -773,11 +794,10 @@ describe("Liquity", () => { }); it("withdraws ETH from a Trove and stores the ETH for other spells to use", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const originalUserEthBalance = await ethers.provider.getBalance( userWallet.address @@ -796,17 +816,15 @@ describe("Liquity", () => { const withdrawEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "withdraw", - args: [helpers.ETH_ADDRESS, 0, userWallet.address, withdrawId, 0], + args: [helpers.ETH, 0, userWallet.address, withdrawId, 0], }; const spells = [withdrawEthFromTroveSpell, withdrawEthSpell]; - await dsa + await dsaWallet0 .connect(userWallet) - .cast(...encodeSpells(spells), userWallet.address, { - gasPrice: 0, // Remove gas costs so we can check balances have changed correctly - }); + .cast(...encodeSpells(spells), userWallet.address); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const expectedTroveCollateral = troveCollateralBefore.sub( withdrawAmount @@ -823,12 +841,11 @@ describe("Liquity", () => { expect( userEthBalance, `User ETH balance should have increased by ${withdrawAmount} ETH` - ).to.eq(originalUserEthBalance.add(withdrawAmount)); + ).to.lt(originalUserEthBalance.add(withdrawAmount)); }); it("returns Instadapp event name and data", async () => { - // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const withdrawAmount = ethers.utils.parseEther("1"); const upperHint = ethers.constants.AddressZero; @@ -839,16 +856,17 @@ describe("Liquity", () => { args: [withdrawAmount, upperHint, lowerHint, 0, 0], }; - const withdrawTx = await dsa + const withdrawTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([withdrawEthSpell]), userWallet.address); const receipt = await withdrawTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256"], - [dsa.address, withdrawAmount, 0, 0] + [dsaWallet0.address, withdrawAmount, 0, 0] ); expect(castLogEvent.eventNames[0]).eq( "LogWithdraw(address,uint256,uint256,uint256)" @@ -860,10 +878,10 @@ describe("Liquity", () => { describe("borrow()", () => { it("borrows LUSD from a Trove", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const borrowAmount = ethers.utils.parseUnits("1000", 18); // 1000 LUSD @@ -877,12 +895,12 @@ describe("Liquity", () => { }; // Borrow more LUSD from the Trove - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([borrowSpell]), userWallet.address); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveDebt = troveDebtBefore.add(borrowAmount); @@ -894,10 +912,10 @@ describe("Liquity", () => { it("borrows LUSD from a Trove and stores the LUSD for other spells to use", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const borrowAmount = ethers.utils.parseUnits("1000", 18); // 1000 LUSD @@ -931,12 +949,12 @@ describe("Liquity", () => { const spells = [borrowSpell, withdrawSpell]; // Borrow more LUSD from the Trove - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveDebt = troveDebtBefore.add(borrowAmount); const userLusdBalance = await liquity.lusdToken.balanceOf( @@ -956,7 +974,7 @@ describe("Liquity", () => { it("returns Instadapp event name and data", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const borrowAmount = ethers.utils.parseUnits("1000", 18); // 1000 LUSD const upperHint = ethers.constants.AddressZero; @@ -968,16 +986,17 @@ describe("Liquity", () => { args: [maxFeePercentage, borrowAmount, upperHint, lowerHint, 0, 0], }; - const borrowTx = await dsa + const borrowTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([borrowSpell]), userWallet.address); const receipt = await borrowTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256"], - [dsa.address, borrowAmount, 0, 0] + [dsaWallet0.address, borrowAmount, 0, 0] ); expect(castLogEvent.eventNames[0]).eq( "LogBorrow(address,uint256,uint256,uint256)" @@ -993,7 +1012,7 @@ describe("Liquity", () => { // Create a dummy Trove await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -1001,7 +1020,7 @@ describe("Liquity", () => { ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); // DSA account is holding 2500 LUSD from opening a Trove, so we use some of that to repay const repayAmount = ethers.utils.parseUnits("100", 18); // 100 LUSD @@ -1017,12 +1036,12 @@ describe("Liquity", () => { args: [repayAmount, upperHint, lowerHint, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([repaySpell]), userWallet.address); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveDebt = troveDebtBefore.sub(repayAmount); @@ -1038,7 +1057,7 @@ describe("Liquity", () => { // Create a dummy Trove await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -1046,7 +1065,7 @@ describe("Liquity", () => { ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const repayAmount = ethers.utils.parseUnits("100", 18); // 100 LUSD @@ -1060,14 +1079,14 @@ describe("Liquity", () => { await helpers.sendToken( liquity.lusdToken, borrowAmount, - dsa.address, + dsaWallet0.address, userWallet.address ); // Allow DSA to spend user's LUSD await liquity.lusdToken .connect(userWallet) - .approve(dsa.address, repayAmount); + .approve(dsaWallet0.address, repayAmount); const lusdDepositId = 1; const depositSpell = { @@ -1083,12 +1102,12 @@ describe("Liquity", () => { const spells = [depositSpell, borrowSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveDebt = troveDebtBefore.sub(repayAmount); @@ -1103,7 +1122,7 @@ describe("Liquity", () => { const depositAmount = ethers.utils.parseEther("5"); const borrowAmount = ethers.utils.parseUnits("2500", 18); await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -1123,18 +1142,19 @@ describe("Liquity", () => { args: [repayAmount, upperHint, lowerHint, 0, 0], }; - const repayTx = await dsa + const repayTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([borrowSpell]), userWallet.address, { value: repayAmount, }); const receipt = await repayTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256"], - [dsa.address, repayAmount, 0, 0] + [dsaWallet0.address, repayAmount, 0, 0] ); expect(castLogEvent.eventNames[0]).eq( "LogRepay(address,uint256,uint256,uint256)" @@ -1146,13 +1166,13 @@ describe("Liquity", () => { describe("adjust()", () => { it("adjusts a Trove: deposit ETH and borrow LUSD", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const depositAmount = ethers.utils.parseEther("1"); // 1 ETH const borrowAmount = ethers.utils.parseUnits("500", 18); // 500 LUSD @@ -1179,7 +1199,7 @@ describe("Liquity", () => { }; // Adjust Trove by depositing ETH and borrowing LUSD - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([adjustSpell]), userWallet.address, { value: depositAmount, @@ -1187,10 +1207,10 @@ describe("Liquity", () => { }); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveColl = troveCollateralBefore.add(depositAmount); const expectedTroveDebt = troveDebtBefore.add(borrowAmount); @@ -1208,13 +1228,13 @@ describe("Liquity", () => { it("adjusts a Trove: withdraw ETH and repay LUSD", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const depositAmount = 0; const borrowAmount = 0; @@ -1244,7 +1264,7 @@ describe("Liquity", () => { }; // Adjust Trove by withdrawing ETH and repaying LUSD - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([adjustSpell]), userWallet.address, { value: depositAmount, @@ -1252,10 +1272,10 @@ describe("Liquity", () => { }); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveColl = troveCollateralBefore.sub(withdrawAmount); const expectedTroveDebt = troveDebtBefore.sub(repayAmount); @@ -1273,13 +1293,13 @@ describe("Liquity", () => { it("adjusts a Trove: deposit ETH and repay LUSD using previous spells", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebtBefore = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const depositAmount = ethers.utils.parseEther("1"); // 1 ETH const borrowAmount = 0; @@ -1295,7 +1315,7 @@ describe("Liquity", () => { const depositEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "deposit", - args: [helpers.ETH_ADDRESS, depositAmount, 0, ethDepositId], + args: [helpers.ETH, depositAmount, 0, ethDepositId], }; const depositLusdSpell = { @@ -1332,10 +1352,10 @@ describe("Liquity", () => { // Allow DSA to spend user's LUSD await liquity.lusdToken .connect(userWallet) - .approve(dsa.address, repayAmount); + .approve(dsaWallet0.address, repayAmount); // Adjust Trove by depositing ETH and repaying LUSD - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { value: depositAmount, @@ -1343,10 +1363,10 @@ describe("Liquity", () => { }); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const troveDebt = await liquity.troveManager.getTroveDebt( - dsa.address + dsaWallet0.address ); const expectedTroveColl = troveCollateralBefore.add(depositAmount); const expectedTroveDebt = troveDebtBefore.sub(repayAmount); @@ -1364,7 +1384,7 @@ describe("Liquity", () => { it("adjusts a Trove: withdraw ETH, borrow LUSD, and store the amounts for other spells", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const userEthBalanceBefore = await ethers.provider.getBalance( userWallet.address @@ -1403,13 +1423,7 @@ describe("Liquity", () => { const withdrawEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "withdraw", - args: [ - helpers.ETH_ADDRESS, - 0, - userWallet.address, - ethWithdrawId, - 0, - ], + args: [helpers.ETH, 0, userWallet.address, ethWithdrawId, 0], }; const withdrawLusdSpell = { @@ -1427,11 +1441,10 @@ describe("Liquity", () => { const spells = [adjustSpell, withdrawEthSpell, withdrawLusdSpell]; // Adjust Trove by withdrawing ETH and borrowing LUSD - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { gasLimit: helpers.MAX_GAS, - gasPrice: 0, }); const userEthBalanceAfter = await ethers.provider.getBalance( @@ -1440,7 +1453,7 @@ describe("Liquity", () => { const userLusdBalanceAfter = await liquity.lusdToken.balanceOf( userWallet.address ); - expect(userEthBalanceAfter).eq( + expect(userEthBalanceAfter).lt( userEthBalanceBefore.add(withdrawAmount) ); expect(userLusdBalanceAfter).eq( @@ -1450,7 +1463,7 @@ describe("Liquity", () => { it("returns Instadapp event name and data", async () => { // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const depositAmount = ethers.utils.parseEther("1"); // 1 ETH const borrowAmount = ethers.utils.parseUnits("500", 18); // 500 LUSD @@ -1476,7 +1489,7 @@ describe("Liquity", () => { ], }; - const adjustTx = await dsa + const adjustTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([adjustSpell]), userWallet.address, { value: depositAmount, @@ -1484,8 +1497,9 @@ describe("Liquity", () => { }); const receipt = await adjustTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( [ "address", @@ -1498,7 +1512,7 @@ describe("Liquity", () => { "uint256[]", ], [ - dsa.address, + dsaWallet0.address, maxFeePercentage, depositAmount, withdrawAmount, @@ -1522,7 +1536,7 @@ describe("Liquity", () => { const borrowAmount = ethers.utils.parseUnits("2500", 18); await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -1561,7 +1575,7 @@ describe("Liquity", () => { ); const remainingEthCollateral = await liquity.collSurplus.getCollateral( - dsa.address + dsaWallet0.address ); // Claim the remaining collateral from the redeemed Trove @@ -1571,14 +1585,16 @@ describe("Liquity", () => { args: [0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast( ...encodeSpells([claimCollateralFromRedemptionSpell]), userWallet.address ); - const ethBalance = await ethers.provider.getBalance(dsa.address); + const ethBalance = await ethers.provider.getBalance( + dsaWallet0.address + ); expect(ethBalance).to.eq(remainingEthCollateral); }); @@ -1589,7 +1605,7 @@ describe("Liquity", () => { const borrowAmount = ethers.utils.parseUnits("2500", 18); await helpers.createDsaTrove( - dsa, + dsaWallet0, userWallet, liquity, depositAmount, @@ -1628,7 +1644,7 @@ describe("Liquity", () => { } ); const claimAmount = await liquity.collSurplus.getCollateral( - dsa.address + dsaWallet0.address ); const claimCollateralFromRedemptionSpell = { @@ -1637,7 +1653,7 @@ describe("Liquity", () => { args: [setId], }; - const claimTx = await dsa + const claimTx = await dsaWallet0 .connect(userWallet) .cast( ...encodeSpells([claimCollateralFromRedemptionSpell]), @@ -1645,11 +1661,12 @@ describe("Liquity", () => { ); const receipt = await claimTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256"], - [dsa.address, claimAmount, setId] + [dsaWallet0.address, claimAmount, setId] ); expect(castLogEvent.eventNames[0]).eq( "LogClaimCollateralFromRedemption(address,uint256,uint256)" @@ -1669,7 +1686,7 @@ describe("Liquity", () => { liquity.lusdToken, amount, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const stabilityDepositSpell = { @@ -1678,12 +1695,12 @@ describe("Liquity", () => { args: [amount, frontendTag, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); const depositedAmount = await liquity.stabilityPool.getCompoundedLUSDDeposit( - dsa.address + dsaWallet0.address ); expect(depositedAmount).to.eq(amount); }); @@ -1715,14 +1732,14 @@ describe("Liquity", () => { // Allow DSA to spend user's LUSD await liquity.lusdToken .connect(userWallet) - .approve(dsa.address, amount); + .approve(dsaWallet0.address, amount); - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); const depositedAmount = await liquity.stabilityPool.getCompoundedLUSDDeposit( - dsa.address + dsaWallet0.address ); expect(depositedAmount).to.eq(amount); }); @@ -1740,7 +1757,7 @@ describe("Liquity", () => { liquity.lusdToken, amount, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const stabilityDepositSpell = { @@ -1757,7 +1774,7 @@ describe("Liquity", () => { }; // Create a Stability deposit for this DSA - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); @@ -1768,7 +1785,7 @@ describe("Liquity", () => { // Fast forward in time so we have an LQTY gain await provider.send("evm_increaseTime", [600]); - await provider.send("evm_mine"); + await provider.send("evm_mine", []); // Create a Stability Pool deposit with a differen DSA so that LQTY gains can be calculated // See: https://github.com/liquity/dev/#lqty-reward-events-and-payouts @@ -1784,20 +1801,21 @@ describe("Liquity", () => { .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); const ethGain = await liquity.stabilityPool.getDepositorETHGain( - dsa.address + dsaWallet0.address ); const lqtyGain = await liquity.stabilityPool.getDepositorLQTYGain( - dsa.address + dsaWallet0.address ); // Top up the user's deposit so that we can track their ETH and LQTY gain - const depositAgainTx = await dsa + const depositAgainTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); const receipt = await depositAgainTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( [ "address", @@ -1811,7 +1829,7 @@ describe("Liquity", () => { "uint256", ], [ - dsa.address, + dsaWallet0.address, halfAmount, ethGain, lqtyGain, @@ -1832,7 +1850,7 @@ describe("Liquity", () => { describe("stabilityWithdraw()", () => { it("withdraws from Stability Pool", async () => { // Start this test from scratch since we need to remove any liquidatable Troves withdrawing from Stability Pool - [liquity, dsa] = await helpers.resetInitialState( + [liquity, dsaWallet0] = await helpers.resetInitialState( userWallet.address, contracts ); @@ -1850,7 +1868,7 @@ describe("Liquity", () => { liquity.lusdToken, amount, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const stabilityDepositSpell = { @@ -1867,14 +1885,16 @@ describe("Liquity", () => { }; const spells = [stabilityDepositSpell, stabilityWithdrawSpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); const depositedAmount = await liquity.stabilityPool.getCompoundedLUSDDeposit( - dsa.address + dsaWallet0.address + ); + const dsaLusdBalance = await liquity.lusdToken.balanceOf( + dsaWallet0.address ); - const dsaLusdBalance = await liquity.lusdToken.balanceOf(dsa.address); expect(depositedAmount).to.eq(amount.div(2)); expect(dsaLusdBalance).to.eq(amount.div(2)); @@ -1882,7 +1902,7 @@ describe("Liquity", () => { it("withdraws from Stability Pool and stores the LUSD for other spells", async () => { // Start this test from scratch since we need to remove any liquidatable Troves withdrawing from Stability Pool - [liquity, dsa] = await helpers.resetInitialState( + [liquity, dsaWallet0] = await helpers.resetInitialState( userWallet.address, contracts ); @@ -1900,7 +1920,7 @@ describe("Liquity", () => { liquity.lusdToken, amount, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const stabilityDepositSpell = { @@ -1934,15 +1954,15 @@ describe("Liquity", () => { withdrawLusdSpell, ]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); const depositedAmount = await liquity.stabilityPool.getCompoundedLUSDDeposit( - dsa.address + dsaWallet0.address ); const walletLusdBalance = await liquity.lusdToken.balanceOf( - dsa.address + dsaWallet0.address ); expect(depositedAmount).to.eq(amount.div(2)); @@ -1951,7 +1971,7 @@ describe("Liquity", () => { it("returns Instadapp event name and data", async () => { // Start this test from scratch since we need to remove any liquidatable Troves withdrawing from Stability Pool - [liquity, dsa] = await helpers.resetInitialState( + [liquity, dsaWallet0] = await helpers.resetInitialState( userWallet.address, contracts ); @@ -1963,7 +1983,7 @@ describe("Liquity", () => { liquity.lusdToken, amount, contracts.STABILITY_POOL_ADDRESS, - dsa.address + dsaWallet0.address ); const stabilityDepositSpell = { @@ -1980,7 +2000,7 @@ describe("Liquity", () => { const setLqtyGainId = 0; // Create a Stability Pool deposit - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); @@ -1992,7 +2012,7 @@ describe("Liquity", () => { // Fast forward in time so we have an LQTY gain await provider.send("evm_increaseTime", [600]); - await provider.send("evm_mine"); + await provider.send("evm_mine", []); // Create another Stability Pool deposit so that LQTY gains are realized // See: https://github.com/liquity/dev/#lqty-reward-events-and-payouts @@ -2008,10 +2028,10 @@ describe("Liquity", () => { .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); const ethGain = await liquity.stabilityPool.getDepositorETHGain( - dsa.address + dsaWallet0.address ); const lqtyGain = await liquity.stabilityPool.getDepositorLQTYGain( - dsa.address + dsaWallet0.address ); const stabilityWithdrawSpell = { @@ -2026,7 +2046,7 @@ describe("Liquity", () => { ], }; - const withdrawTx = await dsa + const withdrawTx = await dsaWallet0 .connect(userWallet) .cast( ...encodeSpells([stabilityWithdrawSpell]), @@ -2034,8 +2054,9 @@ describe("Liquity", () => { ); const receipt = await withdrawTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( [ "address", @@ -2048,7 +2069,7 @@ describe("Liquity", () => { "uint256", ], [ - dsa.address, + dsaWallet0.address, withdrawAmount, ethGain, lqtyGain, @@ -2068,7 +2089,7 @@ describe("Liquity", () => { describe("stabilityMoveEthGainToTrove()", () => { beforeEach(async () => { // Start these test from fresh so that we definitely have a liquidatable Trove within this block - [liquity, dsa] = await helpers.resetInitialState( + [liquity, dsaWallet0] = await helpers.resetInitialState( userWallet.address, contracts ); @@ -2077,9 +2098,9 @@ describe("Liquity", () => { it("moves ETH gain from Stability Pool to Trove", async () => { // Create a DSA owned Trove to capture ETH liquidation gains // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); const troveCollateralBefore = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); // Create a Stability Deposit using the Trove's borrowed LUSD @@ -2091,7 +2112,7 @@ describe("Liquity", () => { args: [amount, frontendTag, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); @@ -2103,7 +2124,7 @@ describe("Liquity", () => { }); const ethGainFromLiquidation = await liquity.stabilityPool.getDepositorETHGain( - dsa.address + dsaWallet0.address ); // Move ETH gain to Trove @@ -2113,15 +2134,15 @@ describe("Liquity", () => { args: [ethers.constants.AddressZero, ethers.constants.AddressZero], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([moveEthGainSpell]), userWallet.address); const ethGainAfterMove = await liquity.stabilityPool.getDepositorETHGain( - dsa.address + dsaWallet0.address ); const troveCollateral = await liquity.troveManager.getTroveColl( - dsa.address + dsaWallet0.address ); const expectedTroveCollateral = troveCollateralBefore.add( ethGainFromLiquidation @@ -2133,7 +2154,7 @@ describe("Liquity", () => { it("returns Instadapp event name and data", async () => { // Create a DSA owned Trove to capture ETH liquidation gains // Create a dummy Trove - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); // Create a Stability Deposit using the Trove's borrowed LUSD const amount = ethers.utils.parseUnits("100", 18); @@ -2144,7 +2165,7 @@ describe("Liquity", () => { args: [amount, frontendTag, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stabilityDepositSpell]), userWallet.address); @@ -2156,7 +2177,7 @@ describe("Liquity", () => { }); const ethGainFromLiquidation = await liquity.stabilityPool.getDepositorETHGain( - dsa.address + dsaWallet0.address ); // Move ETH gain to Trove @@ -2166,17 +2187,18 @@ describe("Liquity", () => { args: [ethers.constants.AddressZero, ethers.constants.AddressZero], }; - const moveEthGainTx = await dsa + const moveEthGainTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([moveEthGainSpell]), userWallet.address); const receipt = await moveEthGainTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256"], - [dsa.address, ethGainFromLiquidation] + [dsaWallet0.address, ethGainFromLiquidation] ); expect(castLogEvent.eventNames[0]).eq( "LogStabilityMoveEthGainToTrove(address,uint256)" @@ -2198,7 +2220,7 @@ describe("Liquity", () => { liquity.lqtyToken, amount, helpers.JUSTIN_SUN_ADDRESS, - dsa.address + dsaWallet0.address ); const stakeSpell = { @@ -2207,11 +2229,13 @@ describe("Liquity", () => { args: [amount, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stakeSpell]), userWallet.address); - const lqtyBalance = await liquity.lqtyToken.balanceOf(dsa.address); + const lqtyBalance = await liquity.lqtyToken.balanceOf( + dsaWallet0.address + ); expect(lqtyBalance).to.eq(0); const totalStakingBalance = await liquity.lqtyToken.balanceOf( @@ -2251,13 +2275,15 @@ describe("Liquity", () => { // Allow DSA to spend user's LQTY await liquity.lqtyToken .connect(userWallet) - .approve(dsa.address, amount); + .approve(dsaWallet0.address, amount); - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); - const lqtyBalance = await liquity.lqtyToken.balanceOf(dsa.address); + const lqtyBalance = await liquity.lqtyToken.balanceOf( + dsaWallet0.address + ); expect(lqtyBalance).to.eq(0); const totalStakingBalance = await liquity.lqtyToken.balanceOf( @@ -2274,7 +2300,7 @@ describe("Liquity", () => { liquity.lqtyToken, amount, helpers.JUSTIN_SUN_ADDRESS, - dsa.address + dsaWallet0.address ); const getStakeId = 0; @@ -2287,18 +2313,19 @@ describe("Liquity", () => { args: [amount, getStakeId, setStakeId, setEthGainId, setLusdGainId], }; - const stakeTx = await dsa + const stakeTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stakeSpell]), userWallet.address); const receipt = await stakeTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256", "uint256", "uint256"], [ - dsa.address, + dsaWallet0.address, amount, getStakeId, setStakeId, @@ -2320,7 +2347,7 @@ describe("Liquity", () => { liquity.lqtyToken, amount, helpers.JUSTIN_SUN_ADDRESS, - dsa.address + dsaWallet0.address ); const stakeSpell = { @@ -2329,7 +2356,7 @@ describe("Liquity", () => { args: [amount, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stakeSpell]), userWallet.address); @@ -2342,11 +2369,13 @@ describe("Liquity", () => { args: [amount, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([unstakeSpell]), userWallet.address); - const lqtyBalance = await liquity.lqtyToken.balanceOf(dsa.address); + const lqtyBalance = await liquity.lqtyToken.balanceOf( + dsaWallet0.address + ); expect(lqtyBalance).to.eq(amount); const totalStakingBalance = await liquity.lqtyToken.balanceOf( @@ -2363,7 +2392,7 @@ describe("Liquity", () => { liquity.lqtyToken, amount, helpers.JUSTIN_SUN_ADDRESS, - dsa.address + dsaWallet0.address ); const stakeSpell = { @@ -2372,7 +2401,7 @@ describe("Liquity", () => { args: [amount, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stakeSpell]), userWallet.address); @@ -2398,11 +2427,13 @@ describe("Liquity", () => { ], }; const spells = [unstakeSpell, withdrawLqtySpell]; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address); - const lqtyBalance = await liquity.lqtyToken.balanceOf(dsa.address); + const lqtyBalance = await liquity.lqtyToken.balanceOf( + dsaWallet0.address + ); const totalStakingBalance = await liquity.lqtyToken.balanceOf( contracts.STAKING_ADDRESS ); @@ -2422,7 +2453,7 @@ describe("Liquity", () => { liquity.lqtyToken, amount, helpers.JUSTIN_SUN_ADDRESS, - dsa.address + dsaWallet0.address ); const stakeSpell = { @@ -2431,7 +2462,7 @@ describe("Liquity", () => { args: [amount, 0, 0, 0, 0], }; - await dsa + await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([stakeSpell]), userWallet.address); @@ -2451,18 +2482,19 @@ describe("Liquity", () => { ], }; - const unstakeTx = await dsa + const unstakeTx = await dsaWallet0 .connect(userWallet) .cast(...encodeSpells([unstakeSpell]), userWallet.address); const receipt = await unstakeTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256", "uint256", "uint256"], [ - dsa.address, + dsaWallet0.address, amount, getUnstakeId, setUnstakeId, @@ -2499,7 +2531,7 @@ describe("Liquity", () => { .cast(...encodeSpells([stakeSpell]), userWallet.address); // Open a Trove to cause an ETH issuance gain for stakers - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); // Redeem some ETH to cause an LUSD redemption gain for stakers await helpers.redeem( @@ -2567,7 +2599,7 @@ describe("Liquity", () => { .cast(...encodeSpells([stakeSpell]), userWallet.address); // Open a Trove to cause an ETH issuance gain for stakers - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); // Redeem some ETH to cause an LUSD redemption gain for stakers await helpers.redeem( @@ -2601,7 +2633,7 @@ describe("Liquity", () => { const withdrawEthSpell = { connector: helpers.INSTADAPP_BASIC_V1_CONNECTOR, method: "withdraw", - args: [helpers.ETH_ADDRESS, 0, userWallet.address, ethGainId, 0], + args: [helpers.ETH, 0, userWallet.address, ethGainId, 0], }; const withdrawLusdSpell = { @@ -2626,7 +2658,7 @@ describe("Liquity", () => { await stakerDsa .connect(userWallet) .cast(...encodeSpells(spells), userWallet.address, { - gasPrice: 0, + ce: 0, }); const ethBalanceAfter = await ethers.provider.getBalance( @@ -2667,7 +2699,7 @@ describe("Liquity", () => { .cast(...encodeSpells([stakeSpell]), userWallet.address); // Open a Trove to cause an ETH issuance gain for stakers - await helpers.createDsaTrove(dsa, userWallet, liquity); + await helpers.createDsaTrove(dsaWallet0, userWallet, liquity); // Redeem some ETH to cause an LUSD redemption gain for stakers await helpers.redeem( @@ -2702,8 +2734,9 @@ describe("Liquity", () => { const receipt = await claimGainsTx.wait(); - const castLogEvent = receipt.events.find((e) => e.event === "LogCast") - .args; + const castLogEvent = receipt.events.find( + (e: { event: string }) => e.event === "LogCast" + ).args; const expectedEventParams = ethers.utils.defaultAbiCoder.encode( ["address", "uint256", "uint256", "uint256", "uint256"], [stakerDsa.address, ethGain, lusdGain, setEthGainId, setLusdGainId] diff --git a/test/mappings/mappings.test.js b/test/mainnet/mappings/mappings.test.ts similarity index 93% rename from test/mappings/mappings.test.js rename to test/mainnet/mappings/mappings.test.ts index 9a6546a3..dfc60644 100644 --- a/test/mappings/mappings.test.js +++ b/test/mainnet/mappings/mappings.test.ts @@ -1,21 +1,22 @@ -const { ethers, network } = require("hardhat"); -const chai = require("chai"); -const chaiPromise = require("chai-as-promised"); -const { solidity } = require("ethereum-waffle"); +import hre, { ethers, network } from "hardhat"; +import chai from "chai"; +import chaiPromise from "chai-as-promised"; +import { solidity } from "ethereum-waffle"; +import type { Signer, Contract } from "ethers"; chai.use(chaiPromise); chai.use(solidity); const { expect } = chai; -const getMapping = (address, signer) => { +const getMapping = (address: string, signer: Signer) => { return ethers.getContractAt("InstaMappingController", address, signer); }; describe("Test InstaMapping contract", () => { - let account, instaMaster; - let mappingAddress; - let masterMapping; + let account: any, instaMaster: any; + let mappingAddress: any; + let masterMapping: any; const indexInterfaceAddress = "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723"; const testRoleAddress = "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723"; @@ -25,6 +26,7 @@ describe("Test InstaMapping contract", () => { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 12796965, }, diff --git a/test/mainnet/pooltogether/pooltogether.test.ts b/test/mainnet/pooltogether/pooltogether.test.ts new file mode 100644 index 00000000..e300ec25 --- /dev/null +++ b/test/mainnet/pooltogether/pooltogether.test.ts @@ -0,0 +1,1238 @@ +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; +const { provider, deployContract } = waffle; + +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; + +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { constants } from "../../../scripts/constant/constant"; +import { tokens } from "../../../scripts/tests/mainnet/tokens"; +import type { Signer, Contract } from "ethers"; + +import { + ConnectV2Compound__factory, + ConnectV2PoolTogether__factory, + ConnectV2UniswapV2__factory, +} from "../../../typechain"; + +const DAI_TOKEN_ADDR = tokens.dai.address; // DAI Token + +// PoolTogether Address: https://docs.pooltogether.com/resources/networks/ethereum +const DAI_PRIZE_POOL_ADDR = "0xEBfb47A7ad0FD6e57323C8A42B2E5A6a4F68fc1a"; // DAI Prize Pool +const PT_DAI_TICKET_ADDR = "0x334cBb5858417Aee161B53Ee0D5349cCF54514CF"; // PT DAI Ticket +const DAI_POOL_FAUCET_ADDR = "0xF362ce295F2A4eaE4348fFC8cDBCe8d729ccb8Eb"; // DAI POOL Faucet +const POOL_TOKEN_ADDRESS = "0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e"; // POOL Tocken +const TOKEN_FAUCET_PROXY_FACTORY_ADDR = + "0xE4E9cDB3E139D7E8a41172C20b6Ed17b6750f117"; // TokenFaucetProxyFactory for claimAll +const DAI_POD_ADDR = "0x2f994e2E4F3395649eeE8A89092e63Ca526dA829"; // DAI Pod +const UNISWAP_POOLETHLP_PRIZE_POOL_ADDR = + "0x3AF7072D29Adde20FC7e173a7CB9e45307d2FB0A"; // Uniswap Pool/ETH LP PrizePool +const UNISWAP_POOLETHLP_FAUCET_ADDR = + "0x9A29401EF1856b669f55Ae5b24505b3B6fAEb370"; // Uniswap Pool/ETH LP Faucet +const UNISWAP_POOLETHLP_TOKEN_ADDR = + "0x85cb0bab616fe88a89a35080516a8928f38b518b"; // Uniswap Pool/ETH Token +const PT_UNISWAP_POOLETHLP_TICKET_ADDR = + "0xeb8928ee92efb06c44d072a24c2bcb993b61e543"; // Pool Together Uniswap Pool/ETH LP Ticket +const POOL_PRIZE_POOL_ADDR = "0x396b4489da692788e327e2e4b2b0459a5ef26791"; // POOL Prize Pool +const PT_POOL_TICKET_ADDR = "0x27d22a7648e955e510a40bdb058333e9190d12d4"; // Pool Together POOL Ticket +const WETH_ADDR = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; // WETH +const DAI_POD_TOKEN_DROP = "0xc5209623E3dFdf9C0cCbe497c8012883C4147731"; + +// Community WETH Prize Pool (Rari): https://reference-app.pooltogether.com/pools/mainnet/0xa88ca010b32a54d446fc38091ddbca55750cbfc3/manage#stats +const WETH_PRIZE_POOL_ADDR = "0xa88ca010b32a54d446fc38091ddbca55750cbfc3"; // Community WETH Prize Pool (Rari) +const WETH_POOL_TICKET_ADDR = "0x9b5c30aeb9ce2a6a121cea9a85bc0d662f6d9b40"; // Community WETH Prize Pool Ticket (Rari) + +const prizePoolABI = [ + "function calculateEarlyExitFee( address from, address controlledToken, uint256 amount) external returns ( uint256 exitFee, uint256 burnedCredit)", +]; + +const podABI = [ + "function getEarlyExitFee(uint256 amount) external returns (uint256)", + "function balanceOfUnderlying(address user) external view returns (uint256 amount)", + "function drop() public returns (uint256)", + "function balanceOf(address account) external view returns (uint256)", +]; + +const POD_FACTORY_ADDRESS = "0x4e3a9f9fbafb2ec49727cffa2a411f7a0c1c4ce1"; +const podFactoryABI = [ + "function create( address _prizePool, address _ticket, address _faucet, address _manager, uint8 _decimals) external returns (address pod)", +]; + +const tokenDropABI = [ + "function claim(address user) external returns (uint256)", +]; + +describe("PoolTogether", function() { + const connectorName = "COMPOUND-TEST-A"; + const uniswapConnectorName = "UNISWAP-TEST-A"; + const ptConnectorName = "POOLTOGETHER-TEST-A"; + + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; + let ptConnector: any; + let uniswapConnector: any; + + const wallets = provider.getWallets(); + const [wallet0, wallet1, wallet2, wallet3] = wallets; + before(async () => { + await hre.network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + // @ts-ignore + jsonRpcUrl: hre.config.networks.hardhat.forking.url, + blockNumber: 12696000, + }, + }, + ], + }); + + masterSigner = await getMasterSigner(); + instaConnectorsV2 = await ethers.getContractAt( + abis.core.connectorsV2, + addresses.core.connectorsV2 + ); + + // Deploy and enable Compound Connector + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2Compound__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + + // Deploy and enable Pool Together Connector + ptConnector = await deployAndEnableConnector({ + connectorName: ptConnectorName, + contractArtifact: ConnectV2PoolTogether__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + + // Deploy and enable Uniswap Connector + uniswapConnector = await deployAndEnableConnector({ + connectorName: uniswapConnectorName, + contractArtifact: ConnectV2UniswapV2__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + }); + + it("Should have contracts deployed.", async function() { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!ptConnector.address).to.be.true; + expect(!!uniswapConnector.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; + }); + + describe("DSA wallet setup", function() { + it("Should build DSA v2", async function() { + dsaWallet0 = await buildDSAv2(wallet0.address); + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit 10 ETH into DSA wallet", async function() { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: ethers.utils.parseEther("10"), + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("10") + ); + }); + }); + + describe("Main - DAI Prize Pool Test", function() { + it("Should deposit 1 ETH in Compound", async function() { + const amount = ethers.utils.parseEther("1"); // 1 ETH + const spells = [ + { + connector: connectorName, + method: "deposit", + args: ["ETH-A", amount, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + }); + + it("Should borrow 100 DAI from Compound and deposit DAI into DAI Prize Pool", async function() { + const amount = ethers.utils.parseEther("100"); // 100 DAI + const setId = "83478237"; + const spells = [ + { + connector: connectorName, + method: "borrow", + args: ["DAI-A", amount, 0, setId], + }, + { + connector: ptConnectorName, + method: "depositTo", + args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, setId, 0], + }, + ]; + // Before Spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI balance is 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_DAI_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether DAI Ticket balance is 0`).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect( + daiBalance, + `Expect DAI balance to still equal 0 since it was deposited into Prize Pool` + ).to.be.eq(0); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect( + balanceAfter, + `PoolTogether DAI Ticket balance equals 100` + ).to.be.eq(ethers.utils.parseEther("100")); + + // ETH used for transaction + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + }); + + it("Should wait 11 days, withdraw all PrizePool, get back 100 DAI, and claim POOL", async function() { + const amount = ethers.utils.parseEther("100"); // 100 DAI + + let prizePoolContract = new ethers.Contract( + DAI_PRIZE_POOL_ADDR, + prizePoolABI, + ethers.provider + ); + let earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 1 DAI because starts at 10%" + ).to.be.eq(ethers.utils.parseEther("1")); + + const spells = [ + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + DAI_PRIZE_POOL_ADDR, + amount, + PT_DAI_TICKET_ADDR, + earlyExitFee.exitFee, + 0, + 0, + ], + }, + { + connector: ptConnectorName, + method: "claim", + args: [DAI_POOL_FAUCET_ADDR, 0], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI balance equals 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_DAI_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether Dai Ticket is 100`).to.be.eq( + ethers.utils.parseEther("100") + ); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token equals 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + + // Increase time by 11 days so we get back all DAI without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [11 * 24 * 60 * 60]); + + earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 0 DAI because past 10 days" + ).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect( + daiBalance, + `DAI balance to be equal to 100, because of no early withdrawal fee` + ).to.be.eq(ethers.utils.parseEther("100")); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether Dai Ticket to equal 0`).to.be.eq(0); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect( + poolBalanceAfter, + `POOL Token Balance to be greater than 0` + ).to.be.gt(ethers.utils.parseEther("0")); + }); + + it("Should deposit and withdraw all PrizePool, get back less than 100 DAI", async function() { + const amount = ethers.utils.parseEther("100"); // 100 DAI + const exitFee = ethers.utils.parseEther("1"); // 1 DAI is 10% of 100 DAI + const spells = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, 0, 0], + }, + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + DAI_PRIZE_POOL_ADDR, + amount, + PT_DAI_TICKET_ADDR, + exitFee, + 0, + 0, + ], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI Balance equals 0`).to.be.eq( + ethers.utils.parseEther("100") + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_DAI_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether DAI Ticket equals 0`).to.be.eq(0); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `PoolTogether Token greater than 0`).to.be.gt(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect( + daiBalance, + `DAI balance to be less than 100, because of early withdrawal fee` + ).to.be.lt(ethers.utils.parseEther("100")); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether Dai Ticket to equal 0`).to.be.eq(0); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token Balance to greater than 0`).to.be.gt( + ethers.utils.parseEther("0") + ); + }); + + it("Should deposit, wait 11 days, and withdraw all PrizePool, get 99 DAI, and claim all POOL using claimAll", async function() { + const amount = ethers.utils.parseEther("99"); // 99 DAI + const depositSpells = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, 0, 0], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI balance less than 100`).to.be.lt( + ethers.utils.parseEther("100") + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_DAI_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether DAI Ticket equal 0`).to.be.eq(0); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token is greater than 0`).to.be.gt( + ethers.utils.parseEther("0") + ); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(depositSpells), wallet1.address); + const receipt = await tx.wait(); + + const prizePoolContract = new ethers.Contract( + DAI_PRIZE_POOL_ADDR, + prizePoolABI, + ethers.provider + ); + let earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to .99 DAI because starts at 10%" + ).to.be.eq(ethers.utils.parseEther(".99")); + + // Increase time by 11 days so we get back all DAI without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [11 * 24 * 60 * 60]); + + earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 0 DAI because past 10 days" + ).to.be.eq(0); + + const withdrawSpells = [ + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + DAI_PRIZE_POOL_ADDR, + amount, + PT_DAI_TICKET_ADDR, + earlyExitFee.exitFee, + 0, + 0, + ], + }, + { + connector: ptConnectorName, + method: "claimAll", + args: [TOKEN_FAUCET_PROXY_FACTORY_ADDR, [DAI_POOL_FAUCET_ADDR]], + }, + ]; + + // Run spell transaction + const tx2 = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(withdrawSpells), wallet1.address); + const receipt2 = await tx2.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI balance equals 99`).to.be.eq( + ethers.utils.parseEther("99") + ); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether DAI Ticket equal 0`).to.be.eq(0); + + // Expect + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `Pool Token to be greateir than 0`).to.be.gt( + ethers.utils.parseEther("0") + ); + }); + }); + + describe("Main - DAI Pod Test", function() { + it("Should deposit 99 DAI in DAI Pod", async function() { + const amount = ethers.utils.parseEther("99"); // 99 DAI + const spells = [ + { + connector: ptConnectorName, + method: "depositToPod", + args: [DAI_TOKEN_ADDR, DAI_POD_ADDR, amount, 0, 0], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI balance equals 99`).to.be.eq( + ethers.utils.parseEther("99") + ); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token greater than 0`).to.be.gte(0); + + let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR); + const podBalance = await podToken.balanceOf(dsaWallet0.address); + expect(podBalance, `Pod DAI Token equals 0`).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI equals 0`).to.be.eq(0); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token greater than 0`).to.be.gt(0); + + const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address); + expect(podBalanceAfter, `Pod DAI token greater than 0`).to.be.eq( + ethers.utils.parseEther("99") + ); + }); + + it("Should claim rewards from pod token drop", async function() { + const spells = [ + { + connector: ptConnectorName, + method: "claimPodTokenDrop", + args: [DAI_POD_TOKEN_DROP, 0], + }, + ]; + + const tokenDropContract = new ethers.Contract( + DAI_POD_TOKEN_DROP, + tokenDropABI, + ethers.provider + ); + const podContract = new ethers.Contract( + DAI_POD_ADDR, + podABI, + masterSigner + ); + + // drop(): Claim TokenDrop asset for PrizePool Pod and transfers token(s) to external Pod TokenDrop + // dropt() also calls batch which, Deposit Pod float into PrizePool. Deposits the current float + // amount into the PrizePool and claims current POOL rewards. + const dropTx = await podContract.drop(); + await dropTx.wait(); + + // POOL Rewards able to claim from Pod Token Drop + let claimAmount = await tokenDropContract.callStatic["claim"]( + dsaWallet0.address + ); + + // Before spell + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + const total = claimAmount.add(poolBalance); + expect(poolBalanceAfter, `POOL Token same as before spell`).to.be.eq( + total + ); + }); + + it("Should wait 11 days, withdraw all podTokens, get back 99 DAI", async function() { + const amount = ethers.utils.parseEther("99"); // 99 DAI + + const podContract = new ethers.Contract( + DAI_POD_ADDR, + podABI, + ethers.provider + ); + let maxFee = await podContract.callStatic["getEarlyExitFee"](amount); + // maxFee depends on if token has been deposited to PrizePool yet + // since we called drop in previous test case, the tokens were deposited to PrizePool + expect( + maxFee, + "Exit Fee equal to .99 DAI because token still in float" + ).to.be.eq(ethers.utils.parseEther(".99")); + + const spells = [ + { + connector: ptConnectorName, + method: "withdrawFromPod", + args: [DAI_POD_ADDR, amount, maxFee, 0, 0], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI Balance equals 0`).to.be.eq(0); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token balance greater than 0`).to.be.gt(0); + + let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR); + const podBalance = await podToken.balanceOf(dsaWallet0.address); + expect(podBalance, `Pod DAI Token equals 99`).to.be.eq( + ethers.utils.parseEther("99") + ); + + // Increase time by 11 days so we get back all DAI without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [11 * 24 * 60 * 60]); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect( + daiBalance, + `DAI balance equals 99, because of no early withdrawal fee` + ).to.be.eq(ethers.utils.parseEther("99")); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token to be greater than 0`).to.be.gt(0); + + const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address); + expect(podBalanceAfter, `Pod DAI Token equals 0`).to.be.eq(0); + }); + + it("Should deposit and withdraw from pod, get back same amount of 99 DAI", async function() { + const amount = ethers.utils.parseEther("99"); + const maxFee = 0; // maxFee 0 since it doesn't give chance for Pod to actually deposit into PrizePool + + const spells = [ + { + connector: ptConnectorName, + method: "depositToPod", + args: [DAI_TOKEN_ADDR, DAI_POD_ADDR, amount, 0, 0], + }, + { + connector: ptConnectorName, + method: "withdrawFromPod", + args: [DAI_POD_ADDR, amount, maxFee, 0, 0], + }, + ]; + + // Before spell + let daiToken = await ethers.getContractAt( + abis.basic.erc20, + DAI_TOKEN_ADDR + ); + let daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect(daiBalance, `DAI equals 99`).to.be.eq( + ethers.utils.parseEther("99") + ); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); + + // PodToken is 0 + let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR); + const podBalance = await podToken.balanceOf(dsaWallet0.address); + expect(podBalance, `Pod DAI Token equals 0`).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + daiBalance = await daiToken.balanceOf(dsaWallet0.address); + expect( + daiBalance, + `DAI balance to be equal to 99, because funds still in 'float` + ).to.be.eq(ethers.utils.parseEther("99")); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token same as before spell`).to.be.eq( + poolBalance + ); + + // Expect Pod Token Balance to equal 0 + const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address); + expect(podBalanceAfter, `Pod DAI Token equals 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + }); + }); + + describe("Main - UNISWAP POOL/ETH Prize Pool Test", function() { + it("Should use uniswap to swap ETH for POOL, deposit to POOL/ETH LP, deposit POOL/ETH LP to PrizePool", async function() { + const amount = ethers.utils.parseEther("100"); // 100 POOL + const slippage = ethers.utils.parseEther("0.03"); + const setId = "83478237"; + + const UniswapV2Router02ABI = [ + "function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)", + ]; + + // Get amount of ETH for 100 POOL from Uniswap + const UniswapV2Router02 = await ethers.getContractAt( + UniswapV2Router02ABI, + "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" + ); + const amounts = await UniswapV2Router02.getAmountsOut(amount, [ + POOL_TOKEN_ADDRESS, + WETH_ADDR, + ]); + const unitAmount = ethers.utils.parseEther( + ((amounts[1] * 1.03) / amounts[0]).toString() + ); + + const spells = [ + { + connector: uniswapConnectorName, + method: "buy", + args: [ + POOL_TOKEN_ADDRESS, + tokens.eth.address, + amount, + unitAmount, + 0, + setId, + ], + }, + { + connector: uniswapConnectorName, + method: "deposit", + args: [ + POOL_TOKEN_ADDRESS, + tokens.eth.address, + amount, + unitAmount, + slippage, + 0, + setId, + ], + }, + { + connector: ptConnectorName, + method: "depositTo", + args: [ + UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, + 0, + PT_UNISWAP_POOLETHLP_TICKET_ADDR, + setId, + 0, + ], + }, + ]; + + // Before Spell + let ethBalance = await ethers.provider.getBalance(dsaWallet0.address); + expect(ethBalance, `ETH Balance equals 9`).to.be.eq( + ethers.utils.parseEther("9") + ); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token greater than 0`).to.be.gte(0); + + let uniswapLPToken = await ethers.getContractAt( + abis.basic.erc20, + UNISWAP_POOLETHLP_TOKEN_ADDR + ); + const uniswapPoolEthBalance = await uniswapLPToken.balanceOf( + dsaWallet0.address + ); + expect(uniswapPoolEthBalance, `Uniswap POOL/ETH LP equals 0`).to.be.eq(0); + + let ptUniswapPoolEthToken = await ethers.getContractAt( + abis.basic.erc20, + PT_UNISWAP_POOLETHLP_TICKET_ADDR + ); + const ptUniswapPoolEthBalance = await ptUniswapPoolEthToken.balanceOf( + dsaWallet0.address + ); + expect( + ptUniswapPoolEthBalance, + `PoolTogether Uniswap POOL?ETH LP equals 0` + ).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + ethBalance = await ethers.provider.getBalance(dsaWallet0.address); + expect(ethBalance, `ETH Balance less than 9`).to.be.lt( + ethers.utils.parseEther("9") + ); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token to be same after spell`).to.be.eq( + poolBalance + ); + + const uniswapPoolEthBalanceAfter = await uniswapLPToken.balanceOf( + dsaWallet0.address + ); + expect( + uniswapPoolEthBalanceAfter, + `Uniswap POOL/ETH LP equals 0` + ).to.be.eq(0); + + const ptUniswapPoolEthBalanceAfter = await ptUniswapPoolEthToken.balanceOf( + dsaWallet0.address + ); + expect( + ptUniswapPoolEthBalanceAfter, + `PT Uniswap POOL/ETH LP to greater than 0` + ).to.be.gt(0); + }); + + it("Should withdraw all PrizePool, get back Uniswap LP, claim POOL, deposit claimed POOL into Pool PrizePool", async function() { + let ptUniswapPoolEthToken = await ethers.getContractAt( + abis.basic.erc20, + PT_UNISWAP_POOLETHLP_TICKET_ADDR + ); + const ptUniswapPoolEthBalance = await ptUniswapPoolEthToken.balanceOf( + dsaWallet0.address + ); + const setId = "83478237"; + + let uniswapPrizePoolContract = new ethers.Contract( + UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, + prizePoolABI, + ethers.provider + ); + let earlyExitFee = await uniswapPrizePoolContract.callStatic[ + "calculateEarlyExitFee" + ]( + dsaWallet0.address, + PT_UNISWAP_POOLETHLP_TICKET_ADDR, + ptUniswapPoolEthBalance + ); + expect( + earlyExitFee.exitFee, + "Exit Fee equals 0 because no early exit fee for this prize pool" + ).to.be.eq(0); + + const spells = [ + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, + ptUniswapPoolEthBalance, + PT_UNISWAP_POOLETHLP_TICKET_ADDR, + earlyExitFee.exitFee, + 0, + 0, + ], + }, + { + connector: ptConnectorName, + method: "claim", + args: [UNISWAP_POOLETHLP_FAUCET_ADDR, setId], + }, + { + connector: ptConnectorName, + method: "depositTo", + args: [POOL_PRIZE_POOL_ADDR, 0, PT_POOL_TICKET_ADDR, setId, 0], + }, + ]; + + // Before spell + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); + + // Uniswap POOL/ETH LP is 0 + let uniswapLPToken = await ethers.getContractAt( + abis.basic.erc20, + UNISWAP_POOLETHLP_TOKEN_ADDR + ); + const uniswapPoolEthBalance = await uniswapLPToken.balanceOf( + dsaWallet0.address + ); + expect(uniswapPoolEthBalance, `Uniswap POOL/ETH LP equals 0`).to.be.eq(0); + + expect( + ptUniswapPoolEthBalance, + `PT Uniswap POOL/ETH LP greater than 0` + ).to.be.gt(0); + + let poolPoolTicket = await ethers.getContractAt( + abis.basic.erc20, + PT_POOL_TICKET_ADDR + ); + const poolPoolTicketBalance = await poolPoolTicket.balanceOf( + dsaWallet0.address + ); + expect( + poolPoolTicketBalance, + `PoolTogether POOL Ticket equals 0` + ).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect( + poolBalanceAfter, + `Pool Token Balance equal to balance before spell` + ).to.be.eq(poolBalance); + + const uniswapPoolEthBalanceAfter = await uniswapLPToken.balanceOf( + dsaWallet0.address + ); + expect( + uniswapPoolEthBalanceAfter, + `Uniswap POOL/ETH LP to greater than 0` + ).to.be.gt(0); + + const ptUniswapPoolEthBalanceAfter = await ptUniswapPoolEthToken.balanceOf( + dsaWallet0.address + ); + expect( + ptUniswapPoolEthBalanceAfter, + `PT Uniswap POOL/ETH LP equal 0` + ).to.be.eq(0); + + const poolPoolTicketBalanceAfter = await poolPoolTicket.balanceOf( + dsaWallet0.address + ); + expect( + poolPoolTicketBalanceAfter, + `PoolTogether POOL Ticket greater than 0` + ).to.be.gt(0); + }); + }); + + describe("Main - WETH Prize Pool Test", function() { + it("Deposit 1 ETH into WETH Prize Pool and withdraw immediately", async function() { + const amount = ethers.utils.parseEther("1"); // 1 ETH + const setId = "83478237"; + const spells = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, setId], + }, + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + WETH_PRIZE_POOL_ADDR, + amount, + WETH_POOL_TICKET_ADDR, + amount, + setId, + 0, + ], + }, + ]; + // Before Spell + const ethBalanceBefore = await ethers.provider.getBalance( + dsaWallet0.address + ); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + const ethBalanceAfter = await ethers.provider.getBalance( + dsaWallet0.address + ); + + // ETH used for transaction + expect( + ethBalanceAfter, + `ETH Balance less than before spell because of early withdrawal fee` + ).to.be.lte(ethBalanceBefore); + }); + + it("Deposit 1 ETH into WETH Prize Pool, wait 14 days, then withdraw", async function() { + const amount = ethers.utils.parseEther("1"); // 1 ETH + const depositSpell = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, 0], + }, + ]; + + const withdrawSpell = [ + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + WETH_PRIZE_POOL_ADDR, + amount, + WETH_POOL_TICKET_ADDR, + amount, + 0, + 0, + ], + }, + ]; + + // Before Deposit Spell + let ethBalanceBefore = await ethers.provider.getBalance( + dsaWallet0.address + ); + + // Run deposit spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(depositSpell), wallet1.address); + const receipt = await tx.wait(); + + // After Deposit spell + let ethBalanceAfter = await ethers.provider.getBalance( + dsaWallet0.address + ); + + expect(ethBalanceAfter, `ETH Balance less than before spell`).to.be.lte( + ethBalanceBefore + ); + + // Increase time by 11 days so we get back all ETH without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [14 * 24 * 60 * 60]); + + // Run withdraw spell transaction + const tx2 = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(withdrawSpell), wallet1.address); + const receipt2 = await tx.wait(); + + // After Deposit spell + ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); + + expect( + ethBalanceAfter, + `ETH Balance equal to before spell because no early exit fee` + ).to.be.eq(ethBalanceBefore); + }); + }); + + describe("Main - WETH Pod Test", function() { + let podAddress: string; + it("Should deposit 1 ETH in WETH Pod and get Pod Ticket", async function() { + const amount = ethers.utils.parseEther("1"); + + // Create Pod for WETH Prize Pool (Rari) + const podFactoryContract = new ethers.Contract( + POD_FACTORY_ADDRESS, + podFactoryABI, + masterSigner + ); + podAddress = await podFactoryContract.callStatic.create( + WETH_PRIZE_POOL_ADDR, + WETH_POOL_TICKET_ADDR, + constants.address_zero, + wallet0.address, + 18 + ); + await podFactoryContract.create( + WETH_PRIZE_POOL_ADDR, + WETH_POOL_TICKET_ADDR, + constants.address_zero, + wallet0.address, + 18 + ); + + const spells = [ + { + connector: ptConnectorName, + method: "depositToPod", + args: [WETH_ADDR, podAddress, amount, 0, 0], + }, + ]; + + // Before Deposit Spell + const podContract = new ethers.Contract( + podAddress, + podABI, + ethers.provider + ); + let podBalanceBefore = await podContract.balanceOfUnderlying( + dsaWallet0.address + ); + expect(podBalanceBefore, `Pod balance equal to 0`).to.be.eq(0); + + let ethBalanceBefore = await ethers.provider.getBalance( + dsaWallet0.address + ); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After Deposit spell + let ethBalanceAfter = await ethers.provider.getBalance( + dsaWallet0.address + ); + expect(ethBalanceAfter, `ETH balance less than before`).to.be.lt( + ethBalanceBefore + ); + + let podBalanceAfter = await podContract.balanceOfUnderlying( + dsaWallet0.address + ); + expect(podBalanceAfter, `Pod balance equal to 1`).to.be.eq( + ethers.utils.parseEther("1") + ); + }); + + it("Should withdraw 1 Ticket from WETH Pod and get back ETH", async function() { + const amount = ethers.utils.parseEther("1"); + + const podContract = new ethers.Contract( + podAddress, + podABI, + ethers.provider + ); + let maxFee = await podContract.callStatic["getEarlyExitFee"](amount); + expect( + maxFee, + "Exit Fee equal to 0 DAI because token still in float" + ).to.be.eq(0); + // maxFee depends on if token has been deposited to PrizePool yet + + const spells = [ + { + connector: ptConnectorName, + method: "withdrawFromPod", + args: [podAddress, amount, maxFee, 0, 0], + }, + ]; + + // Before Deposit Spell + let podBalanceBefore = await podContract.balanceOfUnderlying( + dsaWallet0.address + ); + expect(podBalanceBefore, `Pod balance equal to 1`).to.be.eq( + ethers.utils.parseEther("1") + ); + + let ethBalanceBefore = await ethers.provider.getBalance( + dsaWallet0.address + ); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After Deposit spell + let ethBalanceAfter = await ethers.provider.getBalance( + dsaWallet0.address + ); + expect(ethBalanceAfter, `ETH balance greater than before`).to.be.gt( + ethBalanceBefore + ); + + let podBalanceAfter = await podContract.balanceOfUnderlying( + dsaWallet0.address + ); + expect(podBalanceAfter, `Pod balance equal to 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + }); + }); +}); diff --git a/test/uniswap/uniswap.test.js b/test/mainnet/uniswap/uniswap.test.ts similarity index 80% rename from test/uniswap/uniswap.test.js rename to test/mainnet/uniswap/uniswap.test.ts index 185a9d3b..4049d5de 100644 --- a/test/uniswap/uniswap.test.js +++ b/test/mainnet/uniswap/uniswap.test.ts @@ -1,26 +1,19 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); +import { expect } from "chai"; +import hre from "hardhat"; const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle; -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js"); -const buildDSAv2 = require("../../scripts/buildDSAv2"); -const encodeSpells = require("../../scripts/encodeSpells.js"); -const encodeFlashcastData = require("../../scripts/encodeFlashcastData.js"); -const getMasterSigner = require("../../scripts/getMasterSigner"); -const addLiquidity = require("../../scripts/addLiquidity"); +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; +import { addLiquidity } from "../../../scripts/tests/addLiquidity"; +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import type { Signer, Contract } from "ethers"; -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); -const { - abi: nftManagerAbi, -} = require("@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"); - -const connectV2UniswapV3Artifacts = require("../../artifacts/contracts/mainnet/connectors/uniswap/v3/main.sol/ConnectV2UniswapV3.json"); -const { eth } = require("../../scripts/constant/tokens"); -const { BigNumber } = require("ethers"); +import { abi } from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"; +import { ConnectV2UniswapV3__factory } from "../../../typechain"; const FeeAmount = { LOW: 500, @@ -28,7 +21,7 @@ const FeeAmount = { HIGH: 10000, }; -const TICK_SPACINGS = { +const TICK_SPACINGS: Record = { 500: 10, 3000: 60, 10000: 200, @@ -37,18 +30,18 @@ const TICK_SPACINGS = { const USDT_ADDR = "0xdac17f958d2ee523a2206206994597c13d831ec7"; const DAI_ADDR = "0x6b175474e89094c44da98b954eedeac495271d0f"; -let tokenIds = []; -let liquidities = []; +let tokenIds: any[] = []; +let liquidities: any[] = []; const abiCoder = ethers.utils.defaultAbiCoder; describe("UniswapV3", function() { const connectorName = "UniswapV3-v1"; - let dsaWallet0; - let masterSigner; - let instaConnectorsV2; - let connector; - let nftManager; + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: Contract; + let nftManager: Contract; const wallets = provider.getWallets(); const [wallet0, wallet1, wallet2, wallet3] = wallets; @@ -58,24 +51,25 @@ describe("UniswapV3", function() { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13005785, }, }, ], }); - masterSigner = await getMasterSigner(wallet3); + masterSigner = await getMasterSigner(); instaConnectorsV2 = await ethers.getContractAt( abis.core.connectorsV2, addresses.core.connectorsV2 ); nftManager = await ethers.getContractAt( - nftManagerAbi, + abi, "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" ); connector = await deployAndEnableConnector({ connectorName, - contractArtifact: connectV2UniswapV3Artifacts, + contractArtifact: ConnectV2UniswapV3__factory, signer: masterSigner, connectors: instaConnectorsV2, }); @@ -85,7 +79,7 @@ describe("UniswapV3", function() { it("Should have contracts deployed.", async function() { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("DSA wallet setup", function() { @@ -131,7 +125,7 @@ describe("UniswapV3", function() { it("Should mint successfully", async function() { const ethAmount = ethers.utils.parseEther("0.1"); // 1 ETH const daiAmount = ethers.utils.parseEther("400"); // 1 ETH - const usdtAmount = ethers.utils.parseEther("400") / Math.pow(10, 12); // 1 ETH + const usdtAmount = Number(ethers.utils.parseEther("400")) / Math.pow(10, 12); // 1 ETH const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; const getIds = ["0", "0"]; @@ -196,14 +190,14 @@ describe("UniswapV3", function() { dsaWallet0.on( "LogCast", ( - origin, - sender, - value, - targetNames, - targets, - eventNames, - eventParams, - event + origin: any, + sender: any, + value: any, + targetNames: any, + targets: any, + eventNames: any, + eventParams: any, + event: any ) => { const params = abiCoder.decode( ["uint256", "uint256", "uint256", "uint256", "int24", "int24"], @@ -239,8 +233,6 @@ describe("UniswapV3", function() { it("Should deposit successfully", async function() { const daiAmount = ethers.utils.parseEther("400"); // 1 ETH const ethAmount = ethers.utils.parseEther("0.1"); // 1 ETH - const usdtAmount = ethers.utils.parseEther("400") / Math.pow(10, 12); // 1 ETH - const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; const getIds = ["0", "0"]; const setId = "0"; @@ -269,14 +261,14 @@ describe("UniswapV3", function() { dsaWallet0.on( "LogCast", ( - origin, - sender, - value, - targetNames, - targets, - eventNames, - eventParams, - event + origin: any, + sender: any, + value: any, + targetNames: any, + targets: any, + eventNames: any, + eventParams: any, + event: any ) => { const params = abiCoder.decode( ["uint256", "uint256", "uint256", "uint256"], @@ -368,7 +360,7 @@ describe("UniswapV3", function() { }); }); -const getMinTick = (tickSpacing) => +const getMinTick = (tickSpacing: number) => Math.ceil(-887272 / tickSpacing) * tickSpacing; -const getMaxTick = (tickSpacing) => +const getMaxTick = (tickSpacing: number) => Math.floor(887272 / tickSpacing) * tickSpacing; diff --git a/test/uniswapStake/uniswapStake.test.js b/test/mainnet/uniswapStake/uniswapStake.test.ts similarity index 80% rename from test/uniswapStake/uniswapStake.test.js rename to test/mainnet/uniswapStake/uniswapStake.test.ts index dee656ee..e2d15288 100644 --- a/test/uniswapStake/uniswapStake.test.js +++ b/test/mainnet/uniswapStake/uniswapStake.test.ts @@ -1,20 +1,20 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { waffle, ethers } = hre; +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; const { provider, deployContract } = waffle -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") -const addLiquidity = require("../../scripts/addLiquidity"); +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; +import { addLiquidity } from "../../../scripts/tests/addLiquidity"; -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const { abi: nftManagerAbi } = require("@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json") +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { abi } from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json" +import type { Signer, Contract } from "ethers"; -const connectV2UniswapStakerArtifacts = require("../../artifacts/contracts/mainnet/connectors/uniswap/v3_staker/main.sol/ConnectV2UniswapV3Staker.json"); -const connectV2UniswapV3Artifacts = require("../../artifacts/contracts/mainnet/connectors/uniswap/v3/main.sol/ConnectV2UniswapV3.json"); +import { ConnectV2UniswapV3Staker__factory, ConnectV2UniswapV3__factory } from "../../../typechain"; const FeeAmount = { LOW: 500, @@ -22,7 +22,7 @@ const FeeAmount = { HIGH: 10000, } -const TICK_SPACINGS = { +const TICK_SPACINGS: Record = { 500: 10, 3000: 60, 10000: 200 @@ -32,18 +32,19 @@ const DAI_ADDR = "0x6b175474e89094c44da98b954eedeac495271d0f" const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" const INST_ADDR = "0x6f40d4a6237c257fff2db00fa0510deeecd303eb" -let tokenIds = [] +let tokenIds: any[] = [] const abiCoder = ethers.utils.defaultAbiCoder describe("UniswapV3", function () { const connectorStaker = "UniswapStaker-v1" const connectorUniswap = "UniswapV3-v1" - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - let startTime, endTime; + let dsaWallet0: any + let masterSigner: Signer; + let instaConnectorsV2: any; + let connector: any; + let startTime: any, endTime: any; + let nftManager: Contract; const wallets = provider.getWallets() const [wallet0, wallet1, wallet2, wallet3] = wallets @@ -53,26 +54,27 @@ describe("UniswapV3", function () { params: [ { forking: { + // @ts-ignore jsonRpcUrl: hre.config.networks.hardhat.forking.url, blockNumber: 13300000, }, }, ], }); - masterSigner = await getMasterSigner(wallet3) + masterSigner = await getMasterSigner() instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - nftManager = await ethers.getContractAt(nftManagerAbi, "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"); + nftManager = await ethers.getContractAt(abi, "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"); connector = await deployAndEnableConnector({ connectorName: connectorStaker, - contractArtifact: connectV2UniswapStakerArtifacts, + contractArtifact: ConnectV2UniswapV3Staker__factory, signer: masterSigner, connectors: instaConnectorsV2 }) console.log("Connector address", connector.address) - uniswapConnector = await deployAndEnableConnector({ + let uniswapConnector = await deployAndEnableConnector({ connectorName: connectorUniswap, - contractArtifact: connectV2UniswapV3Artifacts, + contractArtifact: ConnectV2UniswapV3__factory, signer: masterSigner, connectors: instaConnectorsV2 }); @@ -81,7 +83,7 @@ describe("UniswapV3", function () { it("Should have contracts deployed.", async function () { expect(!!instaConnectorsV2.address).to.be.true; expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; }); describe("DSA wallet setup", function () { @@ -161,7 +163,7 @@ describe("UniswapV3", function () { let receipt = await tx.wait() let castEvent = new Promise((resolve, reject) => { - dsaWallet0.on('LogCast', (origin, sender, value, targetNames, targets, eventNames, eventParams, event) => { + dsaWallet0.on('LogCast', (origin: any, sender: any, value: any, targetNames: any, targets: any, eventNames: any, eventParams: any, event: any) => { const params = abiCoder.decode(["uint256", "uint256", "uint256", "uint256", "int24", "int24"], eventParams[0]); const params1 = abiCoder.decode(["uint256", "uint256", "uint256", "uint256", "int24", "int24"], eventParams[1]); tokenIds.push(params[0]); @@ -181,7 +183,7 @@ describe("UniswapV3", function () { let event = await castEvent let balance = await nftManager.connect(wallet0).balanceOf(dsaWallet0.address) - console.log("Balance", balance) + console.log("Balance", balance.toString()) }); it("Should create incentive successfully", async function () { @@ -213,9 +215,9 @@ describe("UniswapV3", function () { let receipt = await tx.wait() let castEvent = new Promise((resolve, reject) => { - dsaWallet0.on('LogCast', (origin, sender, value, targetNames, targets, eventNames, eventParams, event) => { - const params = abiCoder.decode(["bytes32","address","address","uint256","uint256","uint256"], eventParams[0]); - const params1 = abiCoder.decode(["bytes32","address","address","uint256","uint256","uint256"], eventParams[1]); + dsaWallet0.on('LogCast', (origin: any, sender: any, value: any, targetNames: any, targets: any, eventNames: any, eventParams: any, event: any) => { + const params = abiCoder.decode(["bytes32", "address", "address", "uint256", "uint256", "uint256"], eventParams[0]); + const params1 = abiCoder.decode(["bytes32", "address", "address", "uint256", "uint256", "uint256"], eventParams[1]); event.removeListener(); resolve({ start: [params[3], params1[3]], end: [params[4], params1[4]] }); @@ -226,7 +228,7 @@ describe("UniswapV3", function () { }, 60000) }); - let event = await castEvent + let event: any = await castEvent startTime = event.start; endTime = event.end; }); @@ -275,7 +277,7 @@ describe("UniswapV3", function () { let receipt = await tx.wait() let balance = await nftManager.connect(wallet0).balanceOf(dsaWallet0.address) - console.log("Balance", balance) + console.log("Balance", balance.toString()) }); it("Should claim rewards successfully", async function () { @@ -287,6 +289,8 @@ describe("UniswapV3", function () { ethAddress, "1000", ], + }, + { connector: connectorStaker, method: "claimRewards", args: [ @@ -344,10 +348,10 @@ describe("UniswapV3", function () { let receipt = await tx.wait() let balance = await nftManager.connect(wallet0).balanceOf(dsaWallet0.address) - console.log("Balance", balance) + console.log("Balance", balance.toString()) }); }) }) -const getMinTick = (tickSpacing) => Math.ceil(-887272 / tickSpacing) * tickSpacing -const getMaxTick = (tickSpacing) => Math.floor(887272 / tickSpacing) * tickSpacing +const getMinTick = (tickSpacing: number) => Math.ceil(-887272 / tickSpacing) * tickSpacing +const getMaxTick = (tickSpacing: number) => Math.floor(887272 / tickSpacing) * tickSpacing diff --git a/test/mainnet/yearn/yearn.test.ts b/test/mainnet/yearn/yearn.test.ts new file mode 100644 index 00000000..5c7bedc9 --- /dev/null +++ b/test/mainnet/yearn/yearn.test.ts @@ -0,0 +1,189 @@ +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; +const { provider, deployContract } = waffle; + +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; + +import { addresses } from "../../../scripts/tests/mainnet/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { tokens } from "../../../scripts/tests/mainnet/tokens"; +import { Signer, Contract, BigNumber } from "ethers"; + +import { ConnectV2YearnV2__factory } from "../../../typechain"; + +const toBytes32 = (bn: BigNumber) => { + return ethers.utils.hexlify(ethers.utils.zeroPad(bn.toHexString(), 32)); +}; + +const setStorageAt = async (address: string, index: string, value: string) => { + await ethers.provider.send("hardhat_setStorageAt", [address, index, value]); + await ethers.provider.send("evm_mine", []); // Just mines to the next block +}; + +describe("Yearn", function() { + const connectorName = "YEARN-TEST-A"; + + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: Contract; + + const wallets = provider.getWallets(); + const [wallet0, wallet1, wallet2, wallet3] = wallets; + before(async () => { + await hre.network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + // @ts-ignore + jsonRpcUrl: hre.config.networks.hardhat.forking.url, + blockNumber: 12996975, + }, + }, + ], + }); + masterSigner = await getMasterSigner(); + instaConnectorsV2 = await ethers.getContractAt( + abis.core.connectorsV2, + addresses.core.connectorsV2 + ); + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2YearnV2__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + console.log("Connector address", connector.address); + }); + + it("Should have contracts deployed.", async function() { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; + }); + + describe("DSA wallet setup", function() { + it("Should build DSA v2", async function() { + dsaWallet0 = await buildDSAv2(wallet0.address); + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit ETH into DSA wallet", async function() { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: ethers.utils.parseEther("10"), + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("10") + ); + }); + }); + + describe("Main", function() { + it("Should increase the DAI balance to 100 DAI", async function() { + const DAI = new ethers.Contract( + tokens.dai.address, + abis.basic.erc20, + ethers.provider + ); + const DAI_SLOT = 2; + const locallyManipulatedBalance = ethers.utils.parseEther("100"); + + // Get storage slot index + const index = ethers.utils.solidityKeccak256( + ["uint256", "uint256"], + [dsaWallet0.address, DAI_SLOT] + ); + // Manipulate local balance (needs to be bytes32 string) + await setStorageAt( + tokens.dai.address, + index.toString(), + toBytes32(locallyManipulatedBalance).toString() + ); + + // Get DAI balance + const balance = await DAI.balanceOf(dsaWallet0.address); + expect( + await ethers.BigNumber.from(balance).eq(ethers.utils.parseEther("100")) + ); + }); + + it("Should deposit and withdraw 50 DAI in/out the Yearn Vault", async function() { + const DAI = new ethers.Contract( + tokens.dai.address, + abis.basic.erc20, + ethers.provider + ); + const DAI_VAULT = "0xdA816459F1AB5631232FE5e97a05BBBb94970c95"; + const amount = ethers.utils.parseEther("50"); // 50 DAI + const setId = "132456"; + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [DAI_VAULT, amount, 0, setId], + }, + { + connector: connectorName, + method: "withdraw", + args: [DAI_VAULT, amount, setId, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet0.address); + await tx.wait(); + + // Get DAI balance + const balance = await DAI.balanceOf(dsaWallet0.address); + expect( + await ethers.BigNumber.from(balance).eq(ethers.utils.parseEther("100")) + ); + }); + + it("Should deposit 70 DAI in the Yearn Vault", async function() { + const DAI_VAULT = "0xdA816459F1AB5631232FE5e97a05BBBb94970c95"; + const DAI = new ethers.Contract( + tokens.dai.address, + abis.basic.erc20, + ethers.provider + ); + const YVDAI = new ethers.Contract( + DAI_VAULT, + abis.basic.erc20, + ethers.provider + ); + const amount = ethers.utils.parseEther("70"); // 70 DAI + const setId = "568445"; + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [DAI_VAULT, amount, 0, setId], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet0.address); + await tx.wait(); + + // Get DAI balance + const yvDAIBalance = await YVDAI.balanceOf(dsaWallet0.address); + const daiBalance = await DAI.balanceOf(dsaWallet0.address); + const correctDaiBalance = ethers.BigNumber.from(daiBalance).eq( + ethers.utils.parseEther("30") + ); + const correctYVDaiBalance = ethers.BigNumber.from(yvDAIBalance).lte( + ethers.utils.parseEther("70") + ); + expect(correctDaiBalance && correctYVDaiBalance); + }); + }); +}); diff --git a/test/polygon/pooltogether/pooltogether.test.ts b/test/polygon/pooltogether/pooltogether.test.ts new file mode 100644 index 00000000..4d77dbf7 --- /dev/null +++ b/test/polygon/pooltogether/pooltogether.test.ts @@ -0,0 +1,561 @@ +import { expect } from "chai"; +import hre from "hardhat"; +const { web3, deployments, waffle, ethers } = hre; +const { provider, deployContract } = waffle; + +const ALCHEMY_ID = process.env.ALCHEMY_ID; + +import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; +import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; +import { encodeSpells } from "../../../scripts/tests/encodeSpells"; +import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; + +import { addresses } from "../../../scripts/tests/polygon/addresses"; +import { abis } from "../../../scripts/constant/abis"; +import { tokens } from "../../../scripts/tests/polygon/tokens"; +import type { Signer, Contract } from "ethers"; + +import { ConnectV2AaveV2Polygon__factory, ConnectV2PoolTogetherPolygon__factory } from "../../../typechain"; + +const DAI_TOKEN_ADDR = tokens.dai.address; // DAI Token +// PoolTogether Address: https://docs.pooltogether.com/resources/networks/matic +const USDC_PRIZE_POOL_ADDR = "0xEE06AbE9e2Af61cabcb13170e01266Af2DEFa946"; // USDC Prize Pool +const PT_USDC_TICKET_ADDR = "0x473E484c722EF9ec6f63B509b07Bb9cfB258820b"; // PT USDC Ticket +const PT_USDC_SPONGSOR_TICKET_ADDR = + "0x19c0e557ee5a9b456f613ba3d025a4dc45b52c35"; // PT USDC Sponsor Ticket +const USDC_POOL_FAUCET_ADDR = "0x6cbc003fE015D753180f072d904bA841b2415498"; // USDC POOL Faucet +const POOL_TOKEN_ADDRESS = "0x25788a1a171ec66Da6502f9975a15B609fF54CF6"; // POOL Tocken +const TOKEN_FAUCET_PROXY_FACTORY_ADDR = + "0xeaa636304a7C8853324B6b603dCdE55F92dfbab1"; // TokenFaucetProxyFactory for claimAll + +// Community WETH Prize Pool (Rari): https://reference-app.pooltogether.com/pools/mainnet/0xa88ca010b32a54d446fc38091ddbca55750cbfc3/manage#stats +const WETH_PRIZE_POOL_ADDR = "0xa88ca010b32a54d446fc38091ddbca55750cbfc3"; // Community WETH Prize Pool (Rari) +const WETH_POOL_TICKET_ADDR = "0x9b5c30aeb9ce2a6a121cea9a85bc0d662f6d9b40"; // Community WETH Prize Pool Ticket (Rari) + +const prizePoolABI = [ + "function calculateEarlyExitFee( address from, address controlledToken, uint256 amount) external returns ( uint256 exitFee, uint256 burnedCredit)", + "function creditPlanOf( address controlledToken) external view returns ( uint128 creditLimitMantissa, uint128 creditRateMantissa)", +]; + +const connectorsABI = [ + "function isConnectors(string[] calldata connectorNames) external view returns (bool, address[] memory)", +]; + +describe("PoolTogether", function() { + const connectorName = "AAVEV2-TEST-A"; + const ptConnectorName = "POOLTOGETHER-TEST-A"; + + let dsaWallet0: any; + let masterSigner: Signer; + let instaConnectorsV2: Contract; + let connector: any; + let ptConnector: Contract; + + const wallets = provider.getWallets(); + const [wallet0, wallet1, wallet2, wallet3] = wallets; + before(async () => { + await hre.network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + jsonRpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${ALCHEMY_ID}`, + blockNumber: 18717337, + }, + }, + ], + }); + + masterSigner = await getMasterSigner(); + instaConnectorsV2 = await ethers.getContractAt( + abis.core.connectorsV2, + addresses.core.connectorsV2 + ); + + // Deploy and enable Compound Connector + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2AaveV2Polygon__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + + // Deploy and enable Pool Together Connector + ptConnector = await deployAndEnableConnector({ + connectorName: ptConnectorName, + contractArtifact: ConnectV2PoolTogetherPolygon__factory, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + }); + + it("Should have contracts deployed.", async function() { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!ptConnector.address).to.be.true; + expect(!!(await masterSigner.getAddress())).to.be.true; + }); + + describe("DSA wallet setup", function() { + it("Should build DSA v2", async function() { + dsaWallet0 = await buildDSAv2(wallet0.address); + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit 1000 MATIC into DSA wallet", async function() { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: ethers.utils.parseEther("1000"), + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("1000") + ); + }); + }); + + describe("Main - USDC Prize Pool Test", function() { + it("Should deposit 100 MATIC in AAVE V2", async function() { + const amount = ethers.utils.parseEther("100"); // 100 MATIC + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, amount, 0, 0], + }, + ]; + + const tx = await dsaWallet0.cast( + ...encodeSpells(spells), + wallet1.address + ); + const receipt = await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("900") + ); + }); + + it("Should borrow 10 USDC from AAVE V2 and deposit USDC into USDC Prize Pool", async function() { + const amount = ethers.utils.parseUnits("10", 6); // 10 USDC + const setId = "83478237"; + const spells = [ + { + connector: connectorName, + method: "borrow", + args: [tokens.usdc.address, amount, 2, 0, setId], + }, + { + connector: ptConnectorName, + method: "depositTo", + args: [ + USDC_PRIZE_POOL_ADDR, + amount, + PT_USDC_SPONGSOR_TICKET_ADDR, + setId, + 0, + ], + }, + ]; + // Before Spell + let usdcToken = await ethers.getContractAt( + abis.basic.erc20, + tokens.usdc.address + ); + let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect(usdcBalance, `USDC balance is 0`).to.be.eq( + ethers.utils.parseUnits("0", 6) + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_USDC_SPONGSOR_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether USDC Ticket balance is 0`).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect( + usdcBalance, + `Expect USDC balance to still equal 0 since it was deposited into Prize Pool` + ).to.be.eq(0); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect( + balanceAfter, + `PoolTogether USDC Ticket balance equals 10` + ).to.be.eq(ethers.utils.parseUnits("10", 6)); + + // ETH used for transaction + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("900") + ); + }); + + it("Should wait 11 days, withdraw all PrizePool, get back 10 USDC, and claim POOL", async function() { + const amount = ethers.utils.parseUnits("10", 6); // 10 USDC + + let prizePoolContract = new ethers.Contract( + USDC_PRIZE_POOL_ADDR, + prizePoolABI, + ethers.provider + ); + // const { creditLimitMantissa, creditRateMantissa } = await prizePoolContract.creditPlanOf(PT_USDC_TICKET_ADDR); + // console.log("CreditLimitMantiss: ", creditLimitMantissa.toString()); + // console.log("CreditRateMantiss: ", creditRateMantissa.toString()); + let earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 0 USDC because 0% fee for sponsorship ticket" + ).to.be.eq(ethers.utils.parseUnits("0", 6)); + + const spells = [ + { + connector: ptConnectorName, + method: "claim", + args: [USDC_POOL_FAUCET_ADDR, 0], + }, + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + USDC_PRIZE_POOL_ADDR, + amount, + PT_USDC_SPONGSOR_TICKET_ADDR, + earlyExitFee.exitFee, + 0, + 0, + ], + }, + ]; + + // Before spell + let usdcToken = await ethers.getContractAt( + abis.basic.erc20, + tokens.usdc.address + ); + let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect(usdcBalance, `USDC balance equals 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_USDC_SPONGSOR_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether USDC Ticket is 10`).to.be.eq( + ethers.utils.parseUnits("10", 6) + ); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token equals 0`).to.be.eq( + ethers.utils.parseEther("0") + ); + + // Increase time by 11 days so we get back all USDC without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [15 * 24 * 60 * 60]); + + earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 0 DAI because past 14 days" + ).to.be.eq(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + console.log("USDC BALANCE: ", usdcBalance.toString()); + console.log( + "USDC BALANCE: ", + ethers.utils.parseUnits("10", 6).toString() + ); + expect( + usdcBalance, + `USDC balance to be equal to 10, because of no early withdrawal fee` + ).to.be.eq(ethers.utils.parseUnits("10", 6)); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether USDC Ticket to equal 0`).to.be.eq(0); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + console.log("POOL BALANCE AFTER:", poolBalanceAfter.toString()); + expect( + poolBalanceAfter, + `POOL Token Balance to be greater than 0` + ).to.be.gt(ethers.utils.parseEther("0")); + }); + + it("Should deposit and withdraw all PrizePool, get back less than 10 USDC", async function() { + const amount = ethers.utils.parseUnits("10", 6); // 10 USDC + const exitFee = ethers.utils.parseUnits(".1", 6); // 1 USDC is 1% of 100 USDC + const spells = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_TICKET_ADDR, 0, 0], + }, + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + USDC_PRIZE_POOL_ADDR, + amount, + PT_USDC_TICKET_ADDR, + exitFee, + 0, + 0, + ], + }, + ]; + + // Before spell + let usdcToken = await ethers.getContractAt( + abis.basic.erc20, + tokens.usdc.address + ); + let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect(usdcBalance, `USDC Balance equals 100`).to.be.eq( + ethers.utils.parseUnits("10", 6) + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_USDC_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether USDC Ticket equals 0`).to.be.eq(0); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `PoolTogether Token greater than 0`).to.be.gt(0); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + const receipt = await tx.wait(); + + // After spell + usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect( + usdcBalance, + `USDC balance to be less than 10, because of early withdrawal fee` + ).to.be.lt(ethers.utils.parseUnits("10", 6)); + + console.log("USDC BALANCE AFTER:", usdcBalance.toString()); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether USDC Ticket to equal 0`).to.be.eq(0); + + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalanceAfter, `POOL Token Balance to greater than 0`).to.be.gt( + ethers.utils.parseEther("0") + ); + }); + + it("Should deposit, wait 11 days, and withdraw all PrizePool, get 10 USDC, and claim all POOL using claimAll", async function() { + const amount = ethers.utils.parseUnits("9.9", 6); // 9 USDC + const depositSpells = [ + { + connector: ptConnectorName, + method: "depositTo", + args: [ + USDC_PRIZE_POOL_ADDR, + amount, + PT_USDC_SPONGSOR_TICKET_ADDR, + 0, + 0, + ], + }, + ]; + + // Before spell + let usdcToken = await ethers.getContractAt( + abis.basic.erc20, + tokens.usdc.address + ); + let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect(usdcBalance, `USDC balance less than 10`).to.be.lt( + ethers.utils.parseUnits("10", 6) + ); + + let cToken = await ethers.getContractAt( + abis.basic.erc20, + PT_USDC_SPONGSOR_TICKET_ADDR + ); + const balance = await cToken.balanceOf(dsaWallet0.address); + expect(balance, `PoolTogether USDC Ticket equal 0`).to.be.eq(0); + + let poolToken = await ethers.getContractAt( + abis.basic.erc20, + POOL_TOKEN_ADDRESS + ); + const poolBalance = await poolToken.balanceOf(dsaWallet0.address); + expect(poolBalance, `POOL Token is greater than 0`).to.be.gt( + ethers.utils.parseEther("0") + ); + + // Run spell transaction + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(depositSpells), wallet1.address); + const receipt = await tx.wait(); + + const prizePoolContract = new ethers.Contract( + USDC_PRIZE_POOL_ADDR, + prizePoolABI, + ethers.provider + ); + let earlyExitFee = await prizePoolContract.callStatic[ + "calculateEarlyExitFee" + ](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); + expect( + earlyExitFee.exitFee, + "Exit Fee equal to 0 USDC because fee 0%" + ).to.be.eq(0); + + // Increase time by 11 days so we get back all DAI without early withdrawal fee + await ethers.provider.send("evm_increaseTime", [11 * 24 * 60 * 60]); + + const withdrawSpells = [ + { + connector: ptConnectorName, + method: "withdrawInstantlyFrom", + args: [ + USDC_PRIZE_POOL_ADDR, + amount, + PT_USDC_SPONGSOR_TICKET_ADDR, + earlyExitFee.exitFee, + 0, + 0, + ], + }, + { + connector: ptConnectorName, + method: "claimAll", + args: [TOKEN_FAUCET_PROXY_FACTORY_ADDR, [USDC_POOL_FAUCET_ADDR]], + }, + ]; + + // Run spell transaction + const tx2 = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(withdrawSpells), wallet1.address); + const receipt2 = await tx2.wait(); + + // After spell + usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); + expect(usdcBalance, `USDC balance equals 9.9`).to.be.eq( + ethers.utils.parseUnits("9.9", 6) + ); + + const balanceAfter = await cToken.balanceOf(dsaWallet0.address); + expect(balanceAfter, `PoolTogether USDC Ticket equal 0`).to.be.eq(0); + + // Expect + const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address); + console.log("POOL BALANCE AFTER:", poolBalanceAfter.toString()); + expect(poolBalanceAfter, `Pool Token to be greater than before`).to.be.gt( + poolBalance + ); + }); + // }) + + // NO WMATIC POOLS: https://reference-app.pooltogether.com/pools/polygon + // describe("Main - WETH Prize Pool Test", function () { + // it("Deposit 1 ETH into WETH Prize Pool and withdraw immediately", async function () { + // const amount = ethers.utils.parseEther("1") // 1 ETH + // const setId = "83478237" + // const spells = [ + // { + // connector: ptConnectorName, + // method: "depositTo", + // args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, setId] + // }, + // { + // connector: ptConnectorName, + // method: "withdrawInstantlyFrom", + // args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, setId, 0] + // }, + // ] + // // Before Spell + // const ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); + + // // Run spell transaction + // const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) + // const receipt = await tx.wait() + + // // After spell + // const ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); + + // // ETH used for transaction + // expect(ethBalanceAfter, `ETH Balance less than before spell because of early withdrawal fee`).to.be.lte(ethBalanceBefore); + // }); + + // it("Deposit 1 ETH into WETH Prize Pool, wait 14 days, then withdraw", async function () { + // const amount = ethers.utils.parseEther("1") // 1 ETH + // const depositSpell = [ + // { + // connector: ptConnectorName, + // method: "depositTo", + // args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, 0] + // } + // ] + + // const withdrawSpell = [ + // { + // connector: ptConnectorName, + // method: "withdrawInstantlyFrom", + // args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, 0, 0] + // } + // ] + + // // Before Deposit Spell + // let ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); + + // // Run deposit spell transaction + // const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(depositSpell), wallet1.address) + // const receipt = await tx.wait() + + // // After Deposit spell + // let ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); + + // expect(ethBalanceAfter, `ETH Balance less than before spell`).to.be.lte(ethBalanceBefore); + + // // Increase time by 11 days so we get back all ETH without early withdrawal fee + // await ethers.provider.send("evm_increaseTime", [14*24*60*60]); + // await ethers.provider.send("evm_mine"); + + // // Run withdraw spell transaction + // const tx2 = await dsaWallet0.connect(wallet0).cast(...encodeSpells(withdrawSpell), wallet1.address) + // const receipt2 = await tx.wait() + + // // After Deposit spell + // ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); + + // expect(ethBalanceAfter, `ETH Balance equal to before spell because no early exit fee`).to.be.eq(ethBalanceBefore); + // }); + }); +}); diff --git a/test/pooltogether-polygon/pooltogether.test.js b/test/pooltogether-polygon/pooltogether.test.js deleted file mode 100644 index fc6cc971..00000000 --- a/test/pooltogether-polygon/pooltogether.test.js +++ /dev/null @@ -1,420 +0,0 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; -const { provider, deployContract } = waffle - -const ALCHEMY_ID = process.env.ALCHEMY_ID; - -const deployAndEnableConnector = require("../../scripts/polygon/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/polygon/buildDSAv2") -const encodeSpells = require("../../scripts/polygon/encodeSpells.js") -const getMasterSigner = require("../../scripts/polygon/getMasterSigner") - -const addresses = require("../../scripts/polygon/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/polygon/constant/constant"); -const tokens = require("../../scripts/polygon/constant/tokens"); - -const connectV2AaveV2Artifacts = require("../../artifacts/contracts/polygon/connectors/aave/v2/main.sol/ConnectV2AaveV2Polygon.json") -const connectV2PoolTogetherArtifacts = require("../../artifacts/contracts/polygon/connectors/pooltogether/main.sol/ConnectV2PoolTogetherPolygon.json") - -const DAI_TOKEN_ADDR = tokens.dai.address // DAI Token -// PoolTogether Address: https://docs.pooltogether.com/resources/networks/matic -const USDC_PRIZE_POOL_ADDR = "0xEE06AbE9e2Af61cabcb13170e01266Af2DEFa946" // USDC Prize Pool -const PT_USDC_TICKET_ADDR = "0x473E484c722EF9ec6f63B509b07Bb9cfB258820b" // PT USDC Ticket -const PT_USDC_SPONGSOR_TICKET_ADDR = "0x19c0e557ee5a9b456f613ba3d025a4dc45b52c35" // PT USDC Sponsor Ticket -const USDC_POOL_FAUCET_ADDR = "0x6cbc003fE015D753180f072d904bA841b2415498" // USDC POOL Faucet -const POOL_TOKEN_ADDRESS = "0x25788a1a171ec66Da6502f9975a15B609fF54CF6" // POOL Tocken -const TOKEN_FAUCET_PROXY_FACTORY_ADDR = "0xeaa636304a7C8853324B6b603dCdE55F92dfbab1" // TokenFaucetProxyFactory for claimAll - -// Community WETH Prize Pool (Rari): https://reference-app.pooltogether.com/pools/mainnet/0xa88ca010b32a54d446fc38091ddbca55750cbfc3/manage#stats -const WETH_PRIZE_POOL_ADDR = "0xa88ca010b32a54d446fc38091ddbca55750cbfc3" // Community WETH Prize Pool (Rari) -const WETH_POOL_TICKET_ADDR = "0x9b5c30aeb9ce2a6a121cea9a85bc0d662f6d9b40" // Community WETH Prize Pool Ticket (Rari) - -const prizePoolABI = [ - "function calculateEarlyExitFee( address from, address controlledToken, uint256 amount) external returns ( uint256 exitFee, uint256 burnedCredit)", - "function creditPlanOf( address controlledToken) external view returns ( uint128 creditLimitMantissa, uint128 creditRateMantissa)" -] - -const connectorsABI = [ - "function isConnectors(string[] calldata connectorNames) external view returns (bool, address[] memory)" -] - -describe("PoolTogether", function () { - const connectorName = "AAVEV2-TEST-A" - const ptConnectorName = "POOLTOGETHER-TEST-A" - - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - let ptConnector; - - const wallets = provider.getWallets() - const [wallet0, wallet1, wallet2, wallet3] = wallets - before(async () => { - await hre.network.provider.request({ - method: "hardhat_reset", - params: [ - { - forking: { - jsonRpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${ALCHEMY_ID}`, - blockNumber: 18717337, - }, - }, - ], - }); - - masterSigner = await getMasterSigner() - instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - - // Deploy and enable Compound Connector - connector = await deployAndEnableConnector({ - connectorName, - contractArtifact: connectV2AaveV2Artifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - - // Deploy and enable Pool Together Connector - ptConnector = await deployAndEnableConnector({ - connectorName: ptConnectorName, - contractArtifact: connectV2PoolTogetherArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - }) - - it("Should have contracts deployed.", async function () { - expect(!!instaConnectorsV2.address).to.be.true; - expect(!!connector.address).to.be.true; - expect(!!ptConnector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; - }); - - describe("DSA wallet setup", function () { - it("Should build DSA v2", async function () { - dsaWallet0 = await buildDSAv2(wallet0.address) - expect(!!dsaWallet0.address).to.be.true; - }); - - it("Deposit 1000 MATIC into DSA wallet", async function () { - await wallet0.sendTransaction({ - to: dsaWallet0.address, - value: ethers.utils.parseEther("1000") - }); - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("1000")); - }); - }); - - describe("Main - USDC Prize Pool Test", function () { - - it("Should deposit 100 MATIC in AAVE V2", async function () { - const amount = ethers.utils.parseEther("100") // 100 MATIC - const spells = [ - { - connector: connectorName, - method: "deposit", - args: [tokens.matic.address, amount, 0, 0] - } - ] - - const tx = await dsaWallet0.cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("900")); - }); - - it("Should borrow 10 USDC from AAVE V2 and deposit USDC into USDC Prize Pool", async function () { - const amount = ethers.utils.parseUnits("10", 6) // 10 USDC - const setId = "83478237" - const spells = [ - { - connector: connectorName, - method: "borrow", - args: [tokens.usdc.address, amount, 2, 0, setId] - }, - { - connector: ptConnectorName, - method: "depositTo", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_SPONGSOR_TICKET_ADDR, setId, 0] - } - ] - // Before Spell - let usdcToken = await ethers.getContractAt(abis.basic.erc20, tokens.usdc.address) - let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `USDC balance is 0`).to.be.eq(ethers.utils.parseUnits("0", 6)); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_USDC_SPONGSOR_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance,`PoolTogether USDC Ticket balance is 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `Expect USDC balance to still equal 0 since it was deposited into Prize Pool`).to.be.eq(0); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether USDC Ticket balance equals 10`).to.be.eq(ethers.utils.parseUnits("10", 6)); - - // ETH used for transaction - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("900")); - }); - - it("Should wait 11 days, withdraw all PrizePool, get back 10 USDC, and claim POOL", async function () { - const amount = ethers.utils.parseUnits("10", 6) // 10 USDC - - let prizePoolContract = new ethers.Contract(USDC_PRIZE_POOL_ADDR, prizePoolABI, ethers.provider); - // const { creditLimitMantissa, creditRateMantissa } = await prizePoolContract.creditPlanOf(PT_USDC_TICKET_ADDR); - // console.log("CreditLimitMantiss: ", creditLimitMantissa.toString()); - // console.log("CreditRateMantiss: ", creditRateMantissa.toString()); - let earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 0 USDC because 0% fee for sponsorship ticket").to.be.eq(ethers.utils.parseUnits("0", 6)); - - const spells = [ - { - connector: ptConnectorName, - method: "claim", - args: [USDC_POOL_FAUCET_ADDR, 0] - }, - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_SPONGSOR_TICKET_ADDR, earlyExitFee.exitFee, 0, 0] - } - - ] - - // Before spell - let usdcToken = await ethers.getContractAt(abis.basic.erc20, tokens.usdc.address) - let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `USDC balance equals 0`).to.be.eq(ethers.utils.parseEther("0")); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_USDC_SPONGSOR_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether USDC Ticket is 10`).to.be.eq(ethers.utils.parseUnits("10", 6)); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token equals 0`).to.be.eq(ethers.utils.parseEther("0")); - - // Increase time by 11 days so we get back all USDC without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [15*24*60*60]); - await ethers.provider.send("evm_mine"); - - earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 0 DAI because past 14 days").to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - console.log("USDC BALANCE: ", usdcBalance.toString()); - console.log("USDC BALANCE: ", ethers.utils.parseUnits("10", 6).toString()); - expect(usdcBalance, - `USDC balance to be equal to 10, because of no early withdrawal fee` - ).to.be.eq(ethers.utils.parseUnits("10", 6)); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether USDC Ticket to equal 0`).to.be.eq(0); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - console.log("POOL BALANCE AFTER:" ,poolBalanceAfter.toString()); - expect(poolBalanceAfter, `POOL Token Balance to be greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - }); - - it("Should deposit and withdraw all PrizePool, get back less than 10 USDC", async function() { - const amount = ethers.utils.parseUnits("10", 6) // 10 USDC - const exitFee = ethers.utils.parseUnits(".1", 6) // 1 USDC is 1% of 100 USDC - const spells = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_TICKET_ADDR, 0, 0] - }, - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_TICKET_ADDR, exitFee, 0, 0] - } - ] - - // Before spell - let usdcToken = await ethers.getContractAt(abis.basic.erc20, tokens.usdc.address) - let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `USDC Balance equals 100`).to.be.eq(ethers.utils.parseUnits("10", 6)); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_USDC_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether USDC Ticket equals 0`).to.be.eq(0); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `PoolTogether Token greater than 0`).to.be.gt(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, - `USDC balance to be less than 10, because of early withdrawal fee` - ).to.be.lt(ethers.utils.parseUnits("10",6)); - - console.log("USDC BALANCE AFTER:", usdcBalance.toString()); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether USDC Ticket to equal 0`).to.be.eq(0); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token Balance to greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - - }); - - it("Should deposit, wait 11 days, and withdraw all PrizePool, get 10 USDC, and claim all POOL using claimAll", async function() { - const amount = ethers.utils.parseUnits("9.9", 6) // 9 USDC - const depositSpells = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_SPONGSOR_TICKET_ADDR, 0, 0] - } - ] - - // Before spell - let usdcToken = await ethers.getContractAt(abis.basic.erc20, tokens.usdc.address) - let usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `USDC balance less than 10`).to.be.lt(ethers.utils.parseUnits("10", 6)); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_USDC_SPONGSOR_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether USDC Ticket equal 0`).to.be.eq(0); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token is greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(depositSpells), wallet1.address) - const receipt = await tx.wait() - - const prizePoolContract = new ethers.Contract(USDC_PRIZE_POOL_ADDR, prizePoolABI, ethers.provider); - let earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_USDC_SPONGSOR_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 0 USDC because fee 0%").to.be.eq(0); - - // Increase time by 11 days so we get back all DAI without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [11*24*60*60]); - await ethers.provider.send("evm_mine"); - - const withdrawSpells = [ - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [USDC_PRIZE_POOL_ADDR, amount, PT_USDC_SPONGSOR_TICKET_ADDR, earlyExitFee.exitFee, 0, 0] - }, - { - connector: ptConnectorName, - method: "claimAll", - args: [TOKEN_FAUCET_PROXY_FACTORY_ADDR, [USDC_POOL_FAUCET_ADDR]] - } - ] - - // Run spell transaction - const tx2 = await dsaWallet0.connect(wallet0).cast(...encodeSpells(withdrawSpells), wallet1.address) - const receipt2 = await tx2.wait() - - // After spell - usdcBalance = await usdcToken.balanceOf(dsaWallet0.address); - expect(usdcBalance, `USDC balance equals 9.9`).to.be.eq(ethers.utils.parseUnits("9.9", 6)); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether USDC Ticket equal 0`).to.be.eq(0); - - // Expect - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - console.log("POOL BALANCE AFTER:" ,poolBalanceAfter.toString()); - expect(poolBalanceAfter, `Pool Token to be greater than before`).to.be.gt(poolBalance); - }); - // }) - -// NO WMATIC POOLS: https://reference-app.pooltogether.com/pools/polygon -// describe("Main - WETH Prize Pool Test", function () { -// it("Deposit 1 ETH into WETH Prize Pool and withdraw immediately", async function () { -// const amount = ethers.utils.parseEther("1") // 1 ETH -// const setId = "83478237" -// const spells = [ -// { -// connector: ptConnectorName, -// method: "depositTo", -// args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, setId] -// }, -// { -// connector: ptConnectorName, -// method: "withdrawInstantlyFrom", -// args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, setId, 0] -// }, -// ] -// // Before Spell -// const ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - -// // Run spell transaction -// const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) -// const receipt = await tx.wait() - -// // After spell -// const ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - -// // ETH used for transaction -// expect(ethBalanceAfter, `ETH Balance less than before spell because of early withdrawal fee`).to.be.lte(ethBalanceBefore); -// }); - -// it("Deposit 1 ETH into WETH Prize Pool, wait 14 days, then withdraw", async function () { -// const amount = ethers.utils.parseEther("1") // 1 ETH -// const depositSpell = [ -// { -// connector: ptConnectorName, -// method: "depositTo", -// args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, 0] -// } -// ] - -// const withdrawSpell = [ -// { -// connector: ptConnectorName, -// method: "withdrawInstantlyFrom", -// args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, 0, 0] -// } -// ] - -// // Before Deposit Spell -// let ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - -// // Run deposit spell transaction -// const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(depositSpell), wallet1.address) -// const receipt = await tx.wait() - -// // After Deposit spell -// let ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - -// expect(ethBalanceAfter, `ETH Balance less than before spell`).to.be.lte(ethBalanceBefore); - -// // Increase time by 11 days so we get back all ETH without early withdrawal fee -// await ethers.provider.send("evm_increaseTime", [14*24*60*60]); -// await ethers.provider.send("evm_mine"); - -// // Run withdraw spell transaction -// const tx2 = await dsaWallet0.connect(wallet0).cast(...encodeSpells(withdrawSpell), wallet1.address) -// const receipt2 = await tx.wait() - -// // After Deposit spell -// ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - -// expect(ethBalanceAfter, `ETH Balance equal to before spell because no early exit fee`).to.be.eq(ethBalanceBefore); -// }); - }); -}) \ No newline at end of file diff --git a/test/pooltogether/pooltogether.test.js b/test/pooltogether/pooltogether.test.js deleted file mode 100644 index 6dc2697b..00000000 --- a/test/pooltogether/pooltogether.test.js +++ /dev/null @@ -1,811 +0,0 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { web3, deployments, waffle, ethers } = hre; -const { provider, deployContract } = waffle - -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") - -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const constants = require("../../scripts/constant/constant"); -const tokens = require("../../scripts/constant/tokens"); - -const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/compound/main.sol/ConnectV2Compound.json") -const connectV2PoolTogetherArtifacts = require("../../artifacts/contracts/mainnet/connectors/pooltogether/main.sol/ConnectV2PoolTogether.json") -const connectV2UniswapArtifacts = require("../../artifacts/contracts/mainnet/connectors/uniswap/main.sol/ConnectV2UniswapV2.json") - -const DAI_TOKEN_ADDR = tokens.dai.address // DAI Token - -// PoolTogether Address: https://docs.pooltogether.com/resources/networks/ethereum -const DAI_PRIZE_POOL_ADDR = "0xEBfb47A7ad0FD6e57323C8A42B2E5A6a4F68fc1a" // DAI Prize Pool -const PT_DAI_TICKET_ADDR = "0x334cBb5858417Aee161B53Ee0D5349cCF54514CF" // PT DAI Ticket -const DAI_POOL_FAUCET_ADDR = "0xF362ce295F2A4eaE4348fFC8cDBCe8d729ccb8Eb" // DAI POOL Faucet -const POOL_TOKEN_ADDRESS = "0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e" // POOL Tocken -const TOKEN_FAUCET_PROXY_FACTORY_ADDR = "0xE4E9cDB3E139D7E8a41172C20b6Ed17b6750f117" // TokenFaucetProxyFactory for claimAll -const DAI_POD_ADDR = "0x2f994e2E4F3395649eeE8A89092e63Ca526dA829" // DAI Pod -const UNISWAP_POOLETHLP_PRIZE_POOL_ADDR = "0x3AF7072D29Adde20FC7e173a7CB9e45307d2FB0A" // Uniswap Pool/ETH LP PrizePool -const UNISWAP_POOLETHLP_FAUCET_ADDR = "0x9A29401EF1856b669f55Ae5b24505b3B6fAEb370" // Uniswap Pool/ETH LP Faucet -const UNISWAP_POOLETHLP_TOKEN_ADDR = "0x85cb0bab616fe88a89a35080516a8928f38b518b" // Uniswap Pool/ETH Token -const PT_UNISWAP_POOLETHLP_TICKET_ADDR = "0xeb8928ee92efb06c44d072a24c2bcb993b61e543" // Pool Together Uniswap Pool/ETH LP Ticket -const POOL_PRIZE_POOL_ADDR = "0x396b4489da692788e327e2e4b2b0459a5ef26791" // POOL Prize Pool -const PT_POOL_TICKET_ADDR = "0x27d22a7648e955e510a40bdb058333e9190d12d4" // Pool Together POOL Ticket -const WETH_ADDR = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" // WETH -const DAI_POD_TOKEN_DROP = "0xc5209623E3dFdf9C0cCbe497c8012883C4147731" - -// Community WETH Prize Pool (Rari): https://reference-app.pooltogether.com/pools/mainnet/0xa88ca010b32a54d446fc38091ddbca55750cbfc3/manage#stats -const WETH_PRIZE_POOL_ADDR = "0xa88ca010b32a54d446fc38091ddbca55750cbfc3" // Community WETH Prize Pool (Rari) -const WETH_POOL_TICKET_ADDR = "0x9b5c30aeb9ce2a6a121cea9a85bc0d662f6d9b40" // Community WETH Prize Pool Ticket (Rari) - -const prizePoolABI = [ - "function calculateEarlyExitFee( address from, address controlledToken, uint256 amount) external returns ( uint256 exitFee, uint256 burnedCredit)" -] - -const podABI = [ - "function getEarlyExitFee(uint256 amount) external returns (uint256)", - "function balanceOfUnderlying(address user) external view returns (uint256 amount)", - "function drop() public returns (uint256)", - "function balanceOf(address account) external view returns (uint256)" -] - -const POD_FACTORY_ADDRESS = "0x4e3a9f9fbafb2ec49727cffa2a411f7a0c1c4ce1" -const podFactoryABI = [ - "function create( address _prizePool, address _ticket, address _faucet, address _manager, uint8 _decimals) external returns (address pod)" -] - -const tokenDropABI = [ - "function claim(address user) external returns (uint256)", -] - -describe("PoolTogether", function () { - const connectorName = "COMPOUND-TEST-A" - const uniswapConnectorName = "UNISWAP-TEST-A" - const ptConnectorName = "POOLTOGETHER-TEST-A" - - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - let ptConnector; - let uniswapConnector; - - const wallets = provider.getWallets() - const [wallet0, wallet1, wallet2, wallet3] = wallets - before(async () => { - masterSigner = await getMasterSigner(wallet3) - instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - - // Deploy and enable Compound Connector - connector = await deployAndEnableConnector({ - connectorName, - contractArtifact: connectV2CompoundArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - - // Deploy and enable Pool Together Connector - ptConnector = await deployAndEnableConnector({ - connectorName: ptConnectorName, - contractArtifact: connectV2PoolTogetherArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - - // Deploy and enable Uniswap Connector - uniswapConnector = await deployAndEnableConnector({ - connectorName: uniswapConnectorName, - contractArtifact: connectV2UniswapArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - }) - - it("Should have contracts deployed.", async function () { - expect(!!instaConnectorsV2.address).to.be.true; - expect(!!connector.address).to.be.true; - expect(!!ptConnector.address).to.be.true; - expect(!!uniswapConnector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; - }); - - describe("DSA wallet setup", function () { - it("Should build DSA v2", async function () { - dsaWallet0 = await buildDSAv2(wallet0.address) - expect(!!dsaWallet0.address).to.be.true; - }); - - it("Deposit 10 ETH into DSA wallet", async function () { - await wallet0.sendTransaction({ - to: dsaWallet0.address, - value: ethers.utils.parseEther("10") - }); - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); - }); - }); - - describe("Main - DAI Prize Pool Test", function () { - - it("Should deposit 1 ETH in Compound", async function () { - const amount = ethers.utils.parseEther("1") // 1 ETH - const spells = [ - { - connector: connectorName, - method: "deposit", - args: ["ETH-A", amount, 0, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); - }); - - it("Should borrow 100 DAI from Compound and deposit DAI into DAI Prize Pool", async function () { - const amount = ethers.utils.parseEther("100") // 100 DAI - const setId = "83478237" - const spells = [ - { - connector: connectorName, - method: "borrow", - args: ["DAI-A", amount, 0, setId] - }, - { - connector: ptConnectorName, - method: "depositTo", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, setId, 0] - } - ] - // Before Spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI balance is 0`).to.be.eq(ethers.utils.parseEther("0")); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_DAI_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance,`PoolTogether DAI Ticket balance is 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `Expect DAI balance to still equal 0 since it was deposited into Prize Pool`).to.be.eq(0); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether DAI Ticket balance equals 100`).to.be.eq(ethers.utils.parseEther("100")); - - // ETH used for transaction - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("9")); - }); - - it("Should wait 11 days, withdraw all PrizePool, get back 100 DAI, and claim POOL", async function () { - const amount = ethers.utils.parseEther("100") // 100 DAI - - let prizePoolContract = new ethers.Contract(DAI_PRIZE_POOL_ADDR, prizePoolABI, ethers.provider); - let earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 1 DAI because starts at 10%").to.be.eq(ethers.utils.parseEther("1")); - - const spells = [ - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, earlyExitFee.exitFee, 0, 0] - }, - { - connector: ptConnectorName, - method: "claim", - args: [DAI_POOL_FAUCET_ADDR, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI balance equals 0`).to.be.eq(ethers.utils.parseEther("0")); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_DAI_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether Dai Ticket is 100`).to.be.eq(ethers.utils.parseEther("100")); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token equals 0`).to.be.eq(ethers.utils.parseEther("0")); - - // Increase time by 11 days so we get back all DAI without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [11*24*60*60]); - await ethers.provider.send("evm_mine"); - - earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 0 DAI because past 10 days").to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, - `DAI balance to be equal to 100, because of no early withdrawal fee` - ).to.be.eq(ethers.utils.parseEther("100")); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether Dai Ticket to equal 0`).to.be.eq(0); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token Balance to be greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - }); - - it("Should deposit and withdraw all PrizePool, get back less than 100 DAI", async function() { - const amount = ethers.utils.parseEther("100") // 100 DAI - const exitFee = ethers.utils.parseEther("1") // 1 DAI is 10% of 100 DAI - const spells = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, 0, 0] - }, - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, exitFee, 0, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI Balance equals 0`).to.be.eq(ethers.utils.parseEther("100")); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_DAI_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether DAI Ticket equals 0`).to.be.eq(0); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `PoolTogether Token greater than 0`).to.be.gt(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, - `DAI balance to be less than 100, because of early withdrawal fee` - ).to.be.lt(ethers.utils.parseEther("100")); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether Dai Ticket to equal 0`).to.be.eq(0); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token Balance to greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - - }); - - it("Should deposit, wait 11 days, and withdraw all PrizePool, get 99 DAI, and claim all POOL using claimAll", async function() { - const amount = ethers.utils.parseEther("99") // 99 DAI - const depositSpells = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, 0, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI balance less than 100`).to.be.lt(ethers.utils.parseEther("100")); - - let cToken = await ethers.getContractAt(abis.basic.erc20, PT_DAI_TICKET_ADDR) - const balance = await cToken.balanceOf(dsaWallet0.address) - expect(balance, `PoolTogether DAI Ticket equal 0`).to.be.eq(0); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token is greater than 0`).to.be.gt(ethers.utils.parseEther("0")); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(depositSpells), wallet1.address) - const receipt = await tx.wait() - - const prizePoolContract = new ethers.Contract(DAI_PRIZE_POOL_ADDR, prizePoolABI, ethers.provider); - let earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to .99 DAI because starts at 10%").to.be.eq(ethers.utils.parseEther(".99")); - - - // Increase time by 11 days so we get back all DAI without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [11*24*60*60]); - await ethers.provider.send("evm_mine"); - - earlyExitFee = await prizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_DAI_TICKET_ADDR, amount); - expect(earlyExitFee.exitFee, "Exit Fee equal to 0 DAI because past 10 days").to.be.eq(0); - - const withdrawSpells = [ - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [DAI_PRIZE_POOL_ADDR, amount, PT_DAI_TICKET_ADDR, earlyExitFee.exitFee, 0, 0] - }, - { - connector: ptConnectorName, - method: "claimAll", - args: [TOKEN_FAUCET_PROXY_FACTORY_ADDR, [DAI_POOL_FAUCET_ADDR]] - } - ] - - // Run spell transaction - const tx2 = await dsaWallet0.connect(wallet0).cast(...encodeSpells(withdrawSpells), wallet1.address) - const receipt2 = await tx2.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI balance equals 99`).to.be.eq(ethers.utils.parseEther("99")); - - const balanceAfter = await cToken.balanceOf(dsaWallet0.address) - expect(balanceAfter, `PoolTogether DAI Ticket equal 0`).to.be.eq(0); - - // Expect - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `Pool Token to be greateir than 0`).to.be.gt(ethers.utils.parseEther("0")); - }); - }) - - describe("Main - DAI Pod Test", function() { - it("Should deposit 99 DAI in DAI Pod", async function() { - const amount = ethers.utils.parseEther("99") // 99 DAI - const spells = [ - { - connector: ptConnectorName, - method: "depositToPod", - args: [DAI_TOKEN_ADDR, DAI_POD_ADDR, amount, 0, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI balance equals 99`).to.be.eq(ethers.utils.parseEther("99")); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); - - let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR) - const podBalance = await podToken.balanceOf(dsaWallet0.address) - expect(podBalance, `Pod DAI Token equals 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI equals 0`).to.be.eq(0); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token greater than 0`).to.be.gt(0); - - const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address) - expect(podBalanceAfter, `Pod DAI token greater than 0`).to.be.eq(ethers.utils.parseEther("99")); - }); - - it("Should claim rewards from pod token drop", async function() { - const spells = [ - { - connector: ptConnectorName, - method: "claimPodTokenDrop", - args: [DAI_POD_TOKEN_DROP, 0] - } - ] - - const tokenDropContract = new ethers.Contract(DAI_POD_TOKEN_DROP, tokenDropABI, ethers.provider); - const podContract = new ethers.Contract(DAI_POD_ADDR, podABI, masterSigner); - - // drop(): Claim TokenDrop asset for PrizePool Pod and transfers token(s) to external Pod TokenDrop - // dropt() also calls batch which, Deposit Pod float into PrizePool. Deposits the current float - // amount into the PrizePool and claims current POOL rewards. - const dropTx = await podContract.drop(); - await dropTx.wait(); - - // POOL Rewards able to claim from Pod Token Drop - let claimAmount = await tokenDropContract.callStatic["claim"](dsaWallet0.address); - - // Before spell - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - const total = claimAmount.add(poolBalance); - expect(poolBalanceAfter, `POOL Token same as before spell`).to.be.eq(total); - }); - - it("Should wait 11 days, withdraw all podTokens, get back 99 DAI", async function () { - const amount = ethers.utils.parseEther("99") // 99 DAI - - const podContract = new ethers.Contract(DAI_POD_ADDR, podABI, ethers.provider); - let maxFee = await podContract.callStatic["getEarlyExitFee"](amount); - // maxFee depends on if token has been deposited to PrizePool yet - // since we called drop in previous test case, the tokens were deposited to PrizePool - expect(maxFee, "Exit Fee equal to .99 DAI because token still in float").to.be.eq(ethers.utils.parseEther(".99")); - - const spells = [ - { - connector: ptConnectorName, - method: "withdrawFromPod", - args: [DAI_POD_ADDR, amount, maxFee, 0, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI Balance equals 0`).to.be.eq(0); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token balance greater than 0`).to.be.gt(0); - - let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR) - const podBalance = await podToken.balanceOf(dsaWallet0.address) - expect(podBalance, `Pod DAI Token equals 99`).to.be.eq(ethers.utils.parseEther("99")); - - // Increase time by 11 days so we get back all DAI without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [11*24*60*60]); - await ethers.provider.send("evm_mine"); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, - `DAI balance equals 99, because of no early withdrawal fee` - ).to.be.eq(ethers.utils.parseEther("99")); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token to be greater than 0`).to.be.gt(0); - - const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address) - expect(podBalanceAfter, `Pod DAI Token equals 0`).to.be.eq(0); - }); - - - - - it("Should deposit and withdraw from pod, get back same amount of 99 DAI", async function() { - const amount = ethers.utils.parseEther("99") - const maxFee = 0; // maxFee 0 since it doesn't give chance for Pod to actually deposit into PrizePool - - const spells = [ - { - connector: ptConnectorName, - method: "depositToPod", - args: [DAI_TOKEN_ADDR, DAI_POD_ADDR, amount, 0, 0] - }, - { - connector: ptConnectorName, - method: "withdrawFromPod", - args: [DAI_POD_ADDR, amount, maxFee, 0, 0] - } - ] - - // Before spell - let daiToken = await ethers.getContractAt(abis.basic.erc20, DAI_TOKEN_ADDR) - let daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, `DAI equals 99`).to.be.eq(ethers.utils.parseEther("99")); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); - - // PodToken is 0 - let podToken = await ethers.getContractAt(abis.basic.erc20, DAI_POD_ADDR) - const podBalance = await podToken.balanceOf(dsaWallet0.address) - expect(podBalance, `Pod DAI Token equals 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - daiBalance = await daiToken.balanceOf(dsaWallet0.address); - expect(daiBalance, - `DAI balance to be equal to 99, because funds still in 'float` - ).to.be.eq(ethers.utils.parseEther("99")); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token same as before spell`).to.be.eq(poolBalance); - - // Expect Pod Token Balance to equal 0 - const podBalanceAfter = await podToken.balanceOf(dsaWallet0.address) - expect(podBalanceAfter, `Pod DAI Token equals 0`).to.be.eq(ethers.utils.parseEther("0")); - }); - }) - - describe("Main - UNISWAP POOL/ETH Prize Pool Test", function () { - it("Should use uniswap to swap ETH for POOL, deposit to POOL/ETH LP, deposit POOL/ETH LP to PrizePool", async function () { - const amount = ethers.utils.parseEther("100") // 100 POOL - const slippage = ethers.utils.parseEther("0.03"); - const setId = "83478237" - - const UniswapV2Router02ABI = [ - "function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)" - ]; - - // Get amount of ETH for 100 POOL from Uniswap - const UniswapV2Router02 = await ethers.getContractAt(UniswapV2Router02ABI, "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"); - const amounts = await UniswapV2Router02.getAmountsOut(amount, [POOL_TOKEN_ADDRESS, WETH_ADDR]); - const unitAmount = ethers.utils.parseEther(((amounts[1]*1.03)/amounts[0]).toString()); - - const spells = [ - { - connector: uniswapConnectorName, - method: "buy", - args: [POOL_TOKEN_ADDRESS, tokens.eth.address, amount, unitAmount, 0, setId] - }, - { - connector: uniswapConnectorName, - method: "deposit", - args: [POOL_TOKEN_ADDRESS, tokens.eth.address, amount, unitAmount, slippage, 0, setId] - }, - { - connector: ptConnectorName, - method: "depositTo", - args: [UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, 0, PT_UNISWAP_POOLETHLP_TICKET_ADDR, setId, 0] - } - ] - - // Before Spell - let ethBalance = await ethers.provider.getBalance(dsaWallet0.address); - expect(ethBalance, `ETH Balance equals 9`).to.be.eq(ethers.utils.parseEther("9")); - - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); - - let uniswapLPToken = await ethers.getContractAt(abis.basic.erc20, UNISWAP_POOLETHLP_TOKEN_ADDR) - const uniswapPoolEthBalance = await uniswapLPToken.balanceOf(dsaWallet0.address) - expect(uniswapPoolEthBalance, `Uniswap POOL/ETH LP equals 0`).to.be.eq(0); - - let ptUniswapPoolEthToken = await ethers.getContractAt(abis.basic.erc20, PT_UNISWAP_POOLETHLP_TICKET_ADDR) - const ptUniswapPoolEthBalance = await ptUniswapPoolEthToken.balanceOf(dsaWallet0.address) - expect(ptUniswapPoolEthBalance, `PoolTogether Uniswap POOL?ETH LP equals 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - ethBalance = await ethers.provider.getBalance(dsaWallet0.address); - expect(ethBalance, `ETH Balance less than 9`).to.be.lt(ethers.utils.parseEther("9")); - - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `POOL Token to be same after spell`).to.be.eq(poolBalance); - - const uniswapPoolEthBalanceAfter = await uniswapLPToken.balanceOf(dsaWallet0.address) - expect(uniswapPoolEthBalanceAfter, `Uniswap POOL/ETH LP equals 0`).to.be.eq(0); - - const ptUniswapPoolEthBalanceAfter = await ptUniswapPoolEthToken.balanceOf(dsaWallet0.address) - expect(ptUniswapPoolEthBalanceAfter, `PT Uniswap POOL/ETH LP to greater than 0`).to.be.gt(0); - }); - - it("Should withdraw all PrizePool, get back Uniswap LP, claim POOL, deposit claimed POOL into Pool PrizePool", async function () { - let ptUniswapPoolEthToken = await ethers.getContractAt(abis.basic.erc20, PT_UNISWAP_POOLETHLP_TICKET_ADDR) - const ptUniswapPoolEthBalance = await ptUniswapPoolEthToken.balanceOf(dsaWallet0.address) - const setId = "83478237" - - let uniswapPrizePoolContract = new ethers.Contract(UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, prizePoolABI, ethers.provider); - let earlyExitFee = await uniswapPrizePoolContract.callStatic["calculateEarlyExitFee"](dsaWallet0.address, PT_UNISWAP_POOLETHLP_TICKET_ADDR, ptUniswapPoolEthBalance); - expect(earlyExitFee.exitFee, "Exit Fee equals 0 because no early exit fee for this prize pool").to.be.eq(0); - - const spells = [ - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [UNISWAP_POOLETHLP_PRIZE_POOL_ADDR, ptUniswapPoolEthBalance, PT_UNISWAP_POOLETHLP_TICKET_ADDR, earlyExitFee.exitFee, 0, 0] - }, - { - connector: ptConnectorName, - method: "claim", - args: [UNISWAP_POOLETHLP_FAUCET_ADDR , setId] - }, - { - connector: ptConnectorName, - method: "depositTo", - args: [POOL_PRIZE_POOL_ADDR, 0, PT_POOL_TICKET_ADDR, setId, 0] - } - ] - - // Before spell - let poolToken = await ethers.getContractAt(abis.basic.erc20, POOL_TOKEN_ADDRESS) - const poolBalance = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalance, `POOL Token greater than 0`).to.be.gt(0); - - // Uniswap POOL/ETH LP is 0 - let uniswapLPToken = await ethers.getContractAt(abis.basic.erc20, UNISWAP_POOLETHLP_TOKEN_ADDR) - const uniswapPoolEthBalance = await uniswapLPToken.balanceOf(dsaWallet0.address) - expect(uniswapPoolEthBalance, `Uniswap POOL/ETH LP equals 0`).to.be.eq(0); - - expect(ptUniswapPoolEthBalance, `PT Uniswap POOL/ETH LP greater than 0`).to.be.gt(0); - - let poolPoolTicket = await ethers.getContractAt(abis.basic.erc20, PT_POOL_TICKET_ADDR) - const poolPoolTicketBalance = await poolPoolTicket.balanceOf(dsaWallet0.address) - expect(poolPoolTicketBalance, `PoolTogether POOL Ticket equals 0`).to.be.eq(0); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - const poolBalanceAfter = await poolToken.balanceOf(dsaWallet0.address) - expect(poolBalanceAfter, `Pool Token Balance equal to balance before spell`).to.be.eq(poolBalance); - - const uniswapPoolEthBalanceAfter = await uniswapLPToken.balanceOf(dsaWallet0.address) - expect(uniswapPoolEthBalanceAfter, `Uniswap POOL/ETH LP to greater than 0`).to.be.gt(0); - - const ptUniswapPoolEthBalanceAfter = await ptUniswapPoolEthToken.balanceOf(dsaWallet0.address) - expect(ptUniswapPoolEthBalanceAfter, `PT Uniswap POOL/ETH LP equal 0`).to.be.eq(0); - - const poolPoolTicketBalanceAfter = await poolPoolTicket.balanceOf(dsaWallet0.address) - expect(poolPoolTicketBalanceAfter, `PoolTogether POOL Ticket greater than 0`).to.be.gt(0); - }); - }) - - describe("Main - WETH Prize Pool Test", function () { - it("Deposit 1 ETH into WETH Prize Pool and withdraw immediately", async function () { - const amount = ethers.utils.parseEther("1") // 1 ETH - const setId = "83478237" - const spells = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, setId] - }, - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, setId, 0] - }, - ] - // Before Spell - const ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After spell - const ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - - // ETH used for transaction - expect(ethBalanceAfter, `ETH Balance less than before spell because of early withdrawal fee`).to.be.lte(ethBalanceBefore); - }); - - it("Deposit 1 ETH into WETH Prize Pool, wait 14 days, then withdraw", async function () { - const amount = ethers.utils.parseEther("1") // 1 ETH - const depositSpell = [ - { - connector: ptConnectorName, - method: "depositTo", - args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, 0, 0] - } - ] - - const withdrawSpell = [ - { - connector: ptConnectorName, - method: "withdrawInstantlyFrom", - args: [WETH_PRIZE_POOL_ADDR, amount, WETH_POOL_TICKET_ADDR, amount, 0, 0] - } - ] - - // Before Deposit Spell - let ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - - // Run deposit spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(depositSpell), wallet1.address) - const receipt = await tx.wait() - - // After Deposit spell - let ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - - expect(ethBalanceAfter, `ETH Balance less than before spell`).to.be.lte(ethBalanceBefore); - - // Increase time by 11 days so we get back all ETH without early withdrawal fee - await ethers.provider.send("evm_increaseTime", [14*24*60*60]); - await ethers.provider.send("evm_mine"); - - // Run withdraw spell transaction - const tx2 = await dsaWallet0.connect(wallet0).cast(...encodeSpells(withdrawSpell), wallet1.address) - const receipt2 = await tx.wait() - - // After Deposit spell - ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - - expect(ethBalanceAfter, `ETH Balance equal to before spell because no early exit fee`).to.be.eq(ethBalanceBefore); - }); - }); - - describe("Main - WETH Pod Test", function() { - let podAddress - it("Should deposit 1 ETH in WETH Pod and get Pod Ticket", async function() { - const amount = ethers.utils.parseEther("1") - - // Create Pod for WETH Prize Pool (Rari) - const podFactoryContract = new ethers.Contract(POD_FACTORY_ADDRESS, podFactoryABI, masterSigner) - podAddress = await podFactoryContract.callStatic.create(WETH_PRIZE_POOL_ADDR, WETH_POOL_TICKET_ADDR, constants.address_zero, wallet0.address, 18) - await podFactoryContract.create(WETH_PRIZE_POOL_ADDR, WETH_POOL_TICKET_ADDR, constants.address_zero, wallet0.address, 18) - - const spells = [ - { - connector: ptConnectorName, - method: "depositToPod", - args: [WETH_ADDR, podAddress, amount, 0, 0] - } - ] - - // Before Deposit Spell - const podContract = new ethers.Contract(podAddress, podABI, ethers.provider); - let podBalanceBefore = await podContract.balanceOfUnderlying(dsaWallet0.address) - expect(podBalanceBefore, `Pod balance equal to 0`).to.be.eq(0); - - let ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After Deposit spell - let ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - expect(ethBalanceAfter, `ETH balance less than before`).to.be.lt(ethBalanceBefore); - - podBalanceAfter = await podContract.balanceOfUnderlying(dsaWallet0.address) - expect(podBalanceAfter, `Pod balance equal to 1`).to.be.eq(ethers.utils.parseEther("1")); - }); - - it("Should withdraw 1 Ticket from WETH Pod and get back ETH", async function() { - const amount = ethers.utils.parseEther("1") - - const podContract = new ethers.Contract(podAddress, podABI, ethers.provider); - let maxFee = await podContract.callStatic["getEarlyExitFee"](amount); - expect(maxFee, "Exit Fee equal to 0 DAI because token still in float").to.be.eq(0); - // maxFee depends on if token has been deposited to PrizePool yet - - const spells = [ - { - connector: ptConnectorName, - method: "withdrawFromPod", - args: [podAddress, amount, maxFee, 0, 0] - } - ] - - // Before Deposit Spell - let podBalanceBefore = await podContract.balanceOfUnderlying(dsaWallet0.address) - expect(podBalanceBefore, `Pod balance equal to 1`).to.be.eq(ethers.utils.parseEther("1")); - - let ethBalanceBefore = await ethers.provider.getBalance(dsaWallet0.address); - - // Run spell transaction - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address) - const receipt = await tx.wait() - - // After Deposit spell - let ethBalanceAfter = await ethers.provider.getBalance(dsaWallet0.address); - expect(ethBalanceAfter, `ETH balance greater than before`).to.be.gt(ethBalanceBefore); - - podBalanceAfter = await podContract.balanceOfUnderlying(dsaWallet0.address) - expect(podBalanceAfter, `Pod balance equal to 0`).to.be.eq(ethers.utils.parseEther("0")); - }); - }); -}) \ No newline at end of file diff --git a/test/yearn/yearn.test.js b/test/yearn/yearn.test.js deleted file mode 100644 index 596029d3..00000000 --- a/test/yearn/yearn.test.js +++ /dev/null @@ -1,153 +0,0 @@ -const { expect } = require("chai"); -const hre = require("hardhat"); -const { waffle, ethers } = hre; -const { provider } = waffle - -const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") -const buildDSAv2 = require("../../scripts/buildDSAv2") -const encodeSpells = require("../../scripts/encodeSpells.js") -const getMasterSigner = require("../../scripts/getMasterSigner") - -const tokens = require("../../scripts/constant/tokens"); -const addresses = require("../../scripts/constant/addresses"); -const abis = require("../../scripts/constant/abis"); -const connectV2YearnArtifacts = require("../../artifacts/contracts/mainnet/connectors/yearn_v2/main.sol/ConnectV2YearnV2.json") - -const toBytes32 = (bn) => { - return ethers.utils.hexlify(ethers.utils.zeroPad(bn.toHexString(), 32)); -}; -const setStorageAt = async (address, index, value) => { - await ethers.provider.send("hardhat_setStorageAt", [address, index, value]); - await ethers.provider.send("evm_mine", []); // Just mines to the next block -}; - -describe("Yearn", function () { - const connectorName = "YEARN-TEST-A" - - let dsaWallet0 - let masterSigner; - let instaConnectorsV2; - let connector; - - const wallets = provider.getWallets() - const [wallet0, wallet1, wallet2, wallet3] = wallets - before(async () => { - await hre.network.provider.request({ - method: "hardhat_reset", - params: [ - { - forking: { - jsonRpcUrl: hre.config.networks.hardhat.forking.url, - blockNumber: 12996975, - }, - }, - ], - }); - masterSigner = await getMasterSigner(wallet3) - instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); - connector = await deployAndEnableConnector({ - connectorName, - contractArtifact: connectV2YearnArtifacts, - signer: masterSigner, - connectors: instaConnectorsV2 - }) - console.log("Connector address", connector.address) - }) - - it("Should have contracts deployed.", async function () { - expect(!!instaConnectorsV2.address).to.be.true; - expect(!!connector.address).to.be.true; - expect(!!masterSigner.address).to.be.true; - }); - - describe("DSA wallet setup", function () { - it("Should build DSA v2", async function () { - dsaWallet0 = await buildDSAv2(wallet0.address) - expect(!!dsaWallet0.address).to.be.true; - }); - - it("Deposit ETH into DSA wallet", async function () { - await wallet0.sendTransaction({ - to: dsaWallet0.address, - value: ethers.utils.parseEther("10") - }); - expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); - }); - }); - - describe("Main", function () { - - it("Should increase the DAI balance to 100 DAI", async function () { - const DAI = new ethers.Contract(tokens.dai.address, abis.basic.erc20, ethers.provider); - const DAI_SLOT = 2; - const locallyManipulatedBalance = ethers.utils.parseEther("100"); - - // Get storage slot index - const index = ethers.utils.solidityKeccak256( - ["uint256", "uint256"], - [dsaWallet0.address, DAI_SLOT] - ); - // Manipulate local balance (needs to be bytes32 string) - await setStorageAt( - tokens.dai.address, - index.toString(), - toBytes32(locallyManipulatedBalance).toString() - ); - - // Get DAI balance - const balance = await DAI.balanceOf(dsaWallet0.address); - expect(await ethers.BigNumber.from(balance).eq(ethers.utils.parseEther("100"))); - }); - - it("Should deposit and withdraw 50 DAI in/out the Yearn Vault", async function () { - const DAI = new ethers.Contract(tokens.dai.address, abis.basic.erc20, ethers.provider); - const DAI_VAULT = '0xdA816459F1AB5631232FE5e97a05BBBb94970c95'; - const amount = ethers.utils.parseEther("50") // 50 DAI - const setId = "132456"; - const spells = [ - { - connector: connectorName, - method: "deposit", - args: [DAI_VAULT, amount, 0, setId] - }, - { - connector: connectorName, - method: "withdraw", - args: [DAI_VAULT, amount, setId, 0] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet0.address); - await tx.wait(); - - // Get DAI balance - const balance = await DAI.balanceOf(dsaWallet0.address); - expect(await ethers.BigNumber.from(balance).eq(ethers.utils.parseEther("100"))); - }); - - it("Should deposit 70 DAI in the Yearn Vault", async function () { - const DAI_VAULT = '0xdA816459F1AB5631232FE5e97a05BBBb94970c95'; - const DAI = new ethers.Contract(tokens.dai.address, abis.basic.erc20, ethers.provider); - const YVDAI = new ethers.Contract(DAI_VAULT, abis.basic.erc20, ethers.provider); - const amount = ethers.utils.parseEther("70") // 70 DAI - const setId = "568445"; - const spells = [ - { - connector: connectorName, - method: "deposit", - args: [DAI_VAULT, amount, 0, setId] - } - ] - - const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet0.address); - await tx.wait(); - - // Get DAI balance - const yvDAIBalance = await YVDAI.balanceOf(dsaWallet0.address); - const daiBalance = await DAI.balanceOf(dsaWallet0.address); - const correctDaiBalance = await ethers.BigNumber.from(daiBalance).eq(ethers.utils.parseEther("30")); - const correctYVDaiBalance = await ethers.BigNumber.from(yvDAIBalance).lte(ethers.utils.parseEther("70")); - expect(correctDaiBalance && correctYVDaiBalance); - }); - }) -}) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..af311260 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +// tsconfig.json +{ + "compilerOptions": { + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es5", "es6"], + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "resolveJsonModule": true, + "sourceMap": true, + "strict": true, + "target": "es5", + }, + "exclude": ["artifacts", "node_modules"], + "files": ["./hardhat.config.ts"], + "include": [ + "artifacts/**/*", + "artifacts/**/*.json", + "scripts/**/*", + "tasks/**/*", + "test/**/*", + "typechain/**/*", + "types/**/*" + ] +} diff --git a/yarn.lock b/yarn.lock index bc93a47e..a5bbacb4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,18 @@ dependencies: "regenerator-runtime" "^0.13.4" +"@cspotcode/source-map-consumer@0.8.0": + "integrity" "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz" + "version" "0.8.0" + +"@cspotcode/source-map-support@0.7.0": + "integrity" "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + "@ensdomains/address-encoder@^0.1.7": "integrity" "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==" "resolved" "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz" @@ -143,13 +155,13 @@ "rlp" "^2.2.4" "semaphore-async-await" "^1.5.1" -"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0": - "integrity" "sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w==" - "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.4.0.tgz" - "version" "2.4.0" +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0": + "integrity" "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==" + "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz" + "version" "2.6.0" dependencies: "crc-32" "^1.2.0" - "ethereumjs-util" "^7.1.0" + "ethereumjs-util" "^7.1.3" "@ethereumjs/ethash@^1.0.0": "integrity" "sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw==" @@ -161,13 +173,13 @@ "ethereumjs-util" "^7.0.7" "miller-rabin" "^4.0.0" -"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0": - "integrity" "sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==" - "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.0.tgz" - "version" "3.3.0" +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2": + "integrity" "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==" + "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz" + "version" "3.4.0" dependencies: - "@ethereumjs/common" "^2.4.0" - "ethereumjs-util" "^7.1.0" + "@ethereumjs/common" "^2.6.0" + "ethereumjs-util" "^7.1.3" "@ethereumjs/vm@^5.5.2": "integrity" "sha512-AydZ4wfvZAsBuFzs3xVSA2iU0hxhL8anXco3UW3oh9maVC34kTEytOfjHf06LTEfN0MF9LDQ4ciLa7If6ZN/sg==" @@ -188,7 +200,7 @@ "rustbn.js" "~0.2.0" "util.promisify" "^1.0.1" -"@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": +"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": "integrity" "sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw==" "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.4.0.tgz" "version" "5.4.0" @@ -361,7 +373,7 @@ "@ethersproject/logger" "^5.5.0" "bn.js" "^4.11.9" -"@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@5.5.0": +"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@5.5.0": "integrity" "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==" "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz" "version" "5.5.0" @@ -503,10 +515,10 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/networks@^5.5.0", "@ethersproject/networks@5.5.0": - "integrity" "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==" - "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz" - "version" "5.5.0" +"@ethersproject/networks@^5.5.0", "@ethersproject/networks@5.5.1": + "integrity" "sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q==" + "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.1.tgz" + "version" "5.5.1" dependencies: "@ethersproject/logger" "^5.5.0" @@ -530,10 +542,10 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/providers@^5.4.4", "@ethersproject/providers@5.5.0": - "integrity" "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==" - "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz" - "version" "5.5.0" +"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@5.5.1": + "integrity" "sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.1.tgz" + "version" "5.5.1" dependencies: "@ethersproject/abstract-provider" "^5.5.0" "@ethersproject/abstract-signer" "^5.5.0" @@ -701,10 +713,10 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@ethersproject/web@^5.5.0", "@ethersproject/web@5.5.0": - "integrity" "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==" - "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz" - "version" "5.5.0" +"@ethersproject/web@^5.5.0", "@ethersproject/web@5.5.1": + "integrity" "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==" + "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz" + "version" "5.5.1" dependencies: "@ethersproject/base64" "^5.5.0" "@ethersproject/bytes" "^5.5.0" @@ -730,7 +742,7 @@ dependencies: "invariant" "2" -"@ledgerhq/devices@^5.26.0": +"@ledgerhq/devices@^5.26.0", "@ledgerhq/devices@^5.51.1": "integrity" "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==" "resolved" "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz" "version" "5.51.1" @@ -756,6 +768,31 @@ "bignumber.js" "^9.0.1" "rlp" "^2.2.6" +"@ledgerhq/hw-transport-node-hid-noevents@^5.26.0": + "integrity" "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==" + "resolved" "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz" + "version" "5.51.1" + dependencies: + "@ledgerhq/devices" "^5.51.1" + "@ledgerhq/errors" "^5.50.0" + "@ledgerhq/hw-transport" "^5.51.1" + "@ledgerhq/logs" "^5.50.0" + "node-hid" "2.1.1" + +"@ledgerhq/hw-transport-node-hid@5.26.0": + "integrity" "sha512-qhaefZVZatJ6UuK8Wb6WSFNOLWc2mxcv/xgsfKi5HJCIr4bPF/ecIeN+7fRcEaycxj4XykY6Z4A7zDVulfFH4w==" + "resolved" "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.26.0.tgz" + "version" "5.26.0" + dependencies: + "@ledgerhq/devices" "^5.26.0" + "@ledgerhq/errors" "^5.26.0" + "@ledgerhq/hw-transport" "^5.26.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^5.26.0" + "@ledgerhq/logs" "^5.26.0" + "lodash" "^4.17.20" + "node-hid" "1.3.0" + "usb" "^1.6.3" + "@ledgerhq/hw-transport-u2f@5.26.0": "integrity" "sha512-QTxP1Rsh+WZ184LUOelYVLeaQl3++V3I2jFik+l9JZtakwEHjD0XqOT750xpYNL/vfHsy31Wlz+oicdxGzFk+w==" "resolved" "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.26.0.tgz" @@ -775,20 +812,50 @@ "@ledgerhq/errors" "^5.26.0" "events" "^3.2.0" +"@ledgerhq/hw-transport@^5.51.1": + "integrity" "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==" + "resolved" "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz" + "version" "5.51.1" + dependencies: + "@ledgerhq/devices" "^5.51.1" + "@ledgerhq/errors" "^5.50.0" + "events" "^3.3.0" + "@ledgerhq/logs@^5.26.0", "@ledgerhq/logs@^5.50.0": "integrity" "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" "resolved" "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz" "version" "5.50.0" -"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.0.2": - "integrity" "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz" - "version" "2.0.2" +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" -"@nomiclabs/hardhat-etherscan@^2.1.7": - "integrity" "sha512-9nt9EXubnkd2aTMnQIqKtp80bQFhun88krfB31FN2wB0T54b8YuK0riG2d+EKq/D3t1Kb00oA7oFSFpHLIbLDQ==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.7.tgz" - "version" "2.1.7" +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.0.3": + "integrity" "sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz" + "version" "2.0.3" + +"@nomiclabs/hardhat-etherscan@^2.1.8": + "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" + "version" "2.1.8" dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" @@ -976,6 +1043,13 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@solidity-parser/parser@^0.13.2": + "integrity" "sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw==" + "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.13.2.tgz" + "version" "0.13.2" + dependencies: + "antlr4ts" "^0.5.0-alpha.4" + "@solidity-parser/parser@^0.14.0": "integrity" "sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ==" "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.0.tgz" @@ -997,10 +1071,10 @@ dependencies: "defer-to-connect" "^1.0.1" -"@tenderly/hardhat-tenderly@^1.0.12": - "integrity" "sha512-zx2zVpbBxGWVp+aLgf59sZR5lxdqfq/PjqUhga6+iazukQNu/Y6pLfVnCcF1ggvLsf7gnMjwLe3YEx/GxCAykQ==" - "resolved" "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.12.tgz" - "version" "1.0.12" +"@tenderly/hardhat-tenderly@^1.0.13": + "integrity" "sha512-XsrF2QIUh8YmzCcWHmPnSNQjZNBQkyrHER8bcrWsFIgL7ub49hmPbpGVB2Isb6gUV/IGBpBm7R69jpmoTvJ17g==" + "resolved" "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.13.tgz" + "version" "1.0.13" dependencies: "axios" "^0.21.1" "fs-extra" "^9.0.1" @@ -1100,6 +1174,15 @@ "ethers" "^4.0.32" "web3" "1.5.3" +"@truffle/provider@^0.2.24": + "integrity" "sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg==" + "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.42.tgz" + "version" "0.2.42" + dependencies: + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" + "web3" "1.5.3" + "@trufflesuite/chromafi@^2.2.2": "integrity" "sha512-mItQwVBsb8qP/vaYHQ1kDt2vJLhjoEXJptT6y6fJGvFophMFhOI/NsTVUa0nJL1nyMeFiS6hSYuNVdpQZzB1gA==" "resolved" "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz" @@ -1120,6 +1203,26 @@ "strip-indent" "^2.0.0" "super-split" "^1.1.0" +"@tsconfig/node10@^1.0.7": + "integrity" "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz" + "version" "1.0.8" + +"@tsconfig/node12@^1.0.7": + "integrity" "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz" + "version" "1.0.9" + +"@tsconfig/node14@^1.0.0": + "integrity" "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz" + "version" "1.0.1" + +"@tsconfig/node16@^1.0.2": + "integrity" "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz" + "version" "1.0.2" + "@typechain/ethers-v5@^2.0.0": "integrity" "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==" "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz" @@ -1127,6 +1230,21 @@ dependencies: "ethers" "^5.0.2" +"@typechain/ethers-v5@^8.0.5": + "integrity" "sha512-ntpj4cS3v4WlDu+hSKSyj9A3o1tKtWC30RX1gobeYymZColeJiUemC1Kgfa0MWGmInm5CKxoHVhEvYVgPOZn1A==" + "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-8.0.5.tgz" + "version" "8.0.5" + dependencies: + "lodash" "^4.17.15" + "ts-essentials" "^7.0.1" + +"@typechain/hardhat@^3.0.0": + "integrity" "sha512-FpnIIXkDXm54XCHI/Z2iOet7h1MrFSvZfuljX9Uzc6FEjEfb01Tuzu8ywe2iquD3g5JXqovgdv+M54L/2Z6jkg==" + "resolved" "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "fs-extra" "^9.1.0" + "@types/abstract-leveldown@*": "integrity" "sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ==" "resolved" "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz" @@ -1153,10 +1271,33 @@ dependencies: "@types/node" "*" -"@types/chai@*": - "integrity" "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==" - "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz" - "version" "4.2.18" +"@types/chai-as-promised@^7.1.4": + "integrity" "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==" + "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz" + "version" "7.1.4" + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.2.22": + "integrity" "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz" + "version" "4.2.22" + +"@types/glob@^7.1.1": + "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" + "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/inquirer@^8.1.3": + "integrity" "sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==" + "resolved" "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.1.3.tgz" + "version" "8.1.3" + dependencies: + "@types/through" "*" + "rxjs" "^7.2.0" "@types/level-errors@*": "integrity" "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" @@ -1177,6 +1318,11 @@ "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz" "version" "5.1.0" +"@types/minimatch@*": + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" + "@types/mkdirp@^0.5.2": "integrity" "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==" "resolved" "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" @@ -1184,6 +1330,11 @@ dependencies: "@types/node" "*" +"@types/mocha@^9.0.0": + "integrity" "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==" + "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz" + "version" "9.0.0" + "@types/node-fetch@^2.5.5": "integrity" "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==" "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz" @@ -1192,10 +1343,10 @@ "@types/node" "*" "form-data" "^3.0.0" -"@types/node@*": - "integrity" "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz" - "version" "14.14.37" +"@types/node@*", "@types/node@^16.11.11": + "integrity" "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz" + "version" "16.11.11" "@types/node@^12.12.6": "integrity" "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==" @@ -1248,6 +1399,13 @@ dependencies: "@sinonjs/fake-timers" "^7.0.4" +"@types/through@*": + "integrity" "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==" + "resolved" "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz" + "version" "0.0.30" + dependencies: + "@types/node" "*" + "@types/underscore@*": "integrity" "sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w==" "resolved" "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.2.tgz" @@ -1276,10 +1434,10 @@ "resolved" "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz" "version" "1.0.0" -"@uniswap/v3-periphery@^1.2.1": - "integrity" "sha512-45W8hT8X1j9ZcXa+y3NSVao90hMZtgtoJyDlMOg91wmUGi2idXAiGivOQYdB7+7Lq8Gc6Upv/ggFZknixZrv7g==" - "resolved" "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.2.1.tgz" - "version" "1.2.1" +"@uniswap/v3-periphery@^1.3.0": + "integrity" "sha512-HjHdI5RkjBl8zz3bqHShrbULFoZSrjbbrRHoO2vbzn+WRzTa6xY4PWphZv2Tlcb38YEKfKHp6NPl5hVedac8uw==" + "resolved" "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.3.0.tgz" + "version" "1.3.0" dependencies: "@openzeppelin/contracts" "3.4.1-solc-0.7-2" "@uniswap/lib" "^4.0.1-alpha" @@ -1542,6 +1700,11 @@ dependencies: "acorn" "^4.0.3" +"acorn-walk@^8.1.1": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" + "acorn@^4.0.3": "integrity" "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" "resolved" "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz" @@ -1557,6 +1720,16 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" "version" "6.4.2" +"acorn@^8.4.1": + "integrity" "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz" + "version" "8.6.0" + +"address@^1.0.1": + "integrity" "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "resolved" "https://registry.npmjs.org/address/-/address-1.1.2.tgz" + "version" "1.1.2" + "adm-zip@^0.4.16": "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" @@ -1626,7 +1799,7 @@ "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" "version" "3.2.3" -"ansi-escapes@^4.3.0": +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" "version" "4.3.2" @@ -1659,17 +1832,15 @@ "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" "version" "4.1.0" +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + "ansi-styles@^2.2.1": "version" "2.2.1" -"ansi-styles@^3.2.0": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^3.2.1": +"ansi-styles@^3.2.0", "ansi-styles@^3.2.1": "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" "version" "3.2.1" @@ -1704,11 +1875,24 @@ "normalize-path" "^3.0.0" "picomatch" "^2.0.4" -"aproba@^1.1.1": +"aproba@^1.0.3", "aproba@^1.1.1": "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" "version" "1.2.0" +"are-we-there-yet@~1.1.2": + "integrity" "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + "argparse@^1.0.7": "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" @@ -1757,6 +1941,11 @@ "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" "version" "1.1.1" +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + "array-uniq@^1.0.3": "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" @@ -2379,11 +2568,6 @@ "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz" "version" "9.0.1" -"bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2": - "integrity" "sha512-k55rLoPK7DNCwjO/+Esh5n3lNF+lKwzfIIak1alqxXhrXsInC69JJKwEjAyCB8+IehSFkObzxzzu9URR+Q4pyA==" - "resolved" "git+ssh://git@github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" - "version" "2.0.7" - "binary-extensions@^1.0.0": "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" @@ -2394,6 +2578,13 @@ "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" "version" "2.2.0" +"bindings@^1.4.0", "bindings@^1.5.0": + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" + "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "file-uri-to-path" "1.0.0" + "bip39@2.5.0": "version" "2.5.0" dependencies: @@ -2403,6 +2594,15 @@ "safe-buffer" "^5.0.1" "unorm" "^1.3.3" +"bl@^4.0.3", "bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + "blakejs@^1.1.0": "integrity" "sha1-ad+S75U6qIylGjLfarHFShVfx6U=" "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz" @@ -2514,11 +2714,6 @@ "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" "version" "1.1.0" -"browser-stdout@1.3.0": - "integrity" "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" - "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz" - "version" "1.3.0" - "browser-stdout@1.3.1": "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" @@ -2563,14 +2758,6 @@ "bn.js" "^5.0.0" "randombytes" "^2.0.1" -"browserify-sha3@^0.0.4": - "integrity" "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=" - "resolved" "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz" - "version" "0.0.4" - dependencies: - "js-sha3" "^0.6.1" - "safe-buffer" "^5.1.1" - "browserify-sign@^4.0.0": "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" @@ -2822,7 +3009,7 @@ "resolved" "https://registry.npmjs.org/chai-bn/-/chai-bn-0.2.1.tgz" "version" "0.2.1" -"chai@^4.0.0", "chai@^4.2.0", "chai@>= 2.1.2 < 5": +"chai@^4.0.0", "chai@^4.2.0", "chai@^4.3.4", "chai@>= 2.1.2 < 5": "integrity" "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==" "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" "version" "4.3.4" @@ -2870,6 +3057,22 @@ "escape-string-regexp" "^1.0.5" "supports-color" "^5.3.0" +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + "chalk@^4.1.2": "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -2878,6 +3081,11 @@ "ansi-styles" "^4.1.0" "supports-color" "^7.1.0" +"chalk@^5.0.0": + "integrity" "sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-5.0.0.tgz" + "version" "5.0.0" + "change-case@3.0.2": "integrity" "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==" "resolved" "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz" @@ -2902,6 +3110,11 @@ "upper-case" "^1.1.1" "upper-case-first" "^1.1.0" +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + "check-error@^1.0.2": "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" @@ -3041,6 +3254,23 @@ dependencies: "source-map" "~0.6.0" +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + "cliui@^2.1.0": "integrity" "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=" "resolved" "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz" @@ -3075,6 +3305,11 @@ dependencies: "mimic-response" "^1.0.0" +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + "clone@^2.0.0", "clone@2.1.2": "version" "2.1.2" @@ -3146,16 +3381,16 @@ "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" "version" "2.20.3" +"commander@^8.1.0": + "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + "version" "8.3.0" + "commander@~2.19.0": "integrity" "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz" "version" "2.19.0" -"commander@2.11.0": - "integrity" "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz" - "version" "2.11.0" - "commander@2.17.x": "integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz" @@ -3204,6 +3439,11 @@ "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" "version" "1.2.0" +"console-control-strings@^1.0.0", "console-control-strings@~1.1.0": + "integrity" "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + "consolidate@^0.15.1": "integrity" "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==" "resolved" "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz" @@ -3347,6 +3587,11 @@ "safe-buffer" "^5.0.1" "sha.js" "^2.4.8" +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + "cross-fetch@^2.1.0", "cross-fetch@^2.1.1": "version" "2.2.3" dependencies: @@ -3414,11 +3659,6 @@ "randombytes" "^2.0.0" "randomfill" "^1.0.3" -"crypto-js@^3.1.4": - "integrity" "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" - "resolved" "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz" - "version" "3.3.0" - "css-loader@*", "css-loader@^2.1.0": "integrity" "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==" "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz" @@ -3501,6 +3741,13 @@ dependencies: "ms" "2.0.0" +"debug@^2.6.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + "debug@^2.6.8": "version" "2.6.9" dependencies: @@ -3539,13 +3786,6 @@ dependencies: "ms" "2.0.0" -"debug@3.1.0": - "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "ms" "2.0.0" - "debug@3.2.6": "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" @@ -3570,6 +3810,13 @@ dependencies: "mimic-response" "^1.0.0" +"decompress-response@^4.2.0": + "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "mimic-response" "^2.0.0" + "deep-eql@^3.0.1": "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" @@ -3587,10 +3834,22 @@ "object-keys" "^1.1.1" "regexp.prototype.flags" "^1.2.0" +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + "deep-is@~0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" "defer-to-connect@^1.0.1": "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" @@ -3653,6 +3912,11 @@ "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" "version" "1.0.0" +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + "depd@~1.1.2": "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" @@ -3681,10 +3945,23 @@ "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" "version" "5.0.0" -"diff@3.3.1": - "integrity" "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" - "resolved" "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz" - "version" "3.3.1" +"detect-libc@^1.0.3": + "integrity" "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + "version" "1.0.3" + +"detect-port@^1.3.0": + "integrity" "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==" + "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "address" "^1.0.1" + "debug" "^2.6.0" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" "diff@3.5.0": "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" @@ -3700,6 +3977,13 @@ "miller-rabin" "^4.0.0" "randombytes" "^2.0.0" +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + "dom-converter@^0.2.0": "integrity" "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==" "resolved" "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" @@ -3824,6 +4108,11 @@ "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" "version" "7.0.3" +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + "emojis-list@^2.0.0": "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" @@ -3868,7 +4157,7 @@ dependencies: "iconv-lite" "^0.6.2" -"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0", "end-of-stream@^1.4.1": "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" "version" "1.4.4" @@ -4393,13 +4682,6 @@ "ethereumjs-common@^1.1.0", "ethereumjs-common@^1.3.2", "ethereumjs-common@^1.5.0", "ethereumjs-common@1.5.0": "version" "1.5.0" -"ethereumjs-testrpc-sc@6.1.6": - "integrity" "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==" - "resolved" "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz" - "version" "6.1.6" - dependencies: - "source-map-support" "^0.5.3" - "ethereumjs-testrpc@^6.0.3": "integrity" "sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA==" "resolved" "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz" @@ -4512,6 +4794,17 @@ "ethjs-util" "0.1.6" "rlp" "^2.2.4" +"ethereumjs-util@^7.1.3": + "integrity" "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz" + "version" "7.1.3" + 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" + "ethereumjs-vm@^2.1.0": "version" "2.6.0" dependencies: @@ -4604,10 +4897,10 @@ "uuid" "2.0.1" "xmlhttprequest" "1.8.0" -"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.13", "ethers@^5.0.2", "ethers@^5.1.0", "ethers@^5.4.7", "ethers@^5.5.1": - "integrity" "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz" - "version" "5.5.1" +"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.13", "ethers@^5.0.2", "ethers@^5.1.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2": + "integrity" "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz" + "version" "5.5.2" dependencies: "@ethersproject/abi" "5.5.0" "@ethersproject/abstract-provider" "5.5.1" @@ -4624,10 +4917,10 @@ "@ethersproject/json-wallets" "5.5.0" "@ethersproject/keccak256" "5.5.0" "@ethersproject/logger" "5.5.0" - "@ethersproject/networks" "5.5.0" + "@ethersproject/networks" "5.5.1" "@ethersproject/pbkdf2" "5.5.0" "@ethersproject/properties" "5.5.0" - "@ethersproject/providers" "5.5.0" + "@ethersproject/providers" "5.5.1" "@ethersproject/random" "5.5.0" "@ethersproject/rlp" "5.5.0" "@ethersproject/sha2" "5.5.0" @@ -4637,7 +4930,7 @@ "@ethersproject/transactions" "5.5.0" "@ethersproject/units" "5.5.0" "@ethersproject/wallet" "5.5.0" - "@ethersproject/web" "5.5.0" + "@ethersproject/web" "5.5.1" "@ethersproject/wordlists" "5.5.0" "ethjs-abi@^0.2.1": @@ -4683,7 +4976,7 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" "version" "4.0.4" -"events@^3.0.0", "events@^3.2.0": +"events@^3.0.0", "events@^3.2.0", "events@^3.3.0": "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" @@ -4740,6 +5033,11 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.1" +"expand-template@^2.0.3": + "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + "version" "2.0.3" + "express@^4.14.0": "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" @@ -4803,6 +5101,15 @@ "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" "version" "3.0.2" +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + "extglob@^2.0.4": "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" @@ -4844,6 +5151,17 @@ "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" "version" "3.1.3" +"fast-glob@^3.0.3": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" + 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" + "fast-json-stable-stringify@^2.0.0": "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -4854,6 +5172,13 @@ "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" + dependencies: + "reusify" "^1.0.4" + "fetch-ponyfill@^4.0.0": "version" "4.1.0" dependencies: @@ -4864,6 +5189,13 @@ "resolved" "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" "version" "3.5.2" +"figures@^3.0.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + "file-uri-to-path@1.0.0": "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" @@ -5078,6 +5410,11 @@ "inherits" "^2.0.1" "readable-stream" "^2.0.0" +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + "fs-extra@^0.30.0": "integrity" "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=" "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" @@ -5142,6 +5479,16 @@ "jsonfile" "^6.0.1" "universalify" "^2.0.0" +"fs-extra@^9.1.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + "fs-minipass@^1.2.5": "version" "1.2.7" dependencies: @@ -5169,6 +5516,19 @@ "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" "version" "1.0.0" +"fsevents@^1.2.7", "fsevents@~2.1.1": + "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "bindings" "^1.5.0" + "nan" "^2.12.1" + +"fsevents@~2.3.2": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + "function-bind@^1.1.1", "function-bind@~1.1.1": "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -5179,7 +5539,7 @@ "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" "version" "1.0.1" -"ganache-cli@^6.1.0": +"ganache-cli@^6.1.0", "ganache-cli@^6.12.2": "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" "version" "6.12.2" @@ -5225,6 +5585,20 @@ "ethereumjs-wallet" "0.6.5" "web3" "1.2.11" +"gauge@~2.7.3": + "integrity" "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" + "version" "2.7.4" + dependencies: + "aproba" "^1.0.3" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.0" + "object-assign" "^4.1.0" + "signal-exit" "^3.0.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wide-align" "^1.1.0" + "get-caller-file@^1.0.1": "integrity" "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" @@ -5295,6 +5669,19 @@ dependencies: "assert-plus" "^1.0.0" +"ghost-testrpc@^0.0.2": + "integrity" "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==" + "resolved" "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" + "version" "0.0.2" + dependencies: + "chalk" "^2.4.2" + "node-emoji" "^1.10.0" + +"github-from-package@0.0.0": + "integrity" "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + "version" "0.0.0" + "glob-parent@^3.1.0": "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" @@ -5303,7 +5690,7 @@ "is-glob" "^3.1.0" "path-dirname" "^1.0.0" -"glob-parent@~5.1.0", "glob-parent@~5.1.2": +"glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" "version" "5.1.2" @@ -5321,7 +5708,7 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" -"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": +"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" "version" "7.1.6" @@ -5343,18 +5730,6 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" -"glob@7.1.2": - "integrity" "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" - "version" "7.1.2" - 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" - "glob@7.1.3": "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" @@ -5367,6 +5742,22 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" +"global-modules@^2.0.0": + "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "global-prefix" "^3.0.0" + +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" + "global@~4.4.0": "integrity" "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==" "resolved" "https://registry.npmjs.org/global/-/global-4.4.0.tgz" @@ -5378,6 +5769,20 @@ "globals@^9.18.0": "version" "9.18.0" +"globby@^10.0.1": + "integrity" "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" + "version" "10.0.2" + dependencies: + "@types/glob" "^7.1.1" + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.0.3" + "glob" "^7.1.3" + "ignore" "^5.1.1" + "merge2" "^1.2.3" + "slash" "^3.0.0" + "got@^7.1.0": "integrity" "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==" "resolved" "https://registry.npmjs.org/got/-/got-7.1.0.tgz" @@ -5420,11 +5825,6 @@ "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" "version" "4.2.6" -"growl@1.10.3": - "integrity" "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" - "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz" - "version" "1.10.3" - "growl@1.10.5": "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" @@ -5460,10 +5860,10 @@ "resolved" "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.11.tgz" "version" "0.3.0-beta.11" -"hardhat-deploy@^0.9.4": - "integrity" "sha512-0Zr8R5SAq6oK/gi170yCDqPTvKNPHdlm6wQe3ZQg/uiIDZxofpRM2frQVPUFlgdI2yUXtVcGBiPcC2r2fEockw==" - "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.4.tgz" - "version" "0.9.4" +"hardhat-deploy@^0.9.14": + "integrity" "sha512-mCwXeXdqtrQN8dL1gOnoGUh0z9Jylfsh56UNVZJC0c8AhjlwjLPgGE3pzNmMuyy88pj9OX4qo53X57bW2W7NJQ==" + "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.14.tgz" + "version" "0.9.14" dependencies: "@ethersproject/abi" "^5.4.0" "@ethersproject/abstract-signer" "^5.4.1" @@ -5488,10 +5888,10 @@ "murmur-128" "^0.2.1" "qs" "^6.9.4" -"hardhat-docgen@^1.1.2": - "integrity" "sha512-gN1UyqA4kYDm/rSMRUACT6rsh7Nw5EsKItxxJxctfNFEin1Pb56C3uUftCuffT282829ofDxbrUcREcvL9+d+A==" - "resolved" "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.1.2.tgz" - "version" "1.1.2" +"hardhat-docgen@^1.2.0": + "integrity" "sha512-HfNxJN+AgmqflAzlSrG3NajrmoVwJRVjRUwvKAwDu8oSToQqj0n8/6P2oUH4y5/r1l4FgDhx2DClAhw4+oDqIA==" + "resolved" "https://registry.npmjs.org/hardhat-docgen/-/hardhat-docgen-1.2.0.tgz" + "version" "1.2.0" dependencies: "css-loader" "^2.1.0" "html-webpack-plugin" "^3.2.0" @@ -5508,10 +5908,10 @@ dependencies: "chokidar" "^3.4.3" -"hardhat@^2.0.0", "hardhat@^2.0.3", "hardhat@^2.0.4", "hardhat@^2.6.7": - "integrity" "sha512-Mua01f6ZN1feQLktHSH2p5A5LCdA+Wf7+O2lJDH6wClvWPtI2eqKNNY2gxBwYXoQ28GZrT3K6mqQOZeRWAca6Q==" - "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.6.7.tgz" - "version" "2.6.7" +"hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.3", "hardhat@^2.0.4", "hardhat@^2.7.0": + "integrity" "sha512-DqweY3KH5gwExoZ8EtsAfioj0Hk0NBXWXT3fMXWkiQNfyYBoZLrqdPNkbJ/E2LD4mZ+BKF7v/1chYR9ZCn2Z+g==" + "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.7.0.tgz" + "version" "2.7.0" dependencies: "@ethereumjs/block" "^3.4.0" "@ethereumjs/blockchain" "^5.4.0" @@ -5558,7 +5958,7 @@ "stacktrace-parser" "^0.1.10" "true-case-path" "^2.2.1" "tsort" "0.0.1" - "uuid" "^3.3.2" + "uuid" "^8.3.2" "ws" "^7.4.6" "has-ansi@^2.0.0": @@ -5615,6 +6015,11 @@ dependencies: "has-symbols" "^1.0.2" +"has-unicode@^2.0.0": + "integrity" "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + "has-value@^0.3.1": "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" @@ -5688,11 +6093,6 @@ "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" "version" "1.2.0" -"he@1.1.1": - "integrity" "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - "resolved" "https://registry.npmjs.org/he/-/he-1.1.1.tgz" - "version" "1.1.1" - "header-case@^1.0.0": "integrity" "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=" "resolved" "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz" @@ -5838,18 +6238,18 @@ "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" "version" "7.0.4" -"iconv-lite@^0.6.2": - "version" "0.6.2" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"iconv-lite@0.4.24": +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" "version" "0.4.24" dependencies: "safer-buffer" ">= 2.1.2 < 3" +"iconv-lite@^0.6.2": + "version" "0.6.2" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + "icss-replace-symbols@^1.1.0": "integrity" "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" "resolved" "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz" @@ -5879,6 +6279,11 @@ "resolved" "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" "version" "0.1.5" +"ignore@^5.1.1": + "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" + "version" "5.1.9" + "immediate@^3.2.3": "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" @@ -5932,6 +6337,31 @@ "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" "version" "2.0.3" +"ini@^1.3.5", "ini@~1.3.0": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"inquirer@^8.2.0": + "integrity" "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "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.2.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + "internal-slot@^1.0.3": "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" @@ -6135,6 +6565,11 @@ "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" "version" "2.0.0" +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + "is-function@^1.0.1": "integrity" "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" @@ -6166,6 +6601,11 @@ "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" "version" "1.0.0" +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + "is-lower-case@^1.1.0": "integrity" "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=" "resolved" "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz" @@ -6281,6 +6721,11 @@ "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" "version" "1.0.0" +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + "is-upper-case@^1.1.0": "integrity" "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=" "resolved" "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz" @@ -6352,26 +6797,6 @@ "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" "version" "0.1.2" -"istanbul@^0.4.5": - "integrity" "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=" - "resolved" "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz" - "version" "0.4.5" - dependencies: - "abbrev" "1.0.x" - "async" "1.x" - "escodegen" "1.8.x" - "esprima" "2.7.x" - "glob" "^5.0.15" - "handlebars" "^4.0.1" - "js-yaml" "3.x" - "mkdirp" "0.5.x" - "nopt" "3.x" - "once" "1.x" - "resolve" "1.1.x" - "supports-color" "^3.1.0" - "which" "^1.1.1" - "wordwrap" "^1.0.0" - "isurl@^1.0.0-alpha5": "integrity" "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==" "resolved" "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" @@ -6385,12 +6810,7 @@ "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" "version" "0.5.7" -"js-sha3@^0.6.1": - "integrity" "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz" - "version" "0.6.1" - -"js-sha3@^0.8.0": +"js-sha3@^0.8.0", "js-sha3@0.8.0": "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" "version" "0.8.0" @@ -6536,6 +6956,11 @@ "jsonify@~0.0.0": "version" "0.0.0" +"jsonschema@^1.2.4": + "integrity" "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==" + "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" + "version" "1.4.0" + "jsprim@^1.2.2": "integrity" "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=" "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" @@ -6554,14 +6979,6 @@ "node-addon-api" "^2.0.0" "node-gyp-build" "^4.2.0" -"keccakjs@^0.2.1": - "integrity" "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==" - "resolved" "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz" - "version" "0.2.3" - dependencies: - "browserify-sha3" "^0.0.4" - "sha3" "^1.2.2" - "keyv@^3.0.0": "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" @@ -6916,6 +7333,14 @@ "lodash@^4.17.4", "lodash@4.17.20": "version" "4.17.20" +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + "log-symbols@3.0.0": "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" @@ -7019,6 +7444,11 @@ "pify" "^4.0.1" "semver" "^5.6.0" +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + "map-age-cleaner@^0.1.1": "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" @@ -7145,6 +7575,11 @@ dependencies: "source-map" "^0.6.1" +"merge2@^1.2.3", "merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + "merkle-patricia-tree@^2.1.2", "merkle-patricia-tree@^2.3.2": "version" "2.3.2" dependencies: @@ -7213,6 +7648,14 @@ "braces" "^3.0.1" "picomatch" "^2.2.3" +"micromatch@^4.0.4": + "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.2.3" + "miller-rabin@^4.0.0": "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" @@ -7251,11 +7694,21 @@ "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" "version" "2.1.0" +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + "mimic-response@^1.0.0", "mimic-response@^1.0.1": "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" "version" "1.0.1" +"mimic-response@^2.0.0": + "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + "version" "2.1.0" + "min-document@^2.19.0": "integrity" "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=" "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" @@ -7285,16 +7738,11 @@ dependencies: "brace-expansion" "^1.1.7" -"minimist@^1.2.0", "minimist@^1.2.5", "minimist@~1.2.5": +"minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.5", "minimist@~1.2.5": "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" "version" "1.2.5" -"minimist@0.0.8": - "integrity" "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - "version" "0.0.8" - "minipass@^2.6.0", "minipass@^2.8.6", "minipass@^2.9.0": "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" @@ -7339,6 +7787,11 @@ "for-in" "^1.0.2" "is-extendable" "^1.0.1" +"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": + "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + "version" "0.5.3" + "mkdirp-promise@^5.0.1": "integrity" "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=" "resolved" "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" @@ -7353,12 +7806,10 @@ dependencies: "minimist" "^1.2.5" -"mkdirp@0.5.1": - "integrity" "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" - "version" "0.5.1" - dependencies: - "minimist" "0.0.8" +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" "mnemonist@^0.38.0": "integrity" "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==" @@ -7367,22 +7818,6 @@ dependencies: "obliterator" "^1.6.1" -"mocha@^4.1.0": - "integrity" "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "browser-stdout" "1.3.0" - "commander" "2.11.0" - "debug" "3.1.0" - "diff" "3.3.1" - "escape-string-regexp" "1.0.5" - "glob" "7.1.2" - "growl" "1.10.3" - "he" "1.1.1" - "mkdirp" "0.5.1" - "supports-color" "4.4.0" - "mocha@^7.1.2": "integrity" "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==" "resolved" "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" @@ -7494,11 +7929,21 @@ "fmix" "^0.1.0" "imul" "^1.0.0" -"nan@2.13.2": +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nan@^2.12.1": "integrity" "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" "resolved" "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz" "version" "2.13.2" +"nan@^2.14.0": + "integrity" "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" + "version" "2.14.2" + "nano-base32@^1.0.1": "integrity" "sha1-ulSMh578+5DaHE2eCX20pGySVe8=" "resolved" "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz" @@ -7526,6 +7971,11 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.1" +"napi-build-utils@^1.0.1": + "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + "version" "1.0.2" + "negotiator@0.6.2": "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" @@ -7553,11 +8003,35 @@ dependencies: "lower-case" "^1.1.1" +"node-abi@^2.18.0", "node-abi@^2.21.0", "node-abi@^2.7.0": + "integrity" "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==" + "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz" + "version" "2.26.0" + dependencies: + "semver" "^5.4.1" + "node-addon-api@^2.0.0": "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" "version" "2.0.2" +"node-addon-api@^3.0.2": + "integrity" "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz" + "version" "3.1.0" + +"node-addon-api@3.0.2": + "integrity" "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz" + "version" "3.0.2" + +"node-emoji@^1.10.0": + "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" + "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + "version" "1.11.0" + dependencies: + "lodash" "^4.17.21" + "node-environment-flags@1.0.6": "integrity" "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==" "resolved" "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" @@ -7585,6 +8059,25 @@ "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz" "version" "4.2.3" +"node-hid@1.3.0": + "integrity" "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==" + "resolved" "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "bindings" "^1.5.0" + "nan" "^2.14.0" + "node-abi" "^2.18.0" + "prebuild-install" "^5.3.4" + +"node-hid@2.1.1": + "integrity" "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==" + "resolved" "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "bindings" "^1.5.0" + "node-addon-api" "^3.0.2" + "prebuild-install" "^6.0.0" + "node-libs-browser@^2.0.0", "node-libs-browser@^2.2.1": "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" @@ -7619,6 +8112,11 @@ "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" "version" "1.0.4" +"noop-logger@^0.1.1": + "integrity" "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + "resolved" "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" + "version" "0.1.1" + "nopt@3.x": "integrity" "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=" "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" @@ -7660,6 +8158,16 @@ dependencies: "path-key" "^2.0.0" +"npmlog@^4.0.1": + "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" + "nth-check@^2.0.0": "integrity" "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==" "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz" @@ -7806,6 +8314,13 @@ dependencies: "wrappy" "1" +"onetime@^5.1.0": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + "open@^7.4.2": "integrity" "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==" "resolved" "https://registry.npmjs.org/open/-/open-7.4.2.tgz" @@ -7826,6 +8341,21 @@ "type-check" "~0.3.2" "word-wrap" "~1.2.3" +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "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" + "os-browserify@^0.3.0": "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" @@ -8132,6 +8662,11 @@ dependencies: "pify" "^2.0.0" +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + "pathval@^1.1.1": "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" @@ -8148,11 +8683,6 @@ "safe-buffer" "^5.0.1" "sha.js" "^2.4.8" -"pegjs@^0.10.0": - "integrity" "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" - "resolved" "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz" - "version" "0.10.0" - "performance-now@^2.1.0": "integrity" "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" @@ -8259,6 +8789,47 @@ "resolved" "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz" "version" "2.1.0" +"prebuild-install@^5.3.3", "prebuild-install@^5.3.4": + "integrity" "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==" + "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" + "version" "5.3.6" + dependencies: + "detect-libc" "^1.0.3" + "expand-template" "^2.0.3" + "github-from-package" "0.0.0" + "minimist" "^1.2.3" + "mkdirp-classic" "^0.5.3" + "napi-build-utils" "^1.0.1" + "node-abi" "^2.7.0" + "noop-logger" "^0.1.1" + "npmlog" "^4.0.1" + "pump" "^3.0.0" + "rc" "^1.2.7" + "simple-get" "^3.0.3" + "tar-fs" "^2.0.0" + "tunnel-agent" "^0.6.0" + "which-pm-runs" "^1.0.0" + +"prebuild-install@^6.0.0": + "integrity" "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==" + "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz" + "version" "6.1.2" + dependencies: + "detect-libc" "^1.0.3" + "expand-template" "^2.0.3" + "github-from-package" "0.0.0" + "minimist" "^1.2.3" + "mkdirp-classic" "^0.5.3" + "napi-build-utils" "^1.0.1" + "node-abi" "^2.21.0" + "noop-logger" "^0.1.1" + "npmlog" "^4.0.1" + "pump" "^3.0.0" + "rc" "^1.2.7" + "simple-get" "^3.0.3" + "tar-fs" "^2.0.0" + "tunnel-agent" "^0.6.0" + "precond@0.2": "version" "0.2.3" @@ -8482,6 +9053,11 @@ "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" "version" "0.2.0" +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + "randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.0.6", "randombytes@^2.1.0": "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -8522,6 +9098,16 @@ "iconv-lite" "0.4.24" "unpipe" "1.0.0" +"rc@^1.2.7": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + "read-pkg-up@^1.0.1": "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" @@ -8564,7 +9150,7 @@ "isarray" "0.0.1" "string_decoder" "~0.10.x" -"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.2.8", "readable-stream@^2.2.9", "readable-stream@^2.3.3", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@1 || 2": +"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.0.6", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.2.8", "readable-stream@^2.2.9", "readable-stream@^2.3.3", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@1 || 2": "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" "version" "2.3.7" @@ -8593,6 +9179,15 @@ "string_decoder" "^1.1.1" "util-deprecate" "^1.0.1" +"readable-stream@^3.1.1": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + "readable-stream@^3.4.0": "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" @@ -8649,6 +9244,13 @@ dependencies: "resolve" "^1.1.6" +"recursive-readdir@^2.2.2": + "integrity" "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==" + "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "minimatch" "3.0.4" + "regenerate@^1.2.1": "version" "1.4.2" @@ -8732,20 +9334,6 @@ dependencies: "is-finite" "^1.0.0" -"req-cwd@^1.0.1": - "integrity" "sha1-DXOurpJm5penj3l2AZZ352rPD/8=" - "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "req-from" "^1.0.1" - -"req-from@^1.0.1": - "integrity" "sha1-v4HaUUeUfTLRO5R9wSpYrUWHNQ4=" - "resolved" "https://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "resolve-from" "^2.0.0" - "request@^2.79.0", "request@^2.85.0": "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" @@ -8797,11 +9385,6 @@ "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" "version" "2.0.0" -"resolve-from@^2.0.0": - "integrity" "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz" - "version" "2.0.0" - "resolve-url@^0.2.1": "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" @@ -8831,6 +9414,14 @@ dependencies: "lowercase-keys" "^1.0.0" +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "resumer@~0.0.0": "version" "0.0.0" dependencies: @@ -8841,6 +9432,11 @@ "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" "version" "0.1.15" +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + "right-align@^0.1.1": "integrity" "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=" "resolved" "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz" @@ -8875,6 +9471,18 @@ dependencies: "bn.js" "^4.11.1" +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + "run-queue@^1.0.0", "run-queue@^1.0.3": "integrity" "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=" "resolved" "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" @@ -8887,6 +9495,13 @@ "resolved" "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" "version" "0.2.0" +"rxjs@^7.2.0": + "integrity" "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz" + "version" "7.4.0" + dependencies: + "tslib" "~2.1.0" + "rxjs@6": "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" @@ -8931,6 +9546,26 @@ "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" "version" "2.1.2" +"sc-istanbul@^0.4.5": + "integrity" "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==" + "resolved" "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" + "version" "0.4.6" + dependencies: + "abbrev" "1.0.x" + "async" "1.x" + "escodegen" "1.8.x" + "esprima" "2.7.x" + "glob" "^5.0.15" + "handlebars" "^4.0.1" + "js-yaml" "3.x" + "mkdirp" "0.5.x" + "nopt" "3.x" + "once" "1.x" + "resolve" "1.1.x" + "supports-color" "^3.1.0" + "which" "^1.1.1" + "wordwrap" "^1.0.0" + "schema-utils@^1.0.0": "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" @@ -8980,6 +9615,11 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" "version" "5.7.1" +"semver@^5.4.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + "semver@^5.5.0", "semver@^5.6.0": "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" @@ -9072,7 +9712,7 @@ "request" "^2.79.0" "xhr" "^2.3.3" -"set-blocking@^2.0.0": +"set-blocking@^2.0.0", "set-blocking@~2.0.0": "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" "version" "2.0.0" @@ -9113,13 +9753,6 @@ "inherits" "^2.0.1" "safe-buffer" "^5.0.1" -"sha3@^1.2.2": - "integrity" "sha512-KgLGmJGrmNB4JWVsAV11Yk6KbvsAiygWJc7t5IebWva/0NukNrjJqhtKhzy3Eiv2AKuGvhZZt7dt1mDo7HkoiQ==" - "resolved" "https://registry.npmjs.org/sha3/-/sha3-1.2.6.tgz" - "version" "1.2.6" - dependencies: - "nan" "2.13.2" - "sha3@^2.1.1": "integrity" "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==" "resolved" "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz" @@ -9139,10 +9772,10 @@ "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" "version" "1.0.0" -"shelljs@^0.7.4": - "integrity" "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz" - "version" "0.7.8" +"shelljs@^0.8.3": + "integrity" "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz" + "version" "0.8.4" dependencies: "glob" "^7.0.0" "interpret" "^1.0.0" @@ -9157,7 +9790,7 @@ "get-intrinsic" "^1.0.2" "object-inspect" "^1.9.0" -"signal-exit@^3.0.0": +"signal-exit@^3.0.0", "signal-exit@^3.0.2": "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" "version" "3.0.3" @@ -9176,6 +9809,15 @@ "once" "^1.3.1" "simple-concat" "^1.0.0" +"simple-get@^3.0.3": + "integrity" "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "decompress-response" "^4.2.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + "slash@^1.0.0": "version" "1.0.0" @@ -9226,11 +9868,6 @@ "source-map-resolve" "^0.5.0" "use" "^3.1.0" -"sol-explore@^1.6.2": - "integrity" "sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI=" - "resolved" "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz" - "version" "1.6.2" - "solc@^0.4.20": "integrity" "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==" "resolved" "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz" @@ -9256,13 +9893,13 @@ "semver" "^5.5.0" "tmp" "0.0.33" -"solc@^0.7.0": - "integrity" "sha512-WsR/W7CXwh2VnmZapB4JrsDeLlshoKBz5Pz/zYNulB6LBsOEHI2Zj/GeKLMFcvv57OHiXHvxq5ZOQB+EdqxlxQ==" - "resolved" "https://registry.npmjs.org/solc/-/solc-0.7.6.tgz" - "version" "0.7.6" +"solc@^0.8.10": + "integrity" "sha512-I/Mcn6J5bEtJqveNLplQm9IRrhemm6v+qkw5S2+wM4x9HItJ1sYdrqVTN3j4DMhFDM3ZbvM0QywVzpPx666PHw==" + "resolved" "https://registry.npmjs.org/solc/-/solc-0.8.10.tgz" + "version" "0.8.10" dependencies: "command-exists" "^1.2.8" - "commander" "3.0.2" + "commander" "^8.1.0" "follow-redirects" "^1.12.1" "fs-extra" "^0.30.0" "js-sha3" "0.8.0" @@ -9286,30 +9923,30 @@ "semver" "^5.5.0" "tmp" "0.0.33" -"solidity-coverage@0.5.11": - "integrity" "sha512-qikdsSi6+9XbfvwA0aI7HUVpF9fIFNqRWTw23M89GMDY+b6Gj0wWU9IngJS0fimoZIAdEp3bfChxvpfVcrUesg==" - "resolved" "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.5.11.tgz" - "version" "0.5.11" +"solidity-coverage@0.7.17": + "integrity" "sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg==" + "resolved" "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.17.tgz" + "version" "0.7.17" dependencies: + "@solidity-parser/parser" "^0.13.2" + "@truffle/provider" "^0.2.24" + "chalk" "^2.4.2" "death" "^1.1.0" - "ethereumjs-testrpc-sc" "6.1.6" - "istanbul" "^0.4.5" - "keccakjs" "^0.2.1" - "req-cwd" "^1.0.1" - "shelljs" "^0.7.4" - "sol-explore" "^1.6.2" - "solidity-parser-sc" "0.4.11" - "tree-kill" "^1.2.0" - "web3" "^0.18.4" - -"solidity-parser-sc@0.4.11": - "integrity" "sha512-1kV5iC7m3CtMDfmHaVNwz2saSGQVIuF16rIxU417Al38MVCWHMQQ5vT6cmLsNwDe60S74auobWij9vNawSeOyw==" - "resolved" "https://registry.npmjs.org/solidity-parser-sc/-/solidity-parser-sc-0.4.11.tgz" - "version" "0.4.11" - dependencies: - "mocha" "^4.1.0" - "pegjs" "^0.10.0" - "yargs" "^4.6.0" + "detect-port" "^1.3.0" + "fs-extra" "^8.1.0" + "ganache-cli" "^6.12.2" + "ghost-testrpc" "^0.0.2" + "global-modules" "^2.0.0" + "globby" "^10.0.1" + "jsonschema" "^1.2.4" + "lodash" "^4.17.15" + "node-emoji" "^1.10.0" + "pify" "^4.0.1" + "recursive-readdir" "^2.2.2" + "sc-istanbul" "^0.4.5" + "semver" "^7.3.4" + "shelljs" "^0.8.3" + "web3-utils" "^1.3.0" "source-list-map@^2.0.0": "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" @@ -9332,7 +9969,7 @@ dependencies: "source-map" "^0.5.6" -"source-map-support@^0.5.13", "source-map-support@^0.5.3", "source-map-support@~0.5.12": +"source-map-support@^0.5.13", "source-map-support@~0.5.12": "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" "version" "0.5.19" @@ -9527,6 +10164,15 @@ "is-fullwidth-code-point" "^2.0.0" "strip-ansi" "^5.1.0" +"string-width@^4.1.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + "string.prototype.trim@~1.2.1": "version" "1.2.3" dependencies: @@ -9583,6 +10229,13 @@ dependencies: "ansi-regex" "^4.1.0" +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + "strip-bom@^2.0.0": "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" @@ -9612,7 +10265,7 @@ "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" "version" "2.0.0" -"strip-json-comments@2.0.1": +"strip-json-comments@~2.0.1", "strip-json-comments@2.0.1": "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" "version" "2.0.1" @@ -9660,13 +10313,6 @@ dependencies: "has-flag" "^4.0.0" -"supports-color@4.4.0": - "integrity" "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" - "version" "4.4.0" - dependencies: - "has-flag" "^2.0.0" - "supports-color@6.0.0": "integrity" "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" @@ -9728,6 +10374,27 @@ "string.prototype.trim" "~1.2.1" "through" "~2.3.8" +"tar-fs@^2.0.0": + "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" + "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "chownr" "^1.1.1" + "mkdirp-classic" "^0.5.2" + "pump" "^3.0.0" + "tar-stream" "^2.1.4" + +"tar-stream@^2.1.4": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + "tar@^4.0.2": "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" @@ -9778,6 +10445,11 @@ "resolved" "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz" "version" "0.0.1" +"through@^2.3.6": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + "through@~2.3.4", "through@~2.3.8": "version" "2.3.8" @@ -9890,11 +10562,6 @@ "psl" "^1.1.28" "punycode" "^2.1.1" -"tree-kill@^1.2.0": - "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - "version" "1.2.2" - "trim-right@^1.0.1": "version" "1.0.1" @@ -9913,6 +10580,11 @@ "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz" "version" "6.0.7" +"ts-essentials@^7.0.1": + "integrity" "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==" + "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + "version" "7.0.3" + "ts-generator@^0.1.1": "integrity" "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==" "resolved" "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" @@ -9928,6 +10600,24 @@ "resolve" "^1.8.1" "ts-essentials" "^1.0.0" +"ts-node@^10.4.0": + "integrity" "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz" + "version" "10.4.0" + dependencies: + "@cspotcode/source-map-support" "0.7.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" + "yn" "3.1.1" + "tslib@^1.9.0", "tslib@^1.9.3": "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" @@ -9938,6 +10628,11 @@ "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" "version" "2.3.1" +"tslib@~2.1.0": + "integrity" "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" + "version" "2.1.0" + "tsort@0.0.1": "integrity" "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=" "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" @@ -10031,6 +10726,22 @@ "ts-essentials" "^6.0.3" "ts-generator" "^0.1.1" +"typechain@^6.0.0", "typechain@^6.0.4", "typechain@^6.0.5": + "integrity" "sha512-Kr2rATu2Y7Y0wOC/I0zKuyLU8EEUpnuPGkiloZ65ACm4sSLFVF8Tnxn8LEUJSN93dX3RMu2DLF5fwRBOjNB+Gw==" + "resolved" "https://registry.npmjs.org/typechain/-/typechain-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "@types/prettier" "^2.1.1" + "command-line-args" "^4.0.7" + "debug" "^4.1.1" + "fs-extra" "^7.0.0" + "glob" "^7.1.6" + "js-sha3" "^0.8.0" + "lodash" "^4.17.15" + "mkdirp" "^1.0.4" + "prettier" "^2.1.2" + "ts-essentials" "^7.0.1" + "typedarray-to-buffer@^3.1.5": "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" @@ -10043,10 +10754,10 @@ "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" -"typescript@^4.3.4", "typescript@>=3.7.0": - "integrity" "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" - "version" "4.3.5" +"typescript@^4.3.4", "typescript@^4.5.2", "typescript@>=2.7", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0": + "integrity" "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz" + "version" "4.5.2" "typewise-core@^1.2", "typewise-core@^1.2.0": "version" "1.2.0" @@ -10230,6 +10941,15 @@ "punycode" "1.3.2" "querystring" "0.2.0" +"usb@^1.6.3": + "integrity" "sha512-HTCfx6NnNRhv5y98t04Y8j2+A8dmQnEGxCMY2/zN/0gkiioLYfTZ5w/PEKlWRVUY+3qLe9xwRv9pHLkjQYNw/g==" + "resolved" "https://registry.npmjs.org/usb/-/usb-1.7.1.tgz" + "version" "1.7.1" + dependencies: + "bindings" "^1.4.0" + "node-addon-api" "3.0.2" + "prebuild-install" "^5.3.3" + "use@^3.1.0": "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" @@ -10242,11 +10962,6 @@ dependencies: "node-gyp-build" "^4.2.0" -"utf8@^2.1.1": - "integrity" "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" - "resolved" "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz" - "version" "2.1.2" - "utf8@^3.0.0", "utf8@3.0.0": "integrity" "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" "resolved" "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" @@ -10326,6 +11041,11 @@ "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" "version" "3.4.0" +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + "uuid@2.0.1": "integrity" "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" @@ -10433,6 +11153,13 @@ "chokidar" "^3.4.1" "watchpack-chokidar2" "^2.0.1" +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + "web3-bzz@1.2.11": "version" "1.2.11" dependencies: @@ -10450,10 +11177,10 @@ "got" "9.6.0" "swarm-js" "^0.1.40" -"web3-bzz@1.6.0": - "integrity" "sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ==" - "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.0.tgz" - "version" "1.6.0" +"web3-bzz@1.6.1": + "integrity" "sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng==" + "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/node" "^12.12.6" "got" "9.6.0" @@ -10474,13 +11201,13 @@ "web3-eth-iban" "1.5.3" "web3-utils" "1.5.3" -"web3-core-helpers@1.6.0": - "integrity" "sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg==" - "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz" - "version" "1.6.0" +"web3-core-helpers@1.6.1": + "integrity" "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==" + "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz" + "version" "1.6.1" dependencies: - "web3-eth-iban" "1.6.0" - "web3-utils" "1.6.0" + "web3-eth-iban" "1.6.1" + "web3-utils" "1.6.1" "web3-core-method@1.2.11": "version" "1.2.11" @@ -10504,17 +11231,16 @@ "web3-core-subscriptions" "1.5.3" "web3-utils" "1.5.3" -"web3-core-method@1.6.0": - "integrity" "sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g==" - "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.0.tgz" - "version" "1.6.0" +"web3-core-method@1.6.1": + "integrity" "sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w==" + "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.1.tgz" + "version" "1.6.1" dependencies: - "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - "web3-core-helpers" "1.6.0" - "web3-core-promievent" "1.6.0" - "web3-core-subscriptions" "1.6.0" - "web3-utils" "1.6.0" + "web3-core-helpers" "1.6.1" + "web3-core-promievent" "1.6.1" + "web3-core-subscriptions" "1.6.1" + "web3-utils" "1.6.1" "web3-core-promievent@1.2.11": "version" "1.2.11" @@ -10528,10 +11254,10 @@ dependencies: "eventemitter3" "4.0.4" -"web3-core-promievent@1.6.0": - "integrity" "sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ==" - "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz" - "version" "1.6.0" +"web3-core-promievent@1.6.1": + "integrity" "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==" + "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz" + "version" "1.6.1" dependencies: "eventemitter3" "4.0.4" @@ -10555,16 +11281,16 @@ "web3-providers-ipc" "1.5.3" "web3-providers-ws" "1.5.3" -"web3-core-requestmanager@1.6.0": - "integrity" "sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA==" - "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz" - "version" "1.6.0" +"web3-core-requestmanager@1.6.1": + "integrity" "sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A==" + "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz" + "version" "1.6.1" dependencies: "util" "^0.12.0" - "web3-core-helpers" "1.6.0" - "web3-providers-http" "1.6.0" - "web3-providers-ipc" "1.6.0" - "web3-providers-ws" "1.6.0" + "web3-core-helpers" "1.6.1" + "web3-providers-http" "1.6.1" + "web3-providers-ipc" "1.6.1" + "web3-providers-ws" "1.6.1" "web3-core-subscriptions@1.2.11": "version" "1.2.11" @@ -10581,13 +11307,13 @@ "eventemitter3" "4.0.4" "web3-core-helpers" "1.5.3" -"web3-core-subscriptions@1.6.0": - "integrity" "sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ==" - "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz" - "version" "1.6.0" +"web3-core-subscriptions@1.6.1": + "integrity" "sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g==" + "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz" + "version" "1.6.1" dependencies: "eventemitter3" "4.0.4" - "web3-core-helpers" "1.6.0" + "web3-core-helpers" "1.6.1" "web3-core@1.2.11": "version" "1.2.11" @@ -10613,18 +11339,18 @@ "web3-core-requestmanager" "1.5.3" "web3-utils" "1.5.3" -"web3-core@1.6.0": - "integrity" "sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g==" - "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.6.0.tgz" - "version" "1.6.0" +"web3-core@1.6.1": + "integrity" "sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ==" + "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" "bignumber.js" "^9.0.0" - "web3-core-helpers" "1.6.0" - "web3-core-method" "1.6.0" - "web3-core-requestmanager" "1.6.0" - "web3-utils" "1.6.0" + "web3-core-helpers" "1.6.1" + "web3-core-method" "1.6.1" + "web3-core-requestmanager" "1.6.1" + "web3-utils" "1.6.1" "web3-eth-abi@1.2.11": "version" "1.2.11" @@ -10641,13 +11367,13 @@ "@ethersproject/abi" "5.0.7" "web3-utils" "1.5.3" -"web3-eth-abi@1.6.0": - "integrity" "sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA==" - "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-abi@1.6.1": + "integrity" "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==" + "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz" + "version" "1.6.1" dependencies: "@ethersproject/abi" "5.0.7" - "web3-utils" "1.6.0" + "web3-utils" "1.6.1" "web3-eth-accounts@1.2.11": "version" "1.2.11" @@ -10681,22 +11407,22 @@ "web3-core-method" "1.5.3" "web3-utils" "1.5.3" -"web3-eth-accounts@1.6.0": - "integrity" "sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw==" - "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-accounts@1.6.1": + "integrity" "sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w==" + "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz" + "version" "1.6.1" 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.6.0" - "web3-core-helpers" "1.6.0" - "web3-core-method" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-helpers" "1.6.1" + "web3-core-method" "1.6.1" + "web3-utils" "1.6.1" "web3-eth-contract@1.2.11": "version" "1.2.11" @@ -10725,19 +11451,19 @@ "web3-eth-abi" "1.5.3" "web3-utils" "1.5.3" -"web3-eth-contract@1.6.0": - "integrity" "sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw==" - "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-contract@1.6.1": + "integrity" "sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ==" + "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/bn.js" "^4.11.5" - "web3-core" "1.6.0" - "web3-core-helpers" "1.6.0" - "web3-core-method" "1.6.0" - "web3-core-promievent" "1.6.0" - "web3-core-subscriptions" "1.6.0" - "web3-eth-abi" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-helpers" "1.6.1" + "web3-core-method" "1.6.1" + "web3-core-promievent" "1.6.1" + "web3-core-subscriptions" "1.6.1" + "web3-eth-abi" "1.6.1" + "web3-utils" "1.6.1" "web3-eth-ens@1.2.11": "version" "1.2.11" @@ -10766,19 +11492,19 @@ "web3-eth-contract" "1.5.3" "web3-utils" "1.5.3" -"web3-eth-ens@1.6.0": - "integrity" "sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA==" - "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-ens@1.6.1": + "integrity" "sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ==" + "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz" + "version" "1.6.1" dependencies: "content-hash" "^2.5.2" "eth-ens-namehash" "2.0.8" - "web3-core" "1.6.0" - "web3-core-helpers" "1.6.0" - "web3-core-promievent" "1.6.0" - "web3-eth-abi" "1.6.0" - "web3-eth-contract" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-helpers" "1.6.1" + "web3-core-promievent" "1.6.1" + "web3-eth-abi" "1.6.1" + "web3-eth-contract" "1.6.1" + "web3-utils" "1.6.1" "web3-eth-iban@1.2.11": "version" "1.2.11" @@ -10794,13 +11520,13 @@ "bn.js" "^4.11.9" "web3-utils" "1.5.3" -"web3-eth-iban@1.6.0": - "integrity" "sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw==" - "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-iban@1.6.1": + "integrity" "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==" + "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz" + "version" "1.6.1" dependencies: "bn.js" "^4.11.9" - "web3-utils" "1.6.0" + "web3-utils" "1.6.1" "web3-eth-personal@1.2.11": "version" "1.2.11" @@ -10824,17 +11550,17 @@ "web3-net" "1.5.3" "web3-utils" "1.5.3" -"web3-eth-personal@1.6.0": - "integrity" "sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ==" - "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz" - "version" "1.6.0" +"web3-eth-personal@1.6.1": + "integrity" "sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw==" + "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/node" "^12.12.6" - "web3-core" "1.6.0" - "web3-core-helpers" "1.6.0" - "web3-core-method" "1.6.0" - "web3-net" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-helpers" "1.6.1" + "web3-core-method" "1.6.1" + "web3-net" "1.6.1" + "web3-utils" "1.6.1" "web3-eth@1.2.11": "version" "1.2.11" @@ -10871,23 +11597,23 @@ "web3-net" "1.5.3" "web3-utils" "1.5.3" -"web3-eth@1.6.0": - "integrity" "sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w==" - "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.0.tgz" - "version" "1.6.0" +"web3-eth@1.6.1": + "integrity" "sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ==" + "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.1.tgz" + "version" "1.6.1" dependencies: - "web3-core" "1.6.0" - "web3-core-helpers" "1.6.0" - "web3-core-method" "1.6.0" - "web3-core-subscriptions" "1.6.0" - "web3-eth-abi" "1.6.0" - "web3-eth-accounts" "1.6.0" - "web3-eth-contract" "1.6.0" - "web3-eth-ens" "1.6.0" - "web3-eth-iban" "1.6.0" - "web3-eth-personal" "1.6.0" - "web3-net" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-helpers" "1.6.1" + "web3-core-method" "1.6.1" + "web3-core-subscriptions" "1.6.1" + "web3-eth-abi" "1.6.1" + "web3-eth-accounts" "1.6.1" + "web3-eth-contract" "1.6.1" + "web3-eth-ens" "1.6.1" + "web3-eth-iban" "1.6.1" + "web3-eth-personal" "1.6.1" + "web3-net" "1.6.1" + "web3-utils" "1.6.1" "web3-net@1.2.11": "version" "1.2.11" @@ -10905,14 +11631,14 @@ "web3-core-method" "1.5.3" "web3-utils" "1.5.3" -"web3-net@1.6.0": - "integrity" "sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q==" - "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.6.0.tgz" - "version" "1.6.0" +"web3-net@1.6.1": + "integrity" "sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw==" + "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.6.1.tgz" + "version" "1.6.1" dependencies: - "web3-core" "1.6.0" - "web3-core-method" "1.6.0" - "web3-utils" "1.6.0" + "web3-core" "1.6.1" + "web3-core-method" "1.6.1" + "web3-utils" "1.6.1" "web3-provider-engine@14.2.1": "version" "14.2.1" @@ -10952,12 +11678,12 @@ "web3-core-helpers" "1.5.3" "xhr2-cookies" "1.1.0" -"web3-providers-http@1.6.0": - "integrity" "sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA==" - "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.0.tgz" - "version" "1.6.0" +"web3-providers-http@1.6.1": + "integrity" "sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A==" + "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.1.tgz" + "version" "1.6.1" dependencies: - "web3-core-helpers" "1.6.0" + "web3-core-helpers" "1.6.1" "xhr2-cookies" "1.1.0" "web3-providers-ipc@1.2.11": @@ -10975,13 +11701,13 @@ "oboe" "2.1.5" "web3-core-helpers" "1.5.3" -"web3-providers-ipc@1.6.0": - "integrity" "sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA==" - "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz" - "version" "1.6.0" +"web3-providers-ipc@1.6.1": + "integrity" "sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ==" + "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz" + "version" "1.6.1" dependencies: "oboe" "2.1.5" - "web3-core-helpers" "1.6.0" + "web3-core-helpers" "1.6.1" "web3-providers-ws@1.2.11": "version" "1.2.11" @@ -11000,13 +11726,13 @@ "web3-core-helpers" "1.5.3" "websocket" "^1.0.32" -"web3-providers-ws@1.6.0": - "integrity" "sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA==" - "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz" - "version" "1.6.0" +"web3-providers-ws@1.6.1": + "integrity" "sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg==" + "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz" + "version" "1.6.1" dependencies: "eventemitter3" "4.0.4" - "web3-core-helpers" "1.6.0" + "web3-core-helpers" "1.6.1" "websocket" "^1.0.32" "web3-shh@1.2.11": @@ -11027,20 +11753,20 @@ "web3-core-subscriptions" "1.5.3" "web3-net" "1.5.3" -"web3-shh@1.6.0": - "integrity" "sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ==" - "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.0.tgz" - "version" "1.6.0" +"web3-shh@1.6.1": + "integrity" "sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A==" + "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.1.tgz" + "version" "1.6.1" dependencies: - "web3-core" "1.6.0" - "web3-core-method" "1.6.0" - "web3-core-subscriptions" "1.6.0" - "web3-net" "1.6.0" + "web3-core" "1.6.1" + "web3-core-method" "1.6.1" + "web3-core-subscriptions" "1.6.1" + "web3-net" "1.6.1" -"web3-utils@^1.0.0-beta.31", "web3-utils@^1.2.5", "web3-utils@1.6.0": - "integrity" "sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg==" - "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.0.tgz" - "version" "1.6.0" +"web3-utils@^1.0.0-beta.31", "web3-utils@^1.2.5", "web3-utils@^1.3.0", "web3-utils@1.6.1": + "integrity" "sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.1.tgz" + "version" "1.6.1" dependencies: "bn.js" "^4.11.9" "ethereum-bloom-filters" "^1.0.6" @@ -11075,29 +11801,18 @@ "randombytes" "^2.1.0" "utf8" "3.0.0" -"web3@^0.18.4": - "integrity" "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=" - "resolved" "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz" - "version" "0.18.4" +"web3@^1.0.0-beta.36", "web3@^1.2.5", "web3@^1.6.1": + "integrity" "sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.6.1.tgz" + "version" "1.6.1" dependencies: - "bignumber.js" "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" - "crypto-js" "^3.1.4" - "utf8" "^2.1.1" - "xhr2" "*" - "xmlhttprequest" "*" - -"web3@^1.0.0-beta.36", "web3@^1.2.5", "web3@^1.5.2": - "integrity" "sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "web3-bzz" "1.6.0" - "web3-core" "1.6.0" - "web3-eth" "1.6.0" - "web3-eth-personal" "1.6.0" - "web3-net" "1.6.0" - "web3-shh" "1.6.0" - "web3-utils" "1.6.0" + "web3-bzz" "1.6.1" + "web3-core" "1.6.1" + "web3-eth" "1.6.1" + "web3-eth-personal" "1.6.1" + "web3-net" "1.6.1" + "web3-shh" "1.6.1" + "web3-utils" "1.6.1" "web3@1.2.11": "version" "1.2.11" @@ -11234,6 +11949,11 @@ "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" "version" "2.0.0" +"which-pm-runs@^1.0.0": + "integrity" "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz" + "version" "1.0.0" + "which-typed-array@^1.1.2": "integrity" "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==" "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz" @@ -11246,14 +11966,14 @@ "has-tostringtag" "^1.0.0" "is-typed-array" "^1.1.7" -"which@^1.1.1", "which@^1.2.9", "which@1.3.1": +"which@^1.1.1", "which@^1.2.9", "which@^1.3.1", "which@1.3.1": "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" "version" "1.3.1" dependencies: "isexe" "^2.0.0" -"wide-align@1.1.3": +"wide-align@^1.1.0", "wide-align@1.1.3": "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" "version" "1.1.3" @@ -11370,12 +12090,7 @@ dependencies: "cookiejar" "^2.1.1" -"xhr2@*": - "integrity" "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" - "resolved" "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz" - "version" "0.2.1" - -"xmlhttprequest@*", "xmlhttprequest@1.8.0": +"xmlhttprequest@1.8.0": "integrity" "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" "version" "1.8.0" @@ -11476,26 +12191,6 @@ "y18n" "^4.0.0" "yargs-parser" "^13.1.2" -"yargs@^4.6.0": - "integrity" "sha1-wMQpJMpKqmsObaFznfshZDn53cA=" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz" - "version" "4.8.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" - "require-directory" "^2.1.1" - "require-main-filename" "^1.0.1" - "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" - "yargs@^4.7.1": "integrity" "sha1-wMQpJMpKqmsObaFznfshZDn53cA=" "resolved" "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz" @@ -11561,3 +12256,8 @@ "which-module" "^2.0.0" "y18n" "^4.0.0" "yargs-parser" "^13.1.0" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1"