From 4d286b0130b1629843267379ab3925c70d10f701 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 13:40:41 +0200 Subject: [PATCH 01/31] Update formatting config --- .eslintignore | 6 + .eslintrc.json => .eslintrc | 8 +- .prettierignore | 6 + .prettierrc.json | 3 +- .solhint.json | 23 +- package.json | 73 +- tsconfig.json | 8 +- yarn.lock | 7609 ++++++----------------------------- 8 files changed, 1185 insertions(+), 6551 deletions(-) create mode 100644 .eslintignore rename .eslintrc.json => .eslintrc (64%) create mode 100644 .prettierignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..45543b58f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,6 @@ +node_modules +artifacts +cache +coverage +out +lib diff --git a/.eslintrc.json b/.eslintrc similarity index 64% rename from .eslintrc.json rename to .eslintrc index bf60f56f4..ad350fdc1 100644 --- a/.eslintrc.json +++ b/.eslintrc @@ -4,10 +4,6 @@ "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", - "prettier" - ], - "rules": { - "semi": ["error", "always"], - "quotes": ["error", "single"] - } + "plugin:prettier/recommended" + ] } diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..45543b58f --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +node_modules +artifacts +cache +coverage +out +lib diff --git a/.prettierrc.json b/.prettierrc.json index aa42c4c39..dcb93dcb6 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -10,8 +10,7 @@ "files": "*.ts", "options": { "tabWidth": 2, - "printWidth": 140, - "singleQuote": true + "printWidth": 140 } } ] diff --git a/.solhint.json b/.solhint.json index 9428d257b..203b116e9 100644 --- a/.solhint.json +++ b/.solhint.json @@ -1,23 +1,8 @@ { - "extends": "solhint:recommended", - "plugins": ["prettier"], + "plugins": [ + "prettier" + ], "rules": { - "prettier/prettier": "error", - "max-line-length": "off", - "check-send-result": "off", - "not-rely-on-time": "off", - "multiple-sends": "off", - "compiler-version": "off", - "reason-string": "off", - "var-name-mixedcase": "off", - "no-empty-blocks": "off", - "func-name-mixedcase": "off", - "max-states-count": "off", - "func-visibility": [ - "warn", - { - "ignoreConstructors": true - } - ] + "prettier/prettier": "error" } } diff --git a/package.json b/package.json index 99f15972b..09cc10e7a 100644 --- a/package.json +++ b/package.json @@ -1,64 +1,49 @@ { - "name": "morpho-contracts", + "name": "morpho-v1", "version": "1.0.0", - "description": "", - "main": "hardhat.config.js", - "files": [ - "contracts" - ], + "description": "Core contracts of the Morpho Protocol V1.", "scripts": { - "upgrade:compound:ropsten": "hardhat run scripts/upgrade-compound.ts --network ropsten", - "upgrade:compound:goerli": "hardhat run scripts/upgrade-compound.ts --network goerli", "test": "hardhat test", "lint": "yarn lint:sol && yarn lint:ts", "lint:ts": "eslint . --ext .ts", "lint:sol": "solhint 'contracts/**/*.sol'", - "fix": "yarn fix:sol && yarn fix:ts", - "fix:ts": "prettier --config .prettierrc.json './**/*.ts' --write", - "fix:sol": "prettier --write './contracts/**/*.sol' && prettier --write './test-foundry/**/*.sol'", + "format": "yarn fix:sol && yarn fix:ts", + "format:ts": "prettier --write './**/*.ts'", + "format:sol": "prettier --write './**/*.sol'", "postinstall": "husky install" }, "repository": { "type": "git", - "url": "git+https://github.com/morpho-protocol/morpho-contracts.git" + "url": "git+https://github.com/morpho-dao/morpho-v1.git" }, - "keywords": [], - "author": "", "license": "ISC", "bugs": { - "url": "https://github.com/morpho-protocol/morpho-contracts/issues" + "url": "https://github.com/morpho-dao/morpho-v1/issues" }, - "homepage": "https://github.com/morpho-protocol/morpho-contracts#readme", + "homepage": "https://github.com/morpho-dao/morpho-v1#readme", "devDependencies": { - "@nomiclabs/hardhat-ethers": "2.0.2", - "@nomiclabs/hardhat-etherscan": "3.0.0", - "@nomiclabs/hardhat-waffle": "2.0.1", - "@openzeppelin/hardhat-upgrades": "1.17.0", - "@tenderly/hardhat-tenderly": "1.0.13", - "@types/chai": "4.2.22", - "@types/mocha": "9.0.0", - "@types/node": "17.0.8", - "@typescript-eslint/eslint-plugin": "5.4.0", - "@typescript-eslint/parser": "5.4.0", - "chai": "4.3.4", - "decimal.js": "10.3.1", - "dotenv": "10.0.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-prettier": "4.0.0", - "ethereum-waffle": "3.4.0", - "ethers": "5.4.1", - "hardhat": "^2.9.7", - "hardhat-deploy": "0.9.1", - "hardhat-etherscan": "^1.0.1", - "hardhat-upgrades": "^0.0.0", - "husky": "7.0.1", - "merkletreejs": "0.2.31", - "prettier": "2.3.2", - "prettier-plugin-solidity": "1.0.0-beta.13", - "solhint": "3.3.6", + "@morpho-labs/morpho-ethers-contract": "^1.1.1", + "@nomicfoundation/hardhat-network-helpers": "1.0.6", + "@nomiclabs/hardhat-ethers": "2.1.1", + "@types/chai": "4.3.3", + "@types/node": "18.7.18", + "@typescript-eslint/eslint-plugin": "5.38.0", + "@typescript-eslint/parser": "5.38.0", + "chai": "4.3.6", + "dotenv": "16.0.2", + "eslint": "^8.23.1", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-prettier": "4.2.1", + "ethers": "5.7.1", + "hardhat": "2.11.2", + "husky": "^8.0.1", + "merkletreejs": "^0.2.32", + "prettier": "^2.7.1", + "prettier-plugin-solidity": "^1.0.0-beta.24", + "solhint": "^3.3.7", "solhint-plugin-prettier": "0.0.5", - "ts-node": "10.4.0", - "typescript": "4.5.2" + "ts-node": "^10.9.1", + "typescript": "^4.8.3" }, "dependencies": { "@openzeppelin/contracts": "4.5.0", diff --git a/tsconfig.json b/tsconfig.json index ade635cb8..95cb8ad42 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,11 @@ { "compilerOptions": { - "target": "es2018", - "module": "commonjs", + "target": "es6", + "moduleResolution": "node", "strict": true, "esModuleInterop": true, - "outDir": "dist" + "resolveJsonModule": true }, - "include": ["./scripts", "./test"], + "include": ["./test"], "files": ["./hardhat.config.ts"] } diff --git a/yarn.lock b/yarn.lock index e92138b6a..4320ea314 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,187 +23,44 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - -"@ensdomains/ens@^0.4.4": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" - integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - bluebird "^3.5.2" - eth-ens-namehash "^2.0.8" - solc "^0.4.20" - testrpc "0.0.1" - web3-utils "^1.0.0-beta.31" - -"@ensdomains/resolver@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" - integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== - -"@ethereum-waffle/chai@^3.4.0": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.4.tgz#16c4cc877df31b035d6d92486dfdf983df9138ff" - integrity sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g== - dependencies: - "@ethereum-waffle/provider" "^3.4.4" - ethers "^5.5.2" - -"@ethereum-waffle/compiler@^3.4.0": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz#d568ee0f6029e68b5c645506079fbf67d0dfcf19" - integrity sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ== - dependencies: - "@resolver-engine/imports" "^0.3.3" - "@resolver-engine/imports-fs" "^0.3.3" - "@typechain/ethers-v5" "^2.0.0" - "@types/mkdirp" "^0.5.2" - "@types/node-fetch" "^2.5.5" - ethers "^5.0.1" - mkdirp "^0.5.1" - node-fetch "^2.6.1" - solc "^0.6.3" - ts-generator "^0.1.1" - typechain "^3.0.0" - -"@ethereum-waffle/ens@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.4.4.tgz#db97ea2c9decbb70b9205d53de2ccbd6f3182ba1" - integrity sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg== - dependencies: - "@ensdomains/ens" "^0.4.4" - "@ensdomains/resolver" "^0.2.4" - ethers "^5.5.2" - -"@ethereum-waffle/mock-contract@^3.3.0": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz#fc6ffa18813546f4950a69f5892d4dd54b2c685a" - integrity sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA== - dependencies: - "@ethersproject/abi" "^5.5.0" - ethers "^5.5.2" - -"@ethereum-waffle/provider@^3.4.0", "@ethereum-waffle/provider@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.4.tgz#398fc1f7eb91cc2df7d011272eacba8af0c7fffb" - integrity sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g== - dependencies: - "@ethereum-waffle/ens" "^3.4.4" - ethers "^5.5.2" - ganache-core "^2.13.2" - patch-package "^6.2.2" - postinstall-postinstall "^2.1.0" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" + "@jridgewell/trace-mapping" "0.3.9" -"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/vm@^5.9.0": - version "5.9.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.3.tgz#6d69202e4c132a4a1e1628ac246e92062e230823" - integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== - dependencies: - "@ethereumjs/block" "^3.6.3" - "@ethereumjs/blockchain" "^5.5.3" - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" - -"@ethersproject/abi@5.0.0-beta.153": - version "5.0.0-beta.153" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" - integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== - dependencies: - "@ethersproject/address" ">=5.0.0-beta.128" - "@ethersproject/bignumber" ">=5.0.0-beta.130" - "@ethersproject/bytes" ">=5.0.0-beta.129" - "@ethersproject/constants" ">=5.0.0-beta.128" - "@ethersproject/hash" ">=5.0.0-beta.128" - "@ethersproject/keccak256" ">=5.0.0-beta.127" - "@ethersproject/logger" ">=5.0.0-beta.129" - "@ethersproject/properties" ">=5.0.0-beta.131" - "@ethersproject/strings" ">=5.0.0-beta.130" - -"@ethersproject/abi@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" - integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3": + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abi@^5.1.2": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== @@ -218,20 +75,20 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/abstract-provider@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" - integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.4.0", "@ethersproject/abstract-provider@^5.6.1": +"@ethersproject/abstract-provider@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== @@ -244,18 +101,18 @@ "@ethersproject/transactions" "^5.6.2" "@ethersproject/web" "^5.6.1" -"@ethersproject/abstract-signer@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" - integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" -"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.4.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.2": +"@ethersproject/abstract-signer@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== @@ -266,18 +123,18 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/address@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" - integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" -"@ethersproject/address@5.6.1", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.6.1": +"@ethersproject/address@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== @@ -288,46 +145,38 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.1" -"@ethersproject/base64@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" - integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: - "@ethersproject/bytes" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" -"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.4.0", "@ethersproject/base64@^5.6.1": +"@ethersproject/base64@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== dependencies: "@ethersproject/bytes" "^5.6.1" -"@ethersproject/basex@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" - integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.4.0", "@ethersproject/basex@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" - integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/properties" "^5.6.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" - integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - bn.js "^4.11.9" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" -"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.2": +"@ethersproject/bignumber@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== @@ -336,81 +185,66 @@ "@ethersproject/logger" "^5.6.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" - integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.6.1": +"@ethersproject/bytes@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/constants@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" - integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: - "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/constants@5.6.1", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1": +"@ethersproject/constants@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== dependencies: "@ethersproject/bignumber" "^5.6.2" -"@ethersproject/contracts@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" - integrity sha512-hkO3L3IhS1Z3ZtHtaAG/T87nQ7KiPV+/qnvutag35I0IkiQ8G3ZpCQ9NNOpSCzn4pWSW4CfzmtE02FcqnLI+hw== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - -"@ethersproject/contracts@5.6.2", "@ethersproject/contracts@^5.4.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" - integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== - dependencies: - "@ethersproject/abi" "^5.6.3" - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - -"@ethersproject/hash@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" - integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/hash@5.6.1", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.4.0", "@ethersproject/hash@^5.6.1": +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hash@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== @@ -424,89 +258,52 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/hdnode@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" - integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.0" - -"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.4.0", "@ethersproject/hdnode@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" - integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - -"@ethersproject/json-wallets@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" - integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.4.0", "@ethersproject/json-wallets@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" - integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" - integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== dependencies: - "@ethersproject/bytes" "^5.4.0" - js-sha3 "0.5.7" + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" -"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.4.0", "@ethersproject/keccak256@^5.6.1": +"@ethersproject/keccak256@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== @@ -514,136 +311,95 @@ "@ethersproject/bytes" "^5.6.1" js-sha3 "0.8.0" -"@ethersproject/logger@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" - integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.4.0", "@ethersproject/logger@^5.6.0": +"@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== -"@ethersproject/networks@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" - integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.4.0", "@ethersproject/networks@^5.6.3": +"@ethersproject/networks@^5.6.3": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/pbkdf2@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" - integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - -"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.4.0", "@ethersproject/pbkdf2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" - integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" - integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.4.0", "@ethersproject/properties@^5.6.0": +"@ethersproject/properties@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/providers@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.1.tgz#654267b563b833046b9c9647647cfc8267cb93b4" - integrity sha512-p06eiFKz8nu/5Ju0kIX024gzEQIgE5pvvGrBCngpyVjpuLtUIWT3097Agw4mTn9/dEA0FMcfByzFqacBMSgCVg== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.4.4": - version "5.6.8" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" - integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/base64" "^5.6.1" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" +"@ethersproject/providers@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" + integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" - integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/random@5.6.1", "@ethersproject/random@^5.4.0", "@ethersproject/random@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" - integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" - integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.4.0", "@ethersproject/rlp@^5.6.1": +"@ethersproject/rlp@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== @@ -651,37 +407,28 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/sha2@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" - integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - hash.js "1.1.7" - -"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.4.0", "@ethersproject/sha2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" - integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" - integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - bn.js "^4.11.9" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.4.0", "@ethersproject/signing-key@^5.6.2": +"@ethersproject/signing-key@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== @@ -693,39 +440,28 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" - integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/solidity@5.6.1", "@ethersproject/solidity@^5.4.0": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" - integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" - integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" -"@ethersproject/strings@5.6.1", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.4.0", "@ethersproject/strings@^5.6.1": +"@ethersproject/strings@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== @@ -734,22 +470,22 @@ "@ethersproject/constants" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/transactions@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" - integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - -"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/transactions@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== @@ -764,78 +500,48 @@ "@ethersproject/rlp" "^5.6.1" "@ethersproject/signing-key" "^5.6.2" -"@ethersproject/units@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" - integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/units@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" - integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/wallet@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" - integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" - "@ethersproject/json-wallets" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.0" - -"@ethersproject/wallet@5.6.2", "@ethersproject/wallet@^5.4.0": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" - integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/json-wallets" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - -"@ethersproject/web@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" - integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== dependencies: - "@ethersproject/base64" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" -"@ethersproject/web@5.6.1", "@ethersproject/web@^5.4.0", "@ethersproject/web@^5.6.1": +"@ethersproject/web@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== @@ -846,27 +552,58 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/wordlists@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" - integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.4.0", "@ethersproject/wordlists@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" - integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" "@metamask/eth-sig-util@^4.0.0": version "4.0.1" @@ -879,6 +616,13 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@morpho-labs/morpho-ethers-contract@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@morpho-labs/morpho-ethers-contract/-/morpho-ethers-contract-1.1.1.tgz#2f74639c35e070e29c85fcdd5190c4e74390ae17" + integrity sha512-wd0B3w5oiLONhplqRAevxWgtL0UehyifZvBhaihr7ZNDB/cfVaqTfXGzMf/9nb1qKUUg54vLawvnIS0r9rpkrw== + dependencies: + ethers "^5.7.0" + "@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" @@ -910,110 +654,225 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomiclabs/hardhat-ethers@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" - integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== +"@nomicfoundation/ethereumjs-block@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" + integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-blockchain@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" + integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-ethash" "^2.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" -"@nomiclabs/hardhat-etherscan@3.0.0": +"@nomicfoundation/ethereumjs-common@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.0.0.tgz#06e0d59787f01f1296d829e8d43fece50e7ffff1" - integrity sha512-E5s35dCHmzuY6pFqlgTdDGQr2xIyUJ3f91m6e7HYlPGz0FGzad9Nem/y0L7L3FHG4LPYg1UObkQVUzqBjtyAOA== + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" + integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" - debug "^4.1.1" - fs-extra "^7.0.1" - node-fetch "^2.6.0" - semver "^6.3.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + crc-32 "^1.2.0" -"@nomiclabs/hardhat-waffle@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz#5d43654fba780720c5033dea240fe14f70ef4bd2" - integrity sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ== +"@nomicfoundation/ethereumjs-ethash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" + integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== dependencies: - "@types/sinon-chai" "^3.2.3" - "@types/web3" "1.0.19" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" -"@openzeppelin/contracts-upgradeable@4.5.2": - version "4.5.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz#90d9e47bacfd8693bfad0ac8a394645575528d05" - integrity sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA== +"@nomicfoundation/ethereumjs-evm@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" + integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" -"@openzeppelin/contracts@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.5.0.tgz#3fd75d57de172b3743cdfc1206883f56430409cc" - integrity sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA== +"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" + integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== -"@openzeppelin/hardhat-upgrades@*": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.20.0.tgz#fe1bddc4ab591ccf185caf4cfa269a4851b73599" - integrity sha512-ign7fc/ZdPe+KAYCB91619o+wlBr7sIEEt1nqLhoXAJ9f0qVuXkwAaTdLB0MTSWH85TzlUUT2fTJp1ZnZ1o4LQ== +"@nomicfoundation/ethereumjs-statemanager@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" + integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== dependencies: - "@openzeppelin/upgrades-core" "^1.18.0" - chalk "^4.1.0" - debug "^4.1.1" - proper-lockfile "^4.1.1" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" -"@openzeppelin/hardhat-upgrades@1.17.0": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.17.0.tgz#24ea0f366c3b2df985263cf8b1b796afd04d7e13" - integrity sha512-GNxR3/3fCKQsFpBi/r+5ib6U81UM9KCypmcOQxuCkVp9JKJ80/3hQdg1R+AQku/dlnhutPsfkCokH2LZFc5mNA== +"@nomicfoundation/ethereumjs-trie@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" + integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== dependencies: - "@openzeppelin/upgrades-core" "^1.14.1" - chalk "^4.1.0" - proper-lockfile "^4.1.1" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" -"@openzeppelin/upgrades-core@^1.14.1", "@openzeppelin/upgrades-core@^1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.18.0.tgz#a5db80d15e6b87d45307ad27314c91807a506c00" - integrity sha512-fFp5sscGC876yhq7BU595LG45yky21sZFa6cDJigluUjAyJSPoLwF7GD9bSwQMMo4jC7ii1UJBtLipUxN6PVTA== +"@nomicfoundation/ethereumjs-tx@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" + integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== dependencies: - cbor "^8.0.0" - chalk "^4.1.0" - compare-versions "^4.0.0" - debug "^4.1.1" - ethereumjs-util "^7.0.3" - proper-lockfile "^4.1.1" - solidity-ast "^0.4.15" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" -"@resolver-engine/core@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" - integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== +"@nomicfoundation/ethereumjs-util@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" + integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== dependencies: - debug "^3.1.0" - is-url "^1.2.4" - request "^2.85.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + ethereum-cryptography "0.1.3" -"@resolver-engine/fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" - integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== - dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" +"@nomicfoundation/ethereumjs-vm@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" + integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" -"@resolver-engine/imports-fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" - integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== +"@nomicfoundation/hardhat-network-helpers@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz#5e2026ddde5ca539f70a2bf498528afd08bd0827" + integrity sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ== dependencies: - "@resolver-engine/fs" "^0.3.3" - "@resolver-engine/imports" "^0.3.3" - debug "^3.1.0" + ethereumjs-util "^7.1.4" -"@resolver-engine/imports@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" - integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== - dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" - hosted-git-info "^2.6.0" - path-browserify "^1.0.0" - url "^0.11.0" +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" + integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" + integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" + integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" + integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" + integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" + integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" + integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" + integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" + integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" + integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== + +"@nomicfoundation/solidity-analyzer@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" + integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + +"@nomiclabs/hardhat-ethers@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" + integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + +"@openzeppelin/contracts-upgradeable@4.5.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz#90d9e47bacfd8693bfad0ac8a394645575528d05" + integrity sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA== + +"@openzeppelin/contracts@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.5.0.tgz#3fd75d57de172b3743cdfc1206883f56430409cc" + integrity sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA== "@scure/base@~1.1.0": version "1.1.1" @@ -1105,41 +964,13 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@solidity-parser/parser@^0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" - integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.14.2": +"@solidity-parser/parser@^0.14.1", "@solidity-parser/parser@^0.14.3": version "0.14.3" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== dependencies: antlr4ts "^0.5.0-alpha.4" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@tenderly/hardhat-tenderly@1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.0.13.tgz#6182a2d32bf12d110622f0b24263dc964ed7aa6d" - integrity sha512-XsrF2QIUh8YmzCcWHmPnSNQjZNBQkyrHER8bcrWsFIgL7ub49hmPbpGVB2Isb6gUV/IGBpBm7R69jpmoTvJ17g== - dependencies: - axios "^0.21.1" - fs-extra "^9.0.1" - js-yaml "^3.14.0" - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -1160,100 +991,49 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@typechain/ethers-v5@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz#cd3ca1590240d587ca301f4c029b67bfccd08810" - integrity sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw== - dependencies: - ethers "^5.0.2" +"@types/async-eventemitter@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" + integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" -"@types/bn.js@*", "@types/bn.js@^5.1.0": +"@types/bn.js@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== dependencies: "@types/node" "*" -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/chai@*": +"@types/chai@4.3.3": version "4.3.3" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== -"@types/chai@4.2.22": - version "4.2.22" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7" - integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ== - "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== -"@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== - dependencies: - "@types/node" "*" - -"@types/mocha@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297" - integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA== - -"@types/node-fetch@^2.5.5": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - "@types/node@*": version "18.7.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.1.tgz#352bee64f93117d867d05f7406642a52685cbca6" integrity sha512-GKX1Qnqxo4S+Z/+Z8KKPLpH282LD7jLHWJcVryOflnsnH+BtSDfieR6ObwBMwpnNws0bUK8GI7z0unQf9bARNQ== -"@types/node@17.0.8": - version "17.0.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" - integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== - -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@18.7.18": + version "18.7.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" + integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== "@types/pbkdf2@^3.0.0": version "3.1.0" @@ -1262,23 +1042,6 @@ dependencies: "@types/node" "*" -"@types/prettier@^2.1.1": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== - -"@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/resolve@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1286,119 +1049,91 @@ dependencies: "@types/node" "*" -"@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon@*": - version "10.0.13" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.13.tgz#60a7a87a70d9372d0b7b38cc03e825f46981fb83" - integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== - -"@types/underscore@*": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== - -"@types/web3@1.0.19": - version "1.0.19" - resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" - integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== - dependencies: - "@types/bn.js" "*" - "@types/underscore" "*" - -"@typescript-eslint/eslint-plugin@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz#05e711a2e7b68342661fde61bccbd1531c19521a" - integrity sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg== +"@typescript-eslint/eslint-plugin@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz#ac919a199548861012e8c1fb2ec4899ac2bc22ae" + integrity sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ== dependencies: - "@typescript-eslint/experimental-utils" "5.4.0" - "@typescript-eslint/scope-manager" "5.4.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/type-utils" "5.38.0" + "@typescript-eslint/utils" "5.38.0" + debug "^4.3.4" + ignore "^5.2.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" - integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== +"@typescript-eslint/parser@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.38.0.tgz#5a59a1ff41a7b43aacd1bb2db54f6bf1c02b2ff8" + integrity sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA== dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/typescript-estree" "5.38.0" + debug "^4.3.4" -"@typescript-eslint/parser@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.4.0.tgz#3aa83ce349d66e39b84151f6d5464928044ca9e3" - integrity sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw== +"@typescript-eslint/scope-manager@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz#8f0927024b6b24e28671352c93b393a810ab4553" + integrity sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA== dependencies: - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" - debug "^4.3.2" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/visitor-keys" "5.38.0" -"@typescript-eslint/scope-manager@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" - integrity sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA== +"@typescript-eslint/type-utils@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz#c8b7f681da825fcfc66ff2b63d70693880496876" + integrity sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA== dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" + "@typescript-eslint/typescript-estree" "5.38.0" + "@typescript-eslint/utils" "5.38.0" + debug "^4.3.4" + tsutils "^3.21.0" -"@typescript-eslint/types@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" - integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== +"@typescript-eslint/types@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.38.0.tgz#8cd15825e4874354e31800dcac321d07548b8a5f" + integrity sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA== -"@typescript-eslint/typescript-estree@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" - integrity sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA== +"@typescript-eslint/typescript-estree@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz#89f86b2279815c6fb7f57d68cf9b813f0dc25d98" + integrity sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg== dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/visitor-keys" "5.38.0" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" - integrity sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg== +"@typescript-eslint/utils@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.38.0.tgz#5b31f4896471818153790700eb02ac869a1543f4" + integrity sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/typescript-estree" "5.38.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz#60591ca3bf78aa12b25002c0993d067c00887e34" + integrity sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w== dependencies: - "@typescript-eslint/types" "5.4.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.38.0" + eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1406,65 +1141,20 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -abstract-leveldown@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" - integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" - integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~2.6.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.0.0: +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1479,7 +1169,7 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.4.1: +acorn@^8.4.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -1494,11 +1184,6 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== -aes-js@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -1514,7 +1199,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1546,11 +1231,6 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" @@ -1566,11 +1246,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1620,93 +1295,16 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-back@^1.0.3, array-back@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" - integrity sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw== - dependencies: - typical "^2.6.0" - -array-back@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" - integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== - dependencies: - typical "^2.6.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - ast-parents@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" @@ -1717,601 +1315,26 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: +async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== dependencies: async "^2.4.0" -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - -async@^1.4.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: +async@^2.4.0: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.14, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babelify@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" - integrity sha512-vID8Fz6pPN5pJMdlUnNFSfrlcx5MUule4k9aKs/zbZPyXxMTcRrB0M4Tarw22L8afr8eYSWxDPYCob3TdrqtlA== - dependencies: - babel-core "^6.0.14" - object-assign "^4.0.0" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -backoff@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== - dependencies: - precond "0.2" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2, base-x@^3.0.8: +base-x@^3.0.2: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== @@ -2323,32 +1346,24 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - bech32@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bignumber.js@^9.0.0, bignumber.js@^9.0.1: +bigint-crypto-utils@^3.0.23: + version "3.1.6" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz#3a52a660423416856342d0d9981935fa9856f177" + integrity sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg== + dependencies: + bigint-mod-arith "^3.1.0" + +bigint-mod-arith@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz#127c504faf30d27ba010ac7b7d58708a68e3c20b" + integrity sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ== + +bignumber.js@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== @@ -2358,60 +1373,26 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bip39@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" - integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA== - dependencies: - create-hash "^1.1.0" - pbkdf2 "^3.0.9" - randombytes "^2.0.1" - safe-buffer "^5.0.1" - unorm "^1.3.3" - blakejs@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== -bluebird@^3.5.0, bluebird@^3.5.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.0, body-parser@^1.16.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2427,22 +1408,6 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2450,17 +1415,27 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: +brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: +browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2472,56 +1447,6 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -2548,95 +1473,25 @@ buffer-reverse@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - -buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" - ieee754 "^1.1.13" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" + ieee754 "^1.2.1" bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -bytewise-core@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" - integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== - dependencies: - typewise-core "^1.2" - -bytewise@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" - integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== - dependencies: - bytewise-core "^1.2.2" - typewise "^1.0.3" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -cachedown@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" - integrity sha512-t+yVk82vQWCJF3PsWHMld+jhhjkkWjcAzz8NbFx1iULOXWl8Tm/FdM4smZNVw3MRr0X+lVTx9PKzvEn4Ng19RQ== - dependencies: - abstract-leveldown "^2.4.1" - lru-cache "^3.2.0" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: +call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -2668,65 +1523,30 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== - camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30000844: - version "1.0.30001375" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" - integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" +catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -chai@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== +chai@4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" deep-eql "^3.0.1" get-func-name "^2.0.0" + loupe "^2.3.1" pathval "^1.1.1" type-detect "^4.0.5" -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2735,7 +1555,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2753,14 +1573,7 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -checkpoint-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== - dependencies: - functional-red-black-tree "^1.0.1" - -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: +chokidar@3.5.3, chokidar@^3.4.0: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2775,27 +1588,11 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2804,20 +1601,16 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== +classic-level@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" + integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" clean-stack@^2.0.0: version "2.2.0" @@ -2836,15 +1629,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -2854,31 +1638,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@2.1.2, clone@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2903,27 +1662,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -command-line-args@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.7.tgz#f8d1916ecb90e9e121eda6428e41300bfb64cc46" - integrity sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA== - dependencies: - array-back "^2.0.0" - find-replace "^1.0.3" - typical "^2.6.1" - commander@2.18.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -2934,112 +1677,16 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -compare-versions@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.3.tgz#8f7b8966aef7dc4282b45dfa6be98434fc18a1a4" - integrity sha512-WQfnbDcrYnGr55UwbxKiQKASnTtNnaAWVi8jZyy8NTpVAXWACSne8lMD1iaIo9AiU6mnuLvSVshCzewVuWxHUg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.5.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-js-pure@^3.0.1: - version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" - integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== - -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - cosmiconfig@^5.0.7: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -3055,14 +1702,6 @@ crc-32@^1.2.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3074,7 +1713,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -3091,14 +1730,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@^2.1.0, cross-fetch@^2.1.1: - version "2.2.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" - integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== - dependencies: - node-fetch "^2.6.7" - whatwg-fetch "^2.0.4" - cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3110,98 +1741,32 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" crypto-js@^3.1.9-1: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -3209,116 +1774,16 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -deferred-leveldown@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== - dependencies: - abstract-leveldown "~2.6.0" - -deferred-leveldown@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" - integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== - dependencies: - abstract-leveldown "~5.0.0" - inherits "^2.0.3" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== - dependencies: - repeating "^2.0.0" - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -3329,15 +1794,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3352,47 +1808,12 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dotenv@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -dotignore@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== - dependencies: - minimatch "^3.0.4" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.3.47: - version "1.4.215" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.215.tgz#553372e74bde3164290d61f6792f93e443b16733" - integrity sha512-vqZxT8C5mlDZ//hQFhneHmOLnj1LhbzxV0+I1yqHV8SB1Oo4Y5Ne9+qQhwHl7O1s9s9cRuo2l5CoLEHdhMTwZg== +dotenv@16.0.2: + version "16.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" + integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3405,6 +1826,11 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emoji-regex@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" + integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -3415,57 +1841,7 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding-down@5.0.4, encoding-down@~5.0.0: - version "5.0.4" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" - integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== - dependencies: - abstract-leveldown "^5.0.0" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - xtend "^4.0.1" - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.6: +enquirer@^2.3.0: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3477,118 +1853,37 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -eslint-config-prettier@8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== +eslint-config-prettier@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== -eslint-plugin-prettier@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== +eslint-plugin-prettier@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -3608,6 +1903,14 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^1.3.1: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" @@ -3632,7 +1935,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: +eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== @@ -3679,6 +1982,51 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" +eslint@^8.23.1: + version "8.23.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc" + integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== + dependencies: + "@eslint/eslintrc" "^1.3.2" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + espree@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" @@ -3688,12 +2036,21 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.0.1, esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3722,136 +2079,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-block-tracker@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1" - integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug== - dependencies: - eth-query "^2.1.0" - ethereumjs-tx "^1.3.3" - ethereumjs-util "^5.1.3" - ethjs-util "^0.1.3" - json-rpc-engine "^3.6.0" - pify "^2.3.0" - tape "^4.6.3" - -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-json-rpc-infura@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz#26702a821067862b72d979c016fd611502c6057f" - integrity sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw== - dependencies: - cross-fetch "^2.1.1" - eth-json-rpc-middleware "^1.5.0" - json-rpc-engine "^3.4.0" - json-rpc-error "^2.0.0" - -eth-json-rpc-middleware@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" - integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q== - dependencies: - async "^2.5.0" - eth-query "^2.1.2" - eth-tx-summary "^3.1.2" - ethereumjs-block "^1.6.0" - ethereumjs-tx "^1.3.3" - ethereumjs-util "^5.1.2" - ethereumjs-vm "^2.1.0" - fetch-ponyfill "^4.0.0" - json-rpc-engine "^3.6.0" - json-rpc-error "^2.0.0" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - tape "^4.6.3" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== - dependencies: - json-rpc-random-id "^1.0.0" - xtend "^4.0.1" - -eth-sig-util@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" - integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== - dependencies: - buffer "^5.2.1" - elliptic "^6.4.0" - ethereumjs-abi "0.6.5" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.0" - tweetnacl-util "^0.15.0" - -eth-sig-util@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" - integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== - dependencies: - ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" - ethereumjs-util "^5.1.1" - -eth-tx-summary@^3.1.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" - integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg== - dependencies: - async "^2.1.2" - clone "^2.0.0" - concat-stream "^1.5.1" - end-of-stream "^1.1.0" - eth-query "^2.0.2" - ethereumjs-block "^1.4.1" - ethereumjs-tx "^1.1.1" - ethereumjs-util "^5.0.1" - ethereumjs-vm "^2.6.0" - through2 "^2.0.3" - -ethashjs@~0.0.7: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" - integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== - dependencies: - async "^2.1.2" - buffer-xor "^2.0.1" - ethereumjs-util "^7.0.2" - miller-rabin "^4.0.0" - ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -3859,17 +2086,7 @@ ethereum-bloom-filters@^1.0.6: dependencies: js-sha3 "^0.8.0" -ethereum-common@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" - integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== - -ethereum-common@^0.0.18: - version "0.0.18" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== - -ethereum-cryptography@^0.1.3: +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -3900,26 +2117,7 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.0" "@scure/bip39" "1.1.0" -ethereum-waffle@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz#990b3c6c26db9c2dd943bf26750a496f60c04720" - integrity sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ== - dependencies: - "@ethereum-waffle/chai" "^3.4.0" - "@ethereum-waffle/compiler" "^3.4.0" - "@ethereum-waffle/mock-contract" "^3.3.0" - "@ethereum-waffle/provider" "^3.4.0" - ethers "^5.0.1" - -ethereumjs-abi@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" - integrity sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g== - dependencies: - bn.js "^4.10.0" - ethereumjs-util "^4.3.0" - -ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: +ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== @@ -3927,96 +2125,7 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": - version "0.6.8" - resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-account@3.0.0, ethereumjs-account@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" - integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== - dependencies: - ethereumjs-util "^6.0.0" - rlp "^2.2.1" - safe-buffer "^5.1.1" - -ethereumjs-account@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" - integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== - dependencies: - ethereumjs-util "^5.0.0" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-block@2.2.2, ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.0, ethereumjs-block@~2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" - integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== - dependencies: - async "^2.0.1" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.1" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" - integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== - dependencies: - async "^2.0.1" - ethereum-common "0.2.0" - ethereumjs-tx "^1.2.2" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-blockchain@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" - integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== - dependencies: - async "^2.6.1" - ethashjs "~0.0.7" - ethereumjs-block "~2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.1.0" - flow-stoplight "^1.0.0" - level-mem "^3.0.1" - lru-cache "^5.1.1" - rlp "^2.2.2" - semaphore "^1.1.0" - -ethereumjs-common@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" - integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== - -ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" - integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== - -ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" - integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== - dependencies: - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.0.0" - -ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" - integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== - dependencies: - ethereum-common "^0.0.18" - ethereumjs-util "^5.0.0" - -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0, ethereumjs-util@^6.2.1: +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -4029,31 +2138,7 @@ ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumj ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^4.3.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz#f4bf9b3b515a484e3cc8781d61d9d980f7c83bd0" - integrity sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w== - dependencies: - bn.js "^4.8.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - rlp "^2.0.0" - -ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5, ethereumjs-util@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -4064,130 +2149,41 @@ ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereum ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethereumjs-vm@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" - integrity sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - core-js-pure "^3.0.1" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-blockchain "^4.0.3" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "^2.3.2" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - util.promisify "^1.0.0" - -ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" - integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - ethereumjs-account "^2.0.3" - ethereumjs-block "~2.2.0" - ethereumjs-common "^1.1.0" - ethereumjs-util "^6.0.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "^2.3.2" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - -ethereumjs-wallet@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" - integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== - dependencies: - aes-js "^3.1.1" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^6.0.0" - randombytes "^2.0.6" - safe-buffer "^5.1.2" - scryptsy "^1.2.1" - utf8 "^3.0.0" - uuid "^3.3.2" - -ethers@5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.1.tgz#bcff1e9f45bf1a061bf313ec04e8d9881d2d53f9" - integrity sha512-SrcddMdCgP1hukDvCPd87Aipbf4NWjQvdfAbZ65XSZGbfyuYPtIrUJPDH5B1SBRsdlfiEgX3eoz28DdBDzMNFg== - dependencies: - "@ethersproject/abi" "5.4.0" - "@ethersproject/abstract-provider" "5.4.0" - "@ethersproject/abstract-signer" "5.4.0" - "@ethersproject/address" "5.4.0" - "@ethersproject/base64" "5.4.0" - "@ethersproject/basex" "5.4.0" - "@ethersproject/bignumber" "5.4.0" - "@ethersproject/bytes" "5.4.0" - "@ethersproject/constants" "5.4.0" - "@ethersproject/contracts" "5.4.0" - "@ethersproject/hash" "5.4.0" - "@ethersproject/hdnode" "5.4.0" - "@ethersproject/json-wallets" "5.4.0" - "@ethersproject/keccak256" "5.4.0" - "@ethersproject/logger" "5.4.0" - "@ethersproject/networks" "5.4.1" - "@ethersproject/pbkdf2" "5.4.0" - "@ethersproject/properties" "5.4.0" - "@ethersproject/providers" "5.4.1" - "@ethersproject/random" "5.4.0" - "@ethersproject/rlp" "5.4.0" - "@ethersproject/sha2" "5.4.0" - "@ethersproject/signing-key" "5.4.0" - "@ethersproject/solidity" "5.4.0" - "@ethersproject/strings" "5.4.0" - "@ethersproject/transactions" "5.4.0" - "@ethersproject/units" "5.4.0" - "@ethersproject/wallet" "5.4.0" - "@ethersproject/web" "5.4.0" - "@ethersproject/wordlists" "5.4.0" - -ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2: - version "5.6.9" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" - integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== - dependencies: - "@ethersproject/abi" "5.6.4" - "@ethersproject/abstract-provider" "5.6.1" - "@ethersproject/abstract-signer" "5.6.2" - "@ethersproject/address" "5.6.1" - "@ethersproject/base64" "5.6.1" - "@ethersproject/basex" "5.6.1" - "@ethersproject/bignumber" "5.6.2" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.1" - "@ethersproject/contracts" "5.6.2" - "@ethersproject/hash" "5.6.1" - "@ethersproject/hdnode" "5.6.2" - "@ethersproject/json-wallets" "5.6.1" - "@ethersproject/keccak256" "5.6.1" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.4" - "@ethersproject/pbkdf2" "5.6.1" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.8" - "@ethersproject/random" "5.6.1" - "@ethersproject/rlp" "5.6.1" - "@ethersproject/sha2" "5.6.1" - "@ethersproject/signing-key" "5.6.2" - "@ethersproject/solidity" "5.6.1" - "@ethersproject/strings" "5.6.1" - "@ethersproject/transactions" "5.6.2" - "@ethersproject/units" "5.6.1" - "@ethersproject/wallet" "5.6.2" - "@ethersproject/web" "5.6.1" - "@ethersproject/wordlists" "5.6.1" +ethers@5.7.1, ethers@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" + integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.1" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" ethjs-unit@0.1.6: version "0.1.6" @@ -4197,7 +2193,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: +ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -4210,17 +2206,7 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: +evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== @@ -4228,124 +2214,16 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.14.0: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: - type "^2.5.0" + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fake-merkle-patricia-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== - dependencies: - checkpoint-store "^1.1.0" - -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -4371,7 +2249,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -4383,13 +2261,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fetch-ponyfill@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== - dependencies: - node-fetch "~1.7.1" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -4404,15 +2275,12 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" @@ -4421,28 +2289,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-replace@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" - integrity sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA== - dependencies: - array-back "^1.0.4" - test-value "^2.1.0" - -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -4450,14 +2297,6 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -4465,21 +2304,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-yarn-workspace-root@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" - integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== - dependencies: - fs-extra "^4.0.3" - micromatch "^3.1.4" - -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== - dependencies: - micromatch "^4.0.2" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -4489,6 +2313,14 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -4499,72 +2331,16 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flow-stoplight@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" - integrity sha512-rDjbZUKpN8OYhB0IE/vY/I8UWO/602IIJEU/76Tv4LvYnwHCk0BCsvz4eRr9n+FQcri7L5cyaXOo0+/Kh4HisA== - -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.12.1, follow-redirects@^1.14.0: +follow-redirects@^1.12.1: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== -for-each@^0.3.3, for-each@~0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -4575,18 +2351,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -4598,25 +2362,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^4.0.2, fs-extra@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -4625,23 +2371,6 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - 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" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4657,68 +2386,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: +functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache-core@^2.13.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" - integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== - dependencies: - abstract-leveldown "3.0.0" - async "2.6.2" - bip39 "2.5.0" - cachedown "1.0.0" - clone "2.1.2" - debug "3.2.6" - encoding-down "5.0.4" - eth-sig-util "3.0.0" - ethereumjs-abi "0.6.8" - ethereumjs-account "3.0.0" - ethereumjs-block "2.2.2" - ethereumjs-common "1.5.0" - ethereumjs-tx "2.1.2" - ethereumjs-util "6.2.1" - ethereumjs-vm "4.2.0" - heap "0.2.6" - keccak "3.0.1" - level-sublevel "6.6.4" - levelup "3.1.1" - lodash "4.17.20" - lru-cache "5.1.1" - merkle-patricia-tree "3.0.0" - patch-package "6.2.2" - seedrandom "3.0.1" - source-map-support "0.5.12" - tmp "0.1.0" - web3-provider-engine "14.2.1" - websocket "1.0.32" - optionalDependencies: - ethereumjs-wallet "0.6.5" - web3 "1.2.11" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -4729,7 +2401,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2: version "1.1.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== @@ -4738,45 +2410,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.3" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -4784,6 +2417,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -4796,7 +2436,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.3, glob@~7.2.0: +glob@^7.1.2, glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4808,25 +2448,19 @@ glob@^7.1.2, glob@^7.1.3, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" -globby@^11.0.4: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -4838,114 +2472,35 @@ globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -got@9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== +hardhat@2.11.2: + version "2.11.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" + integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hardhat-deploy@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.9.1.tgz#878bb10ef1bfcfee892477c2133295a250721672" - integrity sha512-GUrLlsBKZqWJ2isFDnpnlnyLuIDqES7mEFGm4P7GutG2jeBebvTg2wCNh3RTW/rpHUtU66yCZXfy+LeD0QXFbg== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.1" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.1" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/contracts" "^5.4.1" - "@ethersproject/providers" "^5.4.4" - "@ethersproject/solidity" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wallet" "^5.4.0" - "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - -hardhat-etherscan@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hardhat-etherscan/-/hardhat-etherscan-1.0.1.tgz#db22142ccd101c4a2c6c6b12232a4daf4657e4a1" - integrity sha512-FShbbcrmxLK0n1JJfRO0xq6CfEsbynt0HiNHQYvY9GOQ9UDTHRAtZT4+P20cn/yAqfyQl4bgw3URxvvNN85HXA== - -hardhat-upgrades@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/hardhat-upgrades/-/hardhat-upgrades-0.0.0.tgz#f3338e2236e6db06a3e24726435a87ac3cf84ccc" - integrity sha512-sUeUZyg+yNPWl4OSmaktvcebI6/KLfhTxW+TIwyynWTyGd50123c1liBp7FEJxnl/GFC2uPE+dbB5jHMVXBnpQ== - dependencies: - "@openzeppelin/hardhat-upgrades" "*" - -hardhat@^2.9.7: - version "2.10.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.10.1.tgz#37fdc0c96d6a5d16b322269db2ad8f9f115c4046" - integrity sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.1" - "@ethereumjs/vm" "^5.9.0" "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/solidity-analyzer" "^0.0.3" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.2" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" @@ -4960,15 +2515,14 @@ hardhat@^2.9.7: env-paths "^2.2.0" ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.4" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + keccak "^3.0.2" lodash "^4.17.11" - merkle-patricia-tree "^4.2.4" mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" @@ -4976,28 +2530,14 @@ hardhat@^2.9.7: raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - slash "^3.0.0" solc "0.7.3" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" tsort "0.0.1" undici "^5.4.0" uuid "^8.3.2" ws "^7.4.6" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5008,69 +2548,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3, has@~1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -5099,11 +2582,6 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -heap@0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" - integrity sha512-MzzWcnfB1e4EG2vHi3dXHoBupmuXNZzx6pY6HldVS55JKKBoq3xOyzfSaZRkJp37HIhEYC78knabHff3zc4dQQ== - hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5113,24 +2591,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -5142,20 +2602,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -5164,10 +2610,10 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -husky@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c" - integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA== +husky@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" + integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -5176,21 +2622,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13: +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -5200,21 +2632,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - immutable@^4.0.0-rc.12: version "4.1.0" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" @@ -5228,7 +2650,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5236,11 +2658,6 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5259,7 +2676,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5283,27 +2700,6 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -5311,45 +2707,11 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5357,121 +2719,21 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -5482,12 +2744,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -5499,198 +2756,49 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^1.0.0, is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== +js-sdsl@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" + integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== - -js-yaml@4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0: +js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -5698,87 +2806,21 @@ js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9" - integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA== - dependencies: - async "^2.0.1" - babel-preset-env "^1.7.0" - babelify "^7.3.0" - json-rpc-error "^2.0.0" - promise-to-callback "^1.0.0" - safe-event-emitter "^1.0.1" - -json-rpc-error@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" - integrity sha512-EwUeWP+KgAZ/xqFpaP6YDAXMtCJi+o/QQpCQFIYyxr01AdADi2y413eM8hSqJcoQym9WMePAJWoaODEJufC4Ug== - dependencies: - inherits "^2.0.1" - -json-rpc-random-id@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -5793,39 +2835,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -keccak@^3.0.0: +keccak@^3.0.0, keccak@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== @@ -5834,44 +2844,6 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5879,209 +2851,26 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== - dependencies: - errno "~0.1.1" - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== - dependencies: - errno "~0.1.1" - -level-iterator-stream@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" - integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.5" - xtend "^4.0.0" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - -level-iterator-stream@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" - integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.3.6" - xtend "^4.0.0" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" - integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== - dependencies: - level-packager "~4.0.0" - memdown "~3.0.0" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-packager@~4.0.0: +level-supports@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" - integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== - dependencies: - encoding-down "~5.0.0" - levelup "^3.0.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== -level-post@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" - integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== - dependencies: - ltgt "^2.1.2" - -level-sublevel@6.6.4: - version "6.6.4" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba" - integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA== - dependencies: - bytewise "~1.1.0" - level-codec "^9.0.0" - level-errors "^2.0.0" - level-iterator-stream "^2.0.3" - ltgt "~2.1.1" - pull-defer "^0.2.2" - pull-level "^2.0.3" - pull-stream "^3.6.8" - typewiselite "~1.0.0" - xtend "~4.0.0" - -level-supports@~1.0.0: +level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-ws@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== - dependencies: - readable-stream "~1.0.15" - xtend "~2.1.1" - -level-ws@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" - integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: - inherits "^2.0.3" - readable-stream "^2.2.8" - xtend "^4.0.1" + buffer "^6.0.3" + module-error "^1.0.1" -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -levelup@3.1.1, levelup@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" - integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== - dependencies: - deferred-leveldown "~4.0.0" - level-errors "~2.0.0" - level-iterator-stream "~3.0.0" - xtend "~4.0.0" - -levelup@^1.2.1: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" + browser-level "^1.0.1" + classic-level "^1.2.0" levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -6091,16 +2880,13 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" + prelude-ls "^1.2.1" + type-check "~0.4.0" locate-path@^2.0.0: version "2.0.0" @@ -6117,17 +2903,12 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== - -lodash@4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6140,47 +2921,20 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -looper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" - integrity sha512-6DzMHJcjbQX/UPHc1rRCBfKlLwDkvuGZ715cIR36wSdYqWXFT35uLXq5P/2orl3tz+t+VOVPxw4yPinQlUDGDQ== - -looper@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" - integrity sha512-LJ9wplN/uSn72oJRsXTx+snxPet5c8XiZmOKCm906NVYu+ag6SB6vUcnJcWxgnl2NfbIyeobAn7Bwv6xRj2XJg== - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + get-func-name "^2.0.0" -lru-cache@5.1.1, lru-cache@^5.1.1: +lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" -lru-cache@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - integrity sha512-91gyOKTc2k66UG6kHiH4h3S2eltcPwE1STVfMYC/NG+nZwf8IIuiamfmpGZjpbbxzSyEJaLC0tNSmhjlQUTJow== - dependencies: - pseudomap "^1.0.1" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6193,38 +2947,11 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== -ltgt@^2.1.2, ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -ltgt@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" - integrity sha512-5VjHC5GsENtIi5rbJd+feEpDKhfr7j0odoUR2Uh978g+2p93nd5o34cTjQWohXsPsCZeqoDnIqEf88mPCe0Pfw== - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -6239,105 +2966,29 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memdown@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== dependencies: - abstract-leveldown "~2.7.1" + abstract-level "^1.0.0" functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memdown@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" - integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== - dependencies: - abstract-leveldown "~5.0.0" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" + module-error "^1.0.1" memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" - integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== - dependencies: - async "^2.6.1" - ethereumjs-util "^5.2.0" - level-mem "^3.0.1" - level-ws "^1.0.0" - readable-stream "^3.0.6" - rlp "^2.0.0" - semaphore ">=1.0.1" - -merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== - dependencies: - async "^1.4.2" - ethereumjs-util "^5.0.0" - level-ws "0.0.0" - levelup "^1.2.1" - memdown "^1.0.0" - readable-stream "^2.0.0" - rlp "^2.0.0" - semaphore ">=1.0.1" - -merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -merkletreejs@0.2.31: - version "0.2.31" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.31.tgz#c8ae7bebf1678c0f92d6d8266aeddd3d97cc0c37" - integrity sha512-dnK2sE43OebmMe5Qnq1wXvvMIjZjm1u6CcB2KeW6cghlN4p21OpCUr2p56KTVf20KJItNChVsGnimcscp9f+yw== +merkletreejs@^0.2.32: + version "0.2.32" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223" + integrity sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ== dependencies: bignumber.js "^9.0.1" buffer-reverse "^1.0.1" @@ -6345,31 +2996,7 @@ merkletreejs@0.2.31: treeify "^1.1.0" web3-utils "^1.3.4" -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -6377,48 +3004,11 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -6436,54 +3026,19 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.6: +minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -6525,122 +3080,41 @@ mocha@^10.0.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - nanoid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -6651,60 +3125,15 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@~1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== number-to-bn@1.7.0: version "1.7.0" @@ -6714,102 +3143,17 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: +object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" - integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - obliterator@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== -oboe@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -6823,14 +3167,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -open@^7.4.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6843,38 +3179,23 @@ optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - lcid "^1.0.0" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -6910,13 +3231,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -6929,29 +3243,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -6960,65 +3251,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -patch-package@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" - integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" - cross-spawn "^6.0.5" - find-yarn-workspace-root "^1.2.1" - fs-extra "^7.0.1" - is-ci "^2.0.0" - klaw-sync "^6.0.0" - minimist "^1.2.0" - rimraf "^2.6.3" - semver "^5.6.0" - slash "^2.0.0" - tmp "^0.0.33" - -patch-package@^6.2.2: - version "6.4.7" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" - integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" - cross-spawn "^6.0.5" - find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" - is-ci "^2.0.0" - klaw-sync "^6.0.0" - minimist "^1.2.0" - open "^7.4.2" - rimraf "^2.6.3" - semver "^5.6.0" - slash "^2.0.0" - tmp "^0.0.33" - -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -7029,7 +3261,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== @@ -7044,25 +3276,16 @@ path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-parse@^1.0.6, path-parse@^1.0.7: +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -7073,7 +3296,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.17: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -7084,63 +3307,21 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -postinstall-postinstall@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" - integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== - -precond@0.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -7148,235 +3329,58 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier-plugin-solidity@1.0.0-beta.13: - version "1.0.0-beta.13" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.13.tgz#2e31c5a5e2df3239e5e93704f9bcafe09a5f8190" - integrity sha512-AWMDRSabpNQMX7EqdDKgx/UVtQY6e3/Iu4gSPYDGvgiWl+OY8kYhAMll2NZHK/X+F0YYpPHYpebkDh7MGxbB1g== +prettier-plugin-solidity@^1.0.0-beta.24: + version "1.0.0-beta.24" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.24.tgz#67573ca87098c14f7ccff3639ddd8a4cab2a87eb" + integrity sha512-6JlV5BBTWzmDSq4kZ9PTXc3eLOX7DF5HpbqmmaF+kloyUwOZbJ12hIYsUaZh2fVgZdV2t0vWcvY6qhILhlzgqg== dependencies: - "@solidity-parser/parser" "^0.13.2" - emoji-regex "^9.2.2" + "@solidity-parser/parser" "^0.14.3" + emoji-regex "^10.1.0" escape-string-regexp "^4.0.0" - semver "^7.3.5" + semver "^7.3.7" solidity-comments-extractor "^0.0.7" - string-width "^4.2.2" - -prettier@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== + string-width "^4.2.3" prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.1.2: +prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-to-callback@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== - dependencies: - is-fn "^1.0.0" - set-immediate-shim "^1.0.1" - -proper-lockfile@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pull-cat@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" - integrity sha512-i3w+xZ3DCtTVz8S62hBOuNLRHqVDsHMNZmgrZsjPnsxXUgbWtXEee84lo1XswE7W2a3WHyqsNuDJTjVLAQR8xg== - -pull-defer@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" - integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== - -pull-level@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" - integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== - dependencies: - level-post "^1.0.7" - pull-cat "^1.1.9" - pull-live "^1.0.1" - pull-pushable "^2.0.0" - pull-stream "^3.4.0" - pull-window "^2.1.4" - stream-to-pull-stream "^1.7.1" - -pull-live@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" - integrity sha512-tkNz1QT5gId8aPhV5+dmwoIiA1nmfDOzJDlOOUpU5DNusj6neNd3EePybJ5+sITr2FwyCs/FVpx74YMCfc8YeA== - dependencies: - pull-cat "^1.1.9" - pull-stream "^3.4.0" - -pull-pushable@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" - integrity sha512-M7dp95enQ2kaHvfCt2+DJfyzgCSpWVR2h2kWYnVsW6ZpxQBx5wOu0QWOvQPVoPnBLUZYitYP2y7HyHkLQNeGXg== - -pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: - version "3.6.14" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" - integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== - -pull-window@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" - integrity sha512-cbDzN76BMlcGG46OImrgpkMf/VkCnupj8JhsrpBw3aWBM9ye345aYnqitmZCgauBkc0HbbRRn9hCnsa3k2FNUg== - dependencies: - looper "^2.0.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -qs@^6.7.0, qs@^6.9.4: +qs@^6.7.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1, raw-body@^2.4.1: +raw-body@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -7386,47 +3390,7 @@ raw-body@2.5.1, raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -7435,16 +3399,6 @@ readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -7452,42 +3406,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerate@^1.2.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -7498,90 +3416,16 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== - dependencies: - jsesc "~0.5.0" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== - dependencies: - is-finite "^1.0.0" - -request@^2.79.0, request@^2.85.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== - require-from-string@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -7592,11 +3436,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - resolve@1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -7604,22 +3443,6 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.8.1, resolve@~1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -7628,23 +3451,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== - dependencies: - through "~2.3.4" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -7657,13 +3463,20 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.6.3: +rimraf@^2.2.8: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -7672,7 +3485,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -7684,6 +3497,13 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7703,47 +3523,21 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-event-emitter@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" - integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== - dependencies: - events "^3.0.0" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -scryptsy@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" - integrity sha512-aldIRgMozSJ/Gl6K6qmJZysRP82lz83Wb42vl4PWN8SaLFHIaOzLPc9nUUW2jQN88CuGm5q5HefJ9jZ3nWSmTw== - dependencies: - pbkdf2 "^3.0.3" - secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -7753,22 +3547,7 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -seedrandom@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" - integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== - -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== - -semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" - integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver@^5.5.0, semver@^5.5.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7778,37 +3557,13 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.5: +semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -7816,47 +3571,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7882,11 +3596,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -7898,32 +3624,8 @@ side-channel@^1.0.4: signal-exit@^3.0.2: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: version "3.0.0" @@ -7939,36 +3641,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -7984,31 +3656,6 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solc@^0.4.20: - version "0.4.26" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" - integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== - dependencies: - fs-extra "^0.30.0" - memorystream "^0.3.1" - require-from-string "^1.1.0" - semver "^5.3.0" - yargs "^4.7.1" - -solc@^0.6.3: - version "0.6.12" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.12.tgz#48ac854e0c729361b22a7483645077f58cba080e" - integrity sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - solhint-plugin-prettier@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b" @@ -8016,12 +3663,12 @@ solhint-plugin-prettier@0.0.5: dependencies: prettier-linter-helpers "^1.0.0" -solhint@3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.6.tgz#abe9af185a9a7defefba480047b3e42cbe9a1210" - integrity sha512-HWUxTAv2h7hx3s3hAab3ifnlwb02ZWhwFU/wSudUHqteMS3ll9c+m1FlGn9V8ztE2rf3Z82fQZA005Wv7KpcFA== +solhint@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" + integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== dependencies: - "@solidity-parser/parser" "^0.13.2" + "@solidity-parser/parser" "^0.14.1" ajv "^6.6.1" antlr4 "4.7.1" ast-parents "0.0.1" @@ -8038,42 +3685,11 @@ solhint@3.3.6: optionalDependencies: prettier "^1.14.3" -solidity-ast@^0.4.15: - version "0.4.35" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.35.tgz#82e064b14dc989338123264bde2235cad751f128" - integrity sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA== - solidity-comments-extractor@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - source-map-support@^0.5.13: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -8082,74 +3698,16 @@ source-map-support@^0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -8157,41 +3715,11 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stream-to-pull-stream@^1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" - integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== - dependencies: - looper "^3.0.0" - pull-stream "^3.2.3" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -8209,7 +3737,7 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8218,33 +3746,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@~1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz#824960787db37a9e24711802ed0c1d1c0254f83e" - integrity sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -8252,25 +3753,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -8292,13 +3774,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -8306,7 +3781,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8323,11 +3798,6 @@ supports-color@8.1.1: dependencies: has-flag "^4.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8342,28 +3812,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swarm-js@^0.1.40: - version "0.1.40" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" - integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^7.1.0" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -8374,76 +3822,16 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tape@^4.6.3: - version "4.15.1" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.1.tgz#88fb662965a11f9be1bddb04c11662d7eceb129e" - integrity sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw== - dependencies: - call-bind "~1.0.2" - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - glob "~7.2.0" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.1.4" - minimist "~1.2.6" - object-inspect "~1.12.0" - resolve "~1.22.0" - resumer "~0.0.0" - string.prototype.trim "~1.2.5" - through "~2.3.8" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -test-value@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" - integrity sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w== - dependencies: - array-back "^1.0.3" - typical "^2.6.0" - -testrpc@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" - integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through2@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6, through@~2.3.4, through@~2.3.8: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timed-out@^4.0.0, timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -8451,38 +3839,6 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -8490,80 +3846,22 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - treeify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - -ts-essentials@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" - integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== - -ts-essentials@^6.0.3: - version "6.0.7" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.7.tgz#5f4880911b7581a873783740ce8b94da163d18a6" - integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw== - -ts-generator@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" - integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== - dependencies: - "@types/mkdirp" "^0.5.2" - "@types/prettier" "^2.1.1" - "@types/resolve" "^0.0.8" - chalk "^2.4.1" - glob "^7.1.2" - mkdirp "^0.5.1" - prettier "^2.1.2" - resolve "^1.8.1" - ts-essentials "^1.0.0" - -ts-node@10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" - integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -8574,6 +3872,7 @@ ts-node@10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: @@ -8593,28 +3892,23 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: +tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.0, tweetnacl@^1.0.3: +tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -8627,6 +3921,11 @@ type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -8637,139 +3936,26 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typechain@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-3.0.0.tgz#d5a47700831f238e43f7429b987b4bb54849b92e" - integrity sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg== - 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" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" - integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== - -typewise-core@^1.2, typewise-core@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" - integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== - -typewise@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" - integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== - dependencies: - typewise-core "^1.2.0" - -typewiselite@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" - integrity sha512-J9alhjVHupW3Wfz6qFRGgQw0N3gr8hOkw6zm7FZ6UR1Cse/oD9/JVok7DNE9TT9IbciDHX2Ex9+ksE6cRmtymw== - -typical@^2.6.0, typical@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" - integrity sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -underscore@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +typescript@^4.8.3: + version "4.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88" + integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== undici@^5.4.0: version "5.8.2" resolved "https://registry.yarnpkg.com/undici/-/undici-5.8.2.tgz#071fc8a6a5d24db0ad510ad442f607d9b09d5eec" integrity sha512-3KLq3pXMS0Y4IELV045fTxqz04Nk9Ms7yfBBHum3yxsTR4XNn+ZCaUbf/mWitgYDAhsplQ0B1G4S5D345lMO3A== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unorm@^1.3.3: - version "1.6.0" - resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" - integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -8777,376 +3963,27 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== - dependencies: - prepend-http "^1.0.1" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: +utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -web3-bzz@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" - integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - underscore "1.9.1" - -web3-core-helpers@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" - integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.11" - web3-utils "1.2.11" - -web3-core-method@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" - integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.2.11" - web3-core-promievent "1.2.11" - web3-core-subscriptions "1.2.11" - web3-utils "1.2.11" - -web3-core-promievent@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" - integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" - integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.11" - web3-providers-http "1.2.11" - web3-providers-ipc "1.2.11" - web3-providers-ws "1.2.11" - -web3-core-subscriptions@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" - integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.2.11" - -web3-core@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" - integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.2.11" - web3-core-method "1.2.11" - web3-core-requestmanager "1.2.11" - web3-utils "1.2.11" - -web3-eth-abi@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" - integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== - dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.11" - -web3-eth-accounts@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" - integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== - dependencies: - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-js "^3.0.1" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.2.11" - web3-core-helpers "1.2.11" - web3-core-method "1.2.11" - web3-utils "1.2.11" - -web3-eth-contract@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" - integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== - dependencies: - "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.2.11" - web3-core-helpers "1.2.11" - web3-core-method "1.2.11" - web3-core-promievent "1.2.11" - web3-core-subscriptions "1.2.11" - web3-eth-abi "1.2.11" - web3-utils "1.2.11" - -web3-eth-ens@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" - integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.11" - web3-core-helpers "1.2.11" - web3-core-promievent "1.2.11" - web3-eth-abi "1.2.11" - web3-eth-contract "1.2.11" - web3-utils "1.2.11" - -web3-eth-iban@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" - integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== - dependencies: - bn.js "^4.11.9" - web3-utils "1.2.11" - -web3-eth-personal@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" - integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.2.11" - web3-core-helpers "1.2.11" - web3-core-method "1.2.11" - web3-net "1.2.11" - web3-utils "1.2.11" - -web3-eth@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" - integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== - dependencies: - underscore "1.9.1" - web3-core "1.2.11" - web3-core-helpers "1.2.11" - web3-core-method "1.2.11" - web3-core-subscriptions "1.2.11" - web3-eth-abi "1.2.11" - web3-eth-accounts "1.2.11" - web3-eth-contract "1.2.11" - web3-eth-ens "1.2.11" - web3-eth-iban "1.2.11" - web3-eth-personal "1.2.11" - web3-net "1.2.11" - web3-utils "1.2.11" - -web3-net@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" - integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== - dependencies: - web3-core "1.2.11" - web3-core-method "1.2.11" - web3-utils "1.2.11" - -web3-provider-engine@14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" - integrity sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^3.0.0" - eth-json-rpc-infura "^3.1.0" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-rpc-error "^2.0.0" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - -web3-providers-http@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" - integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== - dependencies: - web3-core-helpers "1.2.11" - xhr2-cookies "1.1.0" - -web3-providers-ipc@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" - integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.11" - -web3-providers-ws@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" - integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.2.11" - websocket "^1.0.31" - -web3-shh@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" - integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== - dependencies: - web3-core "1.2.11" - web3-core-method "1.2.11" - web3-core-subscriptions "1.2.11" - web3-net "1.2.11" - -web3-utils@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" - integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== - 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" - underscore "1.9.1" - utf8 "3.0.0" +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -web3-utils@^1.0.0-beta.31, web3-utils@^1.3.4: +web3-utils@^1.3.4: version "1.7.5" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.5.tgz#081a952ac6e0322e25ac97b37358a43c7372ef6a" integrity sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw== @@ -9159,77 +3996,6 @@ web3-utils@^1.0.0-beta.31, web3-utils@^1.3.4: randombytes "^2.1.0" utf8 "3.0.0" -web3@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" - integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== - dependencies: - web3-bzz "1.2.11" - web3-core "1.2.11" - web3-eth "1.2.11" - web3-eth-personal "1.2.11" - web3-net "1.2.11" - web3-shh "1.2.11" - web3-utils "1.2.11" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@1.0.32: - version "1.0.32" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" - integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -websocket@^1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-fetch@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== - which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -9237,12 +4003,14 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -9252,14 +4020,6 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9286,92 +4046,17 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^5.1.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== - dependencies: - async-limiter "~1.0.0" - ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== - dependencies: - cookiejar "^2.1.1" - -xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== - dependencies: - object-keys "~0.4.0" - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -9386,14 +4071,6 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -9422,26 +4099,6 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== - 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" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 90e413ded3cc23ed3c7e803492e7e297ea964e39 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 13:41:11 +0200 Subject: [PATCH 02/31] Format code to new config --- .husky/pre-commit | 2 +- InterestRatesManagerUpgraded.sol | 2575 +++++++++++++++++ contracts/aave-v2/ExitPositionsManager.sol | 16 +- contracts/aave-v2/InterestRatesManager.sol | 12 +- contracts/aave-v2/MatchingEngine.sol | 4 +- contracts/aave-v2/MorphoUtils.sol | 4 +- contracts/aave-v2/lens/IndexesLens.sol | 42 +- contracts/aave-v2/lens/Lens.sol | 8 +- contracts/aave-v2/lens/MarketsLens.sol | 4 +- contracts/aave-v2/lens/RatesLens.sol | 22 +- contracts/aave-v2/lens/UsersLens.sol | 11 +- contracts/aave-v3/ExitPositionsManager.sol | 15 +- contracts/aave-v3/InterestRatesManager.sol | 12 +- contracts/aave-v3/Lens.sol | 54 +- contracts/aave-v3/MatchingEngine.sol | 4 +- contracts/aave-v3/MorphoUtils.sol | 4 +- contracts/aave-v3/RewardsManager.sol | 16 +- contracts/compound/lens/IndexesLens.sol | 42 +- contracts/compound/lens/RatesLens.sol | 24 +- contracts/compound/lens/RewardsLens.sol | 4 +- hardhat.config.ts | 19 +- test-foundry/aave-v2/TestGovernance.t.sol | 4 +- test-foundry/aave-v2/TestLens.t.sol | 62 +- test-foundry/aave-v2/TestLiquidate.t.sol | 15 +- test-foundry/aave-v2/TestRatesLens.t.sol | 12 +- test-foundry/aave-v2/TestRepay.t.sol | 18 +- test-foundry/aave-v2/TestWithdraw.t.sol | 14 +- test-foundry/aave-v3/TestGovernance.t.sol | 4 +- test-foundry/aave-v3/TestLens.t.sol | 28 +- test-foundry/aave-v3/TestLiquidate.t.sol | 15 +- test-foundry/aave-v3/TestRepay.t.sol | 18 +- test-foundry/aave-v3/TestRewards.t.sol | 4 +- test-foundry/aave-v3/TestWithdraw.t.sol | 14 +- test-foundry/compound/TestBorrow.t.sol | 3 +- test-foundry/compound/TestEth.t.sol | 12 +- test-foundry/compound/TestGovernance.t.sol | 2 +- test-foundry/compound/TestLens.t.sol | 34 +- test-foundry/compound/TestLiquidate.t.sol | 18 +- test-foundry/compound/TestRatesLens.t.sol | 12 +- test-foundry/compound/TestRepay.t.sol | 4 +- test-foundry/compound/TestWithdraw.t.sol | 7 +- test-foundry/prod/aave-v2/TestBorrow.t.sol | 8 +- test-foundry/prod/aave-v2/TestRepay.t.sol | 10 +- test-foundry/prod/aave-v2/TestSupply.t.sol | 8 +- test-foundry/prod/aave-v2/TestWithdraw.t.sol | 2 +- test-foundry/prod/compound/TestBorrow.t.sol | 2 +- test-foundry/prod/compound/TestRepay.t.sol | 4 +- test-foundry/prod/compound/TestSupply.t.sol | 2 +- test-foundry/prod/compound/TestWithdraw.t.sol | 2 +- 49 files changed, 2904 insertions(+), 328 deletions(-) create mode 100644 InterestRatesManagerUpgraded.sol diff --git a/.husky/pre-commit b/.husky/pre-commit index 49853cfe5..9359801c4 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -6,6 +6,6 @@ CHANGED_FILES=$(git diff --staged --name-only --diff-filter=d | grep -e "\.ts$" -e "\.sol$" | xargs) if [ -n "$CHANGED_FILES" ]; then - yarn prettier --config .prettierrc.json --write $CHANGED_FILES + yarn prettier --write $CHANGED_FILES git add $CHANGED_FILES fi diff --git a/InterestRatesManagerUpgraded.sol b/InterestRatesManagerUpgraded.sol new file mode 100644 index 000000000..f465519e3 --- /dev/null +++ b/InterestRatesManagerUpgraded.sol @@ -0,0 +1,2575 @@ +// SPDX-License-Identifier: GNU AGPLv3 +pragma solidity 0.8.13; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `recipient`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address recipient, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `sender` to `recipient` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom( + address sender, + address recipient, + uint256 amount + ) external returns (bool); + + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +interface IScaledBalanceToken { + /** + * @dev Returns the scaled balance of the user. The scaled balance is the sum of all the + * updated stored balance divided by the reserve's liquidity index at the moment of the update + * @param user The user whose balance is calculated + * @return The scaled balance of the user + **/ + function scaledBalanceOf(address user) external view returns (uint256); + + /** + * @dev Returns the scaled balance of the user and the scaled total supply. + * @param user The address of the user + * @return The scaled balance of the user + * @return The scaled balance and the scaled total supply + **/ + function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256); + + /** + * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index) + * @return The scaled total supply + **/ + function scaledTotalSupply() external view returns (uint256); +} + +interface IAToken is IERC20, IScaledBalanceToken { + /** + * @dev Emitted after the mint action + * @param from The address performing the mint + * @param value The amount being + * @param index The new liquidity index of the reserve + **/ + event Mint(address indexed from, uint256 value, uint256 index); + + /** + * @dev Mints `amount` aTokens to `user` + * @param user The address receiving the minted tokens + * @param amount The amount of tokens getting minted + * @param index The new liquidity index of the reserve + * @return `true` if the the previous balance of the user was 0 + */ + function mint( + address user, + uint256 amount, + uint256 index + ) external returns (bool); + + /** + * @dev Emitted after aTokens are burned + * @param from The owner of the aTokens, getting them burned + * @param target The address that will receive the underlying + * @param value The amount being burned + * @param index The new liquidity index of the reserve + **/ + event Burn(address indexed from, address indexed target, uint256 value, uint256 index); + + /** + * @dev Emitted during the transfer action + * @param from The user whose tokens are being transferred + * @param to The recipient + * @param value The amount being transferred + * @param index The new liquidity index of the reserve + **/ + event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index); + + /** + * @dev Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying` + * @param user The owner of the aTokens, getting them burned + * @param receiverOfUnderlying The address that will receive the underlying + * @param amount The amount being burned + * @param index The new liquidity index of the reserve + **/ + function burn( + address user, + address receiverOfUnderlying, + uint256 amount, + uint256 index + ) external; + + /** + * @dev Mints aTokens to the reserve treasury + * @param amount The amount of tokens getting minted + * @param index The new liquidity index of the reserve + */ + function mintToTreasury(uint256 amount, uint256 index) external; + + /** + * @dev Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken + * @param from The address getting liquidated, current owner of the aTokens + * @param to The recipient + * @param value The amount of tokens getting transferred + **/ + function transferOnLiquidation( + address from, + address to, + uint256 value + ) external; + + /** + * @dev Transfers the underlying asset to `target`. Used by the LendingPool to transfer + * assets in borrow(), withdraw() and flashLoan() + * @param user The recipient of the aTokens + * @param amount The amount getting transferred + * @return The amount transferred + **/ + function transferUnderlyingTo(address user, uint256 amount) external returns (uint256); + + function UNDERLYING_ASSET_ADDRESS() external view returns (address); +} + +/// @title PercentageMath. +/// @author Morpho Labs. +/// @custom:contact security@morpho.xyz +/// @notice Optimized version of Aave V3 math library PercentageMath to conduct percentage manipulations: https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/libraries/math/PercentageMath.sol +library PercentageMath { + /// CONSTANTS /// + + uint256 internal constant PERCENTAGE_FACTOR = 1e4; + uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4; + uint256 internal constant MAX_UINT256 = 2**256 - 1; + uint256 internal constant MAX_UINT256_MINUS_HALF_PERCENTAGE = 2**256 - 1 - 0.5e4; + + /// ERRORS /// + + // Thrown when percentage is above 100%. + error PercentageTooHigh(); + + /// INTERNAL /// + + /// @notice Executes a percentage multiplication. + /// @param x The value of which the percentage needs to be calculated. + /// @param percentage The percentage of the value to be calculated. + /// @return y The result of the multiplication. + function percentMul(uint256 x, uint256 percentage) internal pure returns (uint256 y) { + // Let percentage > 0 + // Overflow if x * percentage + HALF_PERCENTAGE_FACTOR > type(uint256).max + // <=> x * percentage > type(uint256).max - HALF_PERCENTAGE_FACTOR + // <=> x > (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage + assembly { + if mul(percentage, gt(x, div(MAX_UINT256_MINUS_HALF_PERCENTAGE, percentage))) { + revert(0, 0) + } + + y := div(add(mul(x, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR) + } + } + + /// @notice Executes a percentage division. + /// @param x The value of which the percentage needs to be calculated. + /// @param percentage The percentage of the value to be calculated. + /// @return y The result of the division. + function percentDiv(uint256 x, uint256 percentage) internal pure returns (uint256 y) { + // let percentage > 0 + // Overflow if x * PERCENTAGE_FACTOR + halfPercentage > type(uint256).max + // <=> x * PERCENTAGE_FACTOR > type(uint256).max - halfPercentage + // <=> x > type(uint256).max - halfPercentage / PERCENTAGE_FACTOR + assembly { + y := div(percentage, 2) + if iszero(mul(percentage, iszero(gt(x, div(sub(MAX_UINT256, y), PERCENTAGE_FACTOR))))) { + revert(0, 0) + } + + y := div(add(mul(x, PERCENTAGE_FACTOR), y), percentage) + } + } + + /// @notice Executes a weighted average, given an interval [x, y] and a percent p: x * (1 - p) + y * p + /// @param x The value at the start of the interval (included). + /// @param y The value at the end of the interval (included). + /// @param percentage The percentage of the interval to be calculated. + /// @return the average of x and y, weighted by percentage. + function weightedAvg( + uint256 x, + uint256 y, + uint256 percentage + ) internal pure returns (uint256) { + if (percentage > PERCENTAGE_FACTOR) revert PercentageTooHigh(); + + return percentMul(x, PERCENTAGE_FACTOR - percentage) + percentMul(y, percentage); + } +} + +/// @title WadRayMath. +/// @author Morpho Labs. +/// @custom:contact security@morpho.xyz +/// @notice Optimized version of Aave V3 math library WadRayMath to conduct wad and ray manipulations: https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/libraries/math/WadRayMath.sol +library WadRayMath { + /// CONSTANTS /// + + uint256 internal constant WAD = 1e18; + uint256 internal constant HALF_WAD = 0.5e18; + uint256 internal constant RAY = 1e27; + uint256 internal constant HALF_RAY = 0.5e27; + uint256 internal constant WAD_RAY_RATIO = 1e9; + uint256 internal constant HALF_WAD_RAY_RATIO = 0.5e9; + uint256 internal constant MAX_UINT256 = 2**256 - 1; // Not possible to use type(uint256).max in yul. + uint256 internal constant MAX_UINT256_MINUS_HALF_WAD = 2**256 - 1 - 0.5e18; + uint256 internal constant MAX_UINT256_MINUS_HALF_RAY = 2**256 - 1 - 0.5e27; + + /// INTERNAL /// + + /// @dev Multiplies two wad, rounding half up to the nearest wad. + /// @param x Wad. + /// @param y Wad. + /// @return z The result of x * y, in wad. + function wadMul(uint256 x, uint256 y) internal pure returns (uint256 z) { + // Let y > 0 + // Overflow if (x * y + HALF_WAD) > type(uint256).max + // <=> x * y > type(uint256).max - HALF_WAD + // <=> x > (type(uint256).max - HALF_WAD) / y + assembly { + if mul(y, gt(x, div(MAX_UINT256_MINUS_HALF_WAD, y))) { + revert(0, 0) + } + + z := div(add(mul(x, y), HALF_WAD), WAD) + } + } + + /// @dev Divides two wad, rounding half up to the nearest wad. + /// @param x Wad. + /// @param y Wad. + /// @return z The result of x / y, in wad. + function wadDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + // Overflow if y == 0 + // Overflow if (x * WAD + y / 2) > type(uint256).max + // <=> x * WAD > type(uint256).max - y / 2 + // <=> x > (type(uint256).max - y / 2) / WAD + assembly { + z := div(y, 2) + if iszero(mul(y, iszero(gt(x, div(sub(MAX_UINT256, z), WAD))))) { + revert(0, 0) + } + + z := div(add(mul(x, WAD), z), y) + } + } + + /// @dev Multiplies two ray, rounding half up to the nearest ray. + /// @param x Ray. + /// @param y Ray. + /// @return z The result of x * y, in ray. + function rayMul(uint256 x, uint256 y) internal pure returns (uint256 z) { + // Let y > 0 + // Overflow if (x * y + HALF_RAY) > type(uint256).max + // <=> x * y > type(uint256).max - HALF_RAY + // <=> x > (type(uint256).max - HALF_RAY) / y + assembly { + if mul(y, gt(x, div(MAX_UINT256_MINUS_HALF_RAY, y))) { + revert(0, 0) + } + + z := div(add(mul(x, y), HALF_RAY), RAY) + } + } + + /// @dev Divides two ray, rounding half up to the nearest ray. + /// @param x Ray. + /// @param y Ray. + /// @return z The result of x / y, in ray. + function rayDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { + // Overflow if y == 0 + // Overflow if (x * RAY + y / 2) > type(uint256).max + // <=> x * RAY > type(uint256).max - y / 2 + // <=> x > (type(uint256).max - y / 2) / RAY + assembly { + z := div(y, 2) + if iszero(mul(y, iszero(gt(x, div(sub(MAX_UINT256, z), RAY))))) { + revert(0, 0) + } + + z := div(add(mul(x, RAY), z), y) + } + } + + /// @dev Casts ray down to wad. + /// @param x Ray. + /// @return y = x converted to wad, rounded half up to the nearest wad. + function rayToWad(uint256 x) internal pure returns (uint256 y) { + assembly { + // If x % WAD_RAY_RATIO >= HALF_WAD_RAY_RATIO, round up. + y := add(div(x, WAD_RAY_RATIO), iszero(lt(mod(x, WAD_RAY_RATIO), HALF_WAD_RAY_RATIO))) + } + } + + /// @dev Converts wad up to ray. + /// @param x Wad. + /// @return y = x converted in ray. + function wadToRay(uint256 x) internal pure returns (uint256 y) { + assembly { + y := mul(x, WAD_RAY_RATIO) + // Revert if y / WAD_RAY_RATIO != x + if iszero(eq(div(y, WAD_RAY_RATIO), x)) { + revert(0, 0) + } + } + } +} + +library Math { + function min(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + z := add(mul(x, lt(x, y)), mul(y, iszero(lt(x, y)))) + } + } + + function max(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + z := add(mul(x, gt(x, y)), mul(y, iszero(gt(x, y)))) + } + } + + /// @dev Returns max(x - y, 0). + function zeroFloorSub(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + z := mul(gt(x, y), sub(x, y)) + } + } + + /// @dev Returns x / y rounded up (x / y + boolAsInt(x % y > 0)). + function divUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + // Revert if y = 0 + if iszero(y) { + revert(0, 0) + } + + z := add(gt(mod(x, y), 0), div(x, y)) + } + } +} + +/** + * @title LendingPoolAddressesProvider contract + * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles + * - Acting also as factory of proxies and admin of those, so with right to change its implementations + * - Owned by the Aave Governance + * @author Aave + **/ +interface ILendingPoolAddressesProvider { + event MarketIdSet(string newMarketId); + event LendingPoolUpdated(address indexed newAddress); + event ConfigurationAdminUpdated(address indexed newAddress); + event EmergencyAdminUpdated(address indexed newAddress); + event LendingPoolConfiguratorUpdated(address indexed newAddress); + event LendingPoolCollateralManagerUpdated(address indexed newAddress); + event PriceOracleUpdated(address indexed newAddress); + event LendingRateOracleUpdated(address indexed newAddress); + event ProxyCreated(bytes32 id, address indexed newAddress); + event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy); + + function getMarketId() external view returns (string memory); + + function setMarketId(string calldata marketId) external; + + function setAddress(bytes32 id, address newAddress) external; + + function setAddressAsProxy(bytes32 id, address impl) external; + + function getAddress(bytes32 id) external view returns (address); + + function getLendingPool() external view returns (address); + + function setLendingPoolImpl(address pool) external; + + function getLendingPoolConfigurator() external view returns (address); + + function setLendingPoolConfiguratorImpl(address configurator) external; + + function getLendingPoolCollateralManager() external view returns (address); + + function setLendingPoolCollateralManager(address manager) external; + + function getPoolAdmin() external view returns (address); + + function setPoolAdmin(address admin) external; + + function getEmergencyAdmin() external view returns (address); + + function setEmergencyAdmin(address admin) external; + + function getPriceOracle() external view returns (address); + + function setPriceOracle(address priceOracle) external; + + function getLendingRateOracle() external view returns (address); + + function setLendingRateOracle(address lendingRateOracle) external; +} + +library DataTypes { + // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties. + struct ReserveData { + //stores the reserve configuration + ReserveConfigurationMap configuration; + //the liquidity index. Expressed in ray + uint128 liquidityIndex; + //variable borrow index. Expressed in ray + uint128 variableBorrowIndex; + //the current supply rate. Expressed in ray + uint128 currentLiquidityRate; + //the current variable borrow rate. Expressed in ray + uint128 currentVariableBorrowRate; + //the current stable borrow rate. Expressed in ray + uint128 currentStableBorrowRate; + uint40 lastUpdateTimestamp; + //tokens addresses + address aTokenAddress; + address stableDebtTokenAddress; + address variableDebtTokenAddress; + //address of the interest rate strategy + address interestRateStrategyAddress; + //the id of the reserve. Represents the position in the list of the active reserves + uint8 id; + } + + struct ReserveConfigurationMap { + //bit 0-15: LTV + //bit 16-31: Liq. threshold + //bit 32-47: Liq. bonus + //bit 48-55: Decimals + //bit 56: Reserve is active + //bit 57: reserve is frozen + //bit 58: borrowing is enabled + //bit 59: stable rate borrowing enabled + //bit 60-63: reserved + //bit 64-79: reserve factor + uint256 data; + } + + struct UserConfigurationMap { + uint256 data; + } + + enum InterestRateMode { + NONE, + STABLE, + VARIABLE + } +} + +interface ILendingPool { + /** + * @dev Emitted on deposit() + * @param reserve The address of the underlying asset of the reserve + * @param user The address initiating the deposit + * @param onBehalfOf The beneficiary of the deposit, receiving the aTokens + * @param amount The amount deposited + * @param referral The referral code used + **/ + event Deposit( + address indexed reserve, + address user, + address indexed onBehalfOf, + uint256 amount, + uint16 indexed referral + ); + + /** + * @dev Emitted on withdraw() + * @param reserve The address of the underlyng asset being withdrawn + * @param user The address initiating the withdrawal, owner of aTokens + * @param to Address that will receive the underlying + * @param amount The amount to be withdrawn + **/ + event Withdraw( + address indexed reserve, + address indexed user, + address indexed to, + uint256 amount + ); + + /** + * @dev Emitted on borrow() and flashLoan() when debt needs to be opened + * @param reserve The address of the underlying asset being borrowed + * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just + * initiator of the transaction on flashLoan() + * @param onBehalfOf The address that will be getting the debt + * @param amount The amount borrowed out + * @param borrowRateMode The rate mode: 1 for Stable, 2 for Variable + * @param borrowRate The numeric rate at which the user has borrowed + * @param referral The referral code used + **/ + event Borrow( + address indexed reserve, + address user, + address indexed onBehalfOf, + uint256 amount, + uint256 borrowRateMode, + uint256 borrowRate, + uint16 indexed referral + ); + + /** + * @dev Emitted on repay() + * @param reserve The address of the underlying asset of the reserve + * @param user The beneficiary of the repayment, getting his debt reduced + * @param repayer The address of the user initiating the repay(), providing the funds + * @param amount The amount repaid + **/ + event Repay( + address indexed reserve, + address indexed user, + address indexed repayer, + uint256 amount + ); + + /** + * @dev Emitted on swapBorrowRateMode() + * @param reserve The address of the underlying asset of the reserve + * @param user The address of the user swapping his rate mode + * @param rateMode The rate mode that the user wants to swap to + **/ + event Swap(address indexed reserve, address indexed user, uint256 rateMode); + + /** + * @dev Emitted on setUserUseReserveAsCollateral() + * @param reserve The address of the underlying asset of the reserve + * @param user The address of the user enabling the usage as collateral + **/ + event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user); + + /** + * @dev Emitted on setUserUseReserveAsCollateral() + * @param reserve The address of the underlying asset of the reserve + * @param user The address of the user enabling the usage as collateral + **/ + event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user); + + /** + * @dev Emitted on rebalanceStableBorrowRate() + * @param reserve The address of the underlying asset of the reserve + * @param user The address of the user for which the rebalance has been executed + **/ + event RebalanceStableBorrowRate(address indexed reserve, address indexed user); + + /** + * @dev Emitted on flashLoan() + * @param target The address of the flash loan receiver contract + * @param initiator The address initiating the flash loan + * @param asset The address of the asset being flash borrowed + * @param amount The amount flash borrowed + * @param premium The fee flash borrowed + * @param referralCode The referral code used + **/ + event FlashLoan( + address indexed target, + address indexed initiator, + address indexed asset, + uint256 amount, + uint256 premium, + uint16 referralCode + ); + + /** + * @dev Emitted when the pause is triggered. + */ + event Paused(); + + /** + * @dev Emitted when the pause is lifted. + */ + event Unpaused(); + + /** + * @dev Emitted when a borrower is liquidated. This event is emitted by the LendingPool via + * LendingPoolCollateral manager using a DELEGATECALL + * This allows to have the events in the generated ABI for LendingPool. + * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation + * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation + * @param user The address of the borrower getting liquidated + * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover + * @param liquidatedCollateralAmount The amount of collateral received by the liiquidator + * @param liquidator The address of the liquidator + * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants + * to receive the underlying collateral asset directly + **/ + event LiquidationCall( + address indexed collateralAsset, + address indexed debtAsset, + address indexed user, + uint256 debtToCover, + uint256 liquidatedCollateralAmount, + address liquidator, + bool receiveAToken + ); + + /** + * @dev Emitted when the state of a reserve is updated. NOTE: This event is actually declared + * in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal, + * the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it + * gets added to the LendingPool ABI + * @param reserve The address of the underlying asset of the reserve + * @param liquidityRate The new liquidity rate + * @param stableBorrowRate The new stable borrow rate + * @param variableBorrowRate The new variable borrow rate + * @param liquidityIndex The new liquidity index + * @param variableBorrowIndex The new variable borrow index + **/ + event ReserveDataUpdated( + address indexed reserve, + uint256 liquidityRate, + uint256 stableBorrowRate, + uint256 variableBorrowRate, + uint256 liquidityIndex, + uint256 variableBorrowIndex + ); + + /** + * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. + * - E.g. User deposits 100 USDC and gets in return 100 aUSDC + * @param asset The address of the underlying asset to deposit + * @param amount The amount to be deposited + * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user + * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens + * is a different wallet + * @param referralCode Code used to register the integrator originating the operation, for potential rewards. + * 0 if the action is executed directly by the user, without any middle-man + **/ + function deposit( + address asset, + uint256 amount, + address onBehalfOf, + uint16 referralCode + ) external; + + /** + * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned + * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC + * @param asset The address of the underlying asset to withdraw + * @param amount The underlying amount to be withdrawn + * - Send the value type(uint256).max in order to withdraw the whole aToken balance + * @param to Address that will receive the underlying, same as msg.sender if the user + * wants to receive it on his own wallet, or a different address if the beneficiary is a + * different wallet + * @return The final amount withdrawn + **/ + function withdraw( + address asset, + uint256 amount, + address to + ) external returns (uint256); + + /** + * @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower + * already deposited enough collateral, or he was given enough allowance by a credit delegator on the + * corresponding debt token (StableDebtToken or VariableDebtToken) + * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet + * and 100 stable/variable debt tokens, depending on the `interestRateMode` + * @param asset The address of the underlying asset to borrow + * @param amount The amount to be borrowed + * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable + * @param referralCode Code used to register the integrator originating the operation, for potential rewards. + * 0 if the action is executed directly by the user, without any middle-man + * @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself + * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator + * if he has been given credit delegation allowance + **/ + function borrow( + address asset, + uint256 amount, + uint256 interestRateMode, + uint16 referralCode, + address onBehalfOf + ) external; + + /** + * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned + * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address + * @param asset The address of the borrowed underlying asset previously borrowed + * @param amount The amount to repay + * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode` + * @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable + * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the + * user calling the function if he wants to reduce/remove his own debt, or the address of any other + * other borrower whose debt should be removed + * @return The final amount repaid + **/ + function repay( + address asset, + uint256 amount, + uint256 rateMode, + address onBehalfOf + ) external returns (uint256); + + /** + * @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa + * @param asset The address of the underlying asset borrowed + * @param rateMode The rate mode that the user wants to swap to + **/ + function swapBorrowRateMode(address asset, uint256 rateMode) external; + + /** + * @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. + * - Users can be rebalanced if the following conditions are satisfied: + * 1. Usage ratio is above 95% + * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been + * borrowed at a stable rate and depositors are not earning enough + * @param asset The address of the underlying asset borrowed + * @param user The address of the user to be rebalanced + **/ + function rebalanceStableBorrowRate(address asset, address user) external; + + /** + * @dev Allows depositors to enable/disable a specific deposited asset as collateral + * @param asset The address of the underlying asset deposited + * @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise + **/ + function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external; + + /** + * @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 + * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives + * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk + * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation + * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation + * @param user The address of the borrower getting liquidated + * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover + * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants + * to receive the underlying collateral asset directly + **/ + function liquidationCall( + address collateralAsset, + address debtAsset, + address user, + uint256 debtToCover, + bool receiveAToken + ) external; + + /** + * @dev Allows smartcontracts to access the liquidity of the pool within one transaction, + * as long as the amount taken plus a fee is returned. + * IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. + * For further details please visit https://developers.aave.com + * @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface + * @param assets The addresses of the assets being flash-borrowed + * @param amounts The amounts amounts being flash-borrowed + * @param modes Types of the debt to open if the flash loan is not returned: + * 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver + * 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address + * 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address + * @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2 + * @param params Variadic packed params to pass to the receiver as extra information + * @param referralCode Code used to register the integrator originating the operation, for potential rewards. + * 0 if the action is executed directly by the user, without any middle-man + **/ + function flashLoan( + address receiverAddress, + address[] calldata assets, + uint256[] calldata amounts, + uint256[] calldata modes, + address onBehalfOf, + bytes calldata params, + uint16 referralCode + ) external; + + /** + * @dev Returns the user account data across all the reserves + * @param user The address of the user + * @return totalCollateralETH the total collateral in ETH of the user + * @return totalDebtETH the total debt in ETH of the user + * @return availableBorrowsETH the borrowing power left of the user + * @return currentLiquidationThreshold the liquidation threshold of the user + * @return ltv the loan to value of the user + * @return healthFactor the current health factor of the user + **/ + function getUserAccountData(address user) + external + view + returns ( + uint256 totalCollateralETH, + uint256 totalDebtETH, + uint256 availableBorrowsETH, + uint256 currentLiquidationThreshold, + uint256 ltv, + uint256 healthFactor + ); + + function initReserve( + address reserve, + address aTokenAddress, + address stableDebtAddress, + address variableDebtAddress, + address interestRateStrategyAddress + ) external; + + function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress) + external; + + function setConfiguration(address reserve, uint256 configuration) external; + + /** + * @dev Returns the configuration of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The configuration of the reserve + **/ + function getConfiguration(address asset) + external + view + returns (DataTypes.ReserveConfigurationMap memory); + + /** + * @dev Returns the configuration of the user across all the reserves + * @param user The user address + * @return The configuration of the user + **/ + function getUserConfiguration(address user) + external + view + returns (DataTypes.UserConfigurationMap memory); + + /** + * @dev Returns the normalized income normalized income of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The reserve's normalized income + */ + function getReserveNormalizedIncome(address asset) external view returns (uint256); + + /** + * @dev Returns the normalized variable debt per unit of asset + * @param asset The address of the underlying asset of the reserve + * @return The reserve normalized variable debt + */ + function getReserveNormalizedVariableDebt(address asset) external view returns (uint256); + + /** + * @dev Returns the state and configuration of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The state of the reserve + **/ + function getReserveData(address asset) external view returns (DataTypes.ReserveData memory); + + function finalizeTransfer( + address asset, + address from, + address to, + uint256 amount, + uint256 balanceFromAfter, + uint256 balanceToBefore + ) external; + + function getReservesList() external view returns (address[] memory); + + function getAddressesProvider() external view returns (ILendingPoolAddressesProvider); + + function setPause(bool val) external; + + function paused() external view returns (bool); +} + +interface IEntryPositionsManager { + function supplyLogic( + address _poolToken, + address _supplier, + address _onBehalf, + uint256 _amount, + uint256 _maxGasForMatching + ) external; + + function borrowLogic( + address _poolToken, + uint256 _amount, + uint256 _maxGasForMatching + ) external; +} + +interface IExitPositionsManager { + function withdrawLogic( + address _poolToken, + uint256 _amount, + address _supplier, + address _receiver, + uint256 _maxGasForMatching + ) external; + + function repayLogic( + address _poolToken, + address _repayer, + address _onBehalf, + uint256 _amount, + uint256 _maxGasForMatching + ) external; + + function liquidateLogic( + address _poolTokenBorrowed, + address _poolTokenCollateral, + address _borrower, + uint256 _amount + ) external; + + function increaseP2PDeltasLogic(address _poolToken, uint256 _amount) external; +} + +interface IInterestRatesManager { + function updateIndexes(address _marketAddress) external; +} + +interface IOracle { + function consult(uint256 _amountIn) external returns (uint256); +} + +interface IIncentivesVault { + function isPaused() external view returns (bool); + + function bonus() external view returns (uint256); + + function MAX_BASIS_POINTS() external view returns (uint256); + + function incentivesTreasuryVault() external view returns (address); + + function oracle() external view returns (IOracle); + + function setOracle(IOracle _newOracle) external; + + function setIncentivesTreasuryVault(address _newIncentivesTreasuryVault) external; + + function setBonus(uint256 _newBonus) external; + + function setPauseStatus(bool _newStatus) external; + + function transferTokensToDao(address _token, uint256 _amount) external; + + function tradeRewardTokensForMorphoTokens(address _to, uint256 _amount) external; +} + +interface IAaveDistributionManager { + event AssetConfigUpdated(address indexed asset, uint256 emission); + event AssetIndexUpdated(address indexed asset, uint256 index); + event UserIndexUpdated(address indexed user, address indexed asset, uint256 index); + event DistributionEndUpdated(uint256 newDistributionEnd); + + /** + * @dev Sets the end date for the distribution + * @param distributionEnd The end date timestamp + **/ + function setDistributionEnd(uint256 distributionEnd) external; + + /** + * @dev Gets the end date for the distribution + * @return The end of the distribution + **/ + function getDistributionEnd() external view returns (uint256); + + /** + * @dev for backwards compatibility with the previous DistributionManager used + * @return The end of the distribution + **/ + function DISTRIBUTION_END() external view returns (uint256); + + /** + * @dev Returns the data of an user on a distribution + * @param user Address of the user + * @param asset The address of the reference asset of the distribution + * @return The new index + **/ + function getUserAssetData(address user, address asset) external view returns (uint256); + + /** + * @dev Returns the configuration of the distribution for a certain asset + * @param asset The address of the reference asset of the distribution + * @return The asset index, the emission per second and the last updated timestamp + **/ + function getAssetData(address asset) + external + view + returns ( + uint256, + uint256, + uint256 + ); +} + +interface IAaveIncentivesController is IAaveDistributionManager { + event RewardsAccrued(address indexed user, uint256 amount); + + event RewardsClaimed( + address indexed user, + address indexed to, + address indexed claimer, + uint256 amount + ); + + event ClaimerSet(address indexed user, address indexed claimer); + + /** + * @dev Whitelists an address to claim the rewards on behalf of another address + * @param user The address of the user + * @param claimer The address of the claimer + */ + function setClaimer(address user, address claimer) external; + + /** + * @dev Returns the whitelisted claimer for a certain address (0x0 if not set) + * @param user The address of the user + * @return The claimer address + */ + function getClaimer(address user) external view returns (address); + + /** + * @dev Configure assets for a certain rewards emission + * @param assets The assets to incentivize + * @param emissionsPerSecond The emission for each asset + */ + function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond) + external; + + /** + * @dev Called by the corresponding asset on any update that affects the rewards distribution + * @param asset The address of the user + * @param userBalance The balance of the user of the asset in the lending pool + * @param totalSupply The total supply of the asset in the lending pool + **/ + function handleAction( + address asset, + uint256 userBalance, + uint256 totalSupply + ) external; + + /** + * @dev Returns the total of rewards of an user, already accrued + not yet accrued + * @param user The address of the user + * @return The rewards + **/ + function getRewardsBalance(address[] calldata assets, address user) + external + view + returns (uint256); + + /** + * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards + * @param amount Amount of rewards to claim + * @param to Address that will be receiving the rewards + * @return Rewards claimed + **/ + function claimRewards( + address[] calldata assets, + uint256 amount, + address to + ) external returns (uint256); + + /** + * @dev Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must + * be whitelisted via "allowClaimOnBehalf" function by the RewardsAdmin role manager + * @param amount Amount of rewards to claim + * @param user Address to check and claim rewards + * @param to Address that will be receiving the rewards + * @return Rewards claimed + **/ + function claimRewardsOnBehalf( + address[] calldata assets, + uint256 amount, + address user, + address to + ) external returns (uint256); + + /** + * @dev returns the unclaimed rewards of the user + * @param user the address of the user + * @return the unclaimed user rewards + */ + function getUserUnclaimedRewards(address user) external view returns (uint256); + + /** + * @dev for backward compatibility with previous implementation of the Incentives controller + */ + function REWARD_TOKEN() external view returns (address); + + struct AssetData { + uint128 emissionPerSecond; + uint128 lastUpdateTimestamp; + uint256 index; + } + + function assets(address) external view returns (AssetData memory); +} + +interface IRewardsManager { + function initialize(address _morpho) external; + + function getUserIndex(address, address) external returns (uint256); + + function getUserUnclaimedRewards(address[] calldata, address) external view returns (uint256); + + function claimRewards( + IAaveIncentivesController _aaveIncentivesController, + address[] calldata, + address + ) external returns (uint256); + + function updateUserAssetAndAccruedRewards( + IAaveIncentivesController _aaveIncentivesController, + address _user, + address _asset, + uint256 _userBalance, + uint256 _totalBalance + ) external; +} + +// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol) + +/** + * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow + * checks. + * + * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can + * easily result in undesired exploitation or bugs, since developers usually + * assume that overflows raise errors. `SafeCast` restores this intuition by + * reverting the transaction when such an operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + * + * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing + * all math on `uint256` and `int256` and then downcasting. + */ +library SafeCast { + /** + * @dev Returns the downcasted uint224 from uint256, reverting on + * overflow (when the input is greater than largest uint224). + * + * Counterpart to Solidity's `uint224` operator. + * + * Requirements: + * + * - input must fit into 224 bits + */ + function toUint224(uint256 value) internal pure returns (uint224) { + require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); + return uint224(value); + } + + /** + * @dev Returns the downcasted uint128 from uint256, reverting on + * overflow (when the input is greater than largest uint128). + * + * Counterpart to Solidity's `uint128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + */ + function toUint128(uint256 value) internal pure returns (uint128) { + require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); + return uint128(value); + } + + /** + * @dev Returns the downcasted uint96 from uint256, reverting on + * overflow (when the input is greater than largest uint96). + * + * Counterpart to Solidity's `uint96` operator. + * + * Requirements: + * + * - input must fit into 96 bits + */ + function toUint96(uint256 value) internal pure returns (uint96) { + require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); + return uint96(value); + } + + /** + * @dev Returns the downcasted uint64 from uint256, reverting on + * overflow (when the input is greater than largest uint64). + * + * Counterpart to Solidity's `uint64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + */ + function toUint64(uint256 value) internal pure returns (uint64) { + require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); + return uint64(value); + } + + /** + * @dev Returns the downcasted uint32 from uint256, reverting on + * overflow (when the input is greater than largest uint32). + * + * Counterpart to Solidity's `uint32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + */ + function toUint32(uint256 value) internal pure returns (uint32) { + require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); + return uint32(value); + } + + /** + * @dev Returns the downcasted uint16 from uint256, reverting on + * overflow (when the input is greater than largest uint16). + * + * Counterpart to Solidity's `uint16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + */ + function toUint16(uint256 value) internal pure returns (uint16) { + require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); + return uint16(value); + } + + /** + * @dev Returns the downcasted uint8 from uint256, reverting on + * overflow (when the input is greater than largest uint8). + * + * Counterpart to Solidity's `uint8` operator. + * + * Requirements: + * + * - input must fit into 8 bits. + */ + function toUint8(uint256 value) internal pure returns (uint8) { + require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); + return uint8(value); + } + + /** + * @dev Converts a signed int256 into an unsigned uint256. + * + * Requirements: + * + * - input must be greater than or equal to 0. + */ + function toUint256(int256 value) internal pure returns (uint256) { + require(value >= 0, "SafeCast: value must be positive"); + return uint256(value); + } + + /** + * @dev Returns the downcasted int128 from int256, reverting on + * overflow (when the input is less than smallest int128 or + * greater than largest int128). + * + * Counterpart to Solidity's `int128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + * + * _Available since v3.1._ + */ + function toInt128(int256 value) internal pure returns (int128) { + require( + value >= type(int128).min && value <= type(int128).max, + "SafeCast: value doesn't fit in 128 bits" + ); + return int128(value); + } + + /** + * @dev Returns the downcasted int64 from int256, reverting on + * overflow (when the input is less than smallest int64 or + * greater than largest int64). + * + * Counterpart to Solidity's `int64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + * + * _Available since v3.1._ + */ + function toInt64(int256 value) internal pure returns (int64) { + require( + value >= type(int64).min && value <= type(int64).max, + "SafeCast: value doesn't fit in 64 bits" + ); + return int64(value); + } + + /** + * @dev Returns the downcasted int32 from int256, reverting on + * overflow (when the input is less than smallest int32 or + * greater than largest int32). + * + * Counterpart to Solidity's `int32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + * + * _Available since v3.1._ + */ + function toInt32(int256 value) internal pure returns (int32) { + require( + value >= type(int32).min && value <= type(int32).max, + "SafeCast: value doesn't fit in 32 bits" + ); + return int32(value); + } + + /** + * @dev Returns the downcasted int16 from int256, reverting on + * overflow (when the input is less than smallest int16 or + * greater than largest int16). + * + * Counterpart to Solidity's `int16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + * + * _Available since v3.1._ + */ + function toInt16(int256 value) internal pure returns (int16) { + require( + value >= type(int16).min && value <= type(int16).max, + "SafeCast: value doesn't fit in 16 bits" + ); + return int16(value); + } + + /** + * @dev Returns the downcasted int8 from int256, reverting on + * overflow (when the input is less than smallest int8 or + * greater than largest int8). + * + * Counterpart to Solidity's `int8` operator. + * + * Requirements: + * + * - input must fit into 8 bits. + * + * _Available since v3.1._ + */ + function toInt8(int256 value) internal pure returns (int8) { + require( + value >= type(int8).min && value <= type(int8).max, + "SafeCast: value doesn't fit in 8 bits" + ); + return int8(value); + } + + /** + * @dev Converts an unsigned uint256 into a signed int256. + * + * Requirements: + * + * - input must be less than or equal to maxInt256. + */ + function toInt256(uint256 value) internal pure returns (int256) { + // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive + require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); + return int256(value); + } +} + +library HeapOrdering { + struct Account { + address id; // The address of the account. + uint96 value; // The value of the account. + } + + struct HeapArray { + Account[] accounts; // All the accounts. + uint256 size; // The size of the heap portion of the structure, should be less than accounts length, the rest is an unordered array. + mapping(address => uint256) ranks; // A mapping from an address to a rank in accounts. Beware: ranks are shifted by one compared to indexes, so the first rank is 1 and not 0. + } + + /// CONSTANTS /// + + uint256 private constant ROOT = 1; + + /// ERRORS /// + + /// @notice Thrown when the address is zero at insertion. + error AddressIsZero(); + + /// INTERNAL /// + + /// @notice Updates an account in the `_heap`. + /// @dev Only call this function when `_id` is in the `_heap` with value `_formerValue` or when `_id` is not in the `_heap` with `_formerValue` equal to 0. + /// @param _heap The heap to modify. + /// @param _id The address of the account to update. + /// @param _formerValue The former value of the account to update. + /// @param _newValue The new value of the account to update. + /// @param _maxSortedUsers The maximum size of the heap. + function update( + HeapArray storage _heap, + address _id, + uint256 _formerValue, + uint256 _newValue, + uint256 _maxSortedUsers + ) internal { + uint96 formerValue = SafeCast.toUint96(_formerValue); + uint96 newValue = SafeCast.toUint96(_newValue); + + uint256 size = _heap.size; + uint256 newSize = computeSize(size, _maxSortedUsers); + if (size != newSize) _heap.size = newSize; + + if (formerValue != newValue) { + if (newValue == 0) remove(_heap, _id, formerValue); + else if (formerValue == 0) insert(_heap, _id, newValue, _maxSortedUsers); + else if (formerValue < newValue) increase(_heap, _id, newValue, _maxSortedUsers); + else decrease(_heap, _id, newValue); + } + } + + /// PRIVATE /// + + /// @notice Computes a new suitable size from `_size` that is smaller than `_maxSortedUsers`. + /// @dev We use division by 2 to remove the leaves of the heap. + /// @param _size The old size of the heap. + /// @param _maxSortedUsers The maximum size of the heap. + /// @return The new size computed. + function computeSize(uint256 _size, uint256 _maxSortedUsers) private pure returns (uint256) { + while (_size >= _maxSortedUsers) _size >>= 1; + return _size; + } + + /// @notice Returns the account of rank `_rank`. + /// @dev The first rank is 1 and the last one is length of the array. + /// @dev Only call this function with positive numbers. + /// @param _heap The heap to search in. + /// @param _rank The rank of the account. + /// @return The account of rank `_rank`. + function getAccount(HeapArray storage _heap, uint256 _rank) + private + view + returns (Account storage) + { + return _heap.accounts[_rank - 1]; + } + + /// @notice Sets the value at `_rank` in the `_heap` to be `_newValue`. + /// @dev The heap may lose its invariant about the order of the values stored. + /// @dev Only call this function with a rank within array's bounds. + /// @param _heap The heap to modify. + /// @param _rank The rank of the account in the heap to be set. + /// @param _newValue The new value to set the `_rank` to. + function setAccountValue( + HeapArray storage _heap, + uint256 _rank, + uint96 _newValue + ) private { + _heap.accounts[_rank - 1].value = _newValue; + } + + /// @notice Sets `_rank` in the `_heap` to be `_account`. + /// @dev The heap may lose its invariant about the order of the values stored. + /// @dev Only call this function with a rank within array's bounds. + /// @param _heap The heap to modify. + /// @param _rank The rank of the account in the heap to be set. + /// @param _account The account to set the `_rank` to. + function setAccount( + HeapArray storage _heap, + uint256 _rank, + Account memory _account + ) private { + _heap.accounts[_rank - 1] = _account; + _heap.ranks[_account.id] = _rank; + } + + /// @notice Swaps two accounts in the `_heap`. + /// @dev The heap may lose its invariant about the order of the values stored. + /// @dev Only call this function with ranks within array's bounds. + /// @param _heap The heap to modify. + /// @param _rank1 The rank of the first account in the heap. + /// @param _rank2 The rank of the second account in the heap. + function swap( + HeapArray storage _heap, + uint256 _rank1, + uint256 _rank2 + ) private { + if (_rank1 == _rank2) return; + Account memory accountOldRank1 = getAccount(_heap, _rank1); + Account memory accountOldRank2 = getAccount(_heap, _rank2); + setAccount(_heap, _rank1, accountOldRank2); + setAccount(_heap, _rank2, accountOldRank1); + } + + /// @notice Moves an account up the heap until its value is smaller than the one of its parent. + /// @dev This functions restores the invariant about the order of the values stored when the account at `_rank` is the only one with value greater than what it should be. + /// @param _heap The heap to modify. + /// @param _rank The rank of the account to move. + function shiftUp(HeapArray storage _heap, uint256 _rank) private { + Account memory accountToShift = getAccount(_heap, _rank); + uint256 valueToShift = accountToShift.value; + Account memory parentAccount; + while ( + _rank > ROOT && valueToShift > (parentAccount = getAccount(_heap, _rank >> 1)).value + ) { + setAccount(_heap, _rank, parentAccount); + _rank >>= 1; + } + setAccount(_heap, _rank, accountToShift); + } + + /// @notice Moves an account down the heap until its value is greater than the ones of its children. + /// @dev This functions restores the invariant about the order of the values stored when the account at `_rank` is the only one with value smaller than what it should be. + /// @param _heap The heap to modify. + /// @param _rank The rank of the account to move. + function shiftDown(HeapArray storage _heap, uint256 _rank) private { + uint256 size = _heap.size; + Account memory accountToShift = getAccount(_heap, _rank); + uint256 valueToShift = accountToShift.value; + uint256 childRank = _rank << 1; + // At this point, childRank (resp. childRank+1) is the rank of the left (resp. right) child. + + while (childRank <= size) { + Account memory childToSwap = getAccount(_heap, childRank); + + // Find the child with largest value. + if (childRank < size) { + Account memory rightChild = getAccount(_heap, childRank + 1); + if (rightChild.value > childToSwap.value) { + unchecked { + ++childRank; // This cannot overflow because childRank < size. + } + childToSwap = rightChild; + } + } + + if (childToSwap.value > valueToShift) { + setAccount(_heap, _rank, childToSwap); + _rank = childRank; + childRank <<= 1; + } else break; + } + setAccount(_heap, _rank, accountToShift); + } + + /// @notice Inserts an account in the `_heap`. + /// @dev Only call this function when `_id` is not in the `_heap`. + /// @dev Reverts with AddressIsZero if `_value` is 0. + /// @param _heap The heap to modify. + /// @param _id The address of the account to insert. + /// @param _value The value of the account to insert. + /// @param _maxSortedUsers The maximum size of the heap. + function insert( + HeapArray storage _heap, + address _id, + uint96 _value, + uint256 _maxSortedUsers + ) private { + // `_heap` cannot contain the 0 address. + if (_id == address(0)) revert AddressIsZero(); + + // Put the account at the end of accounts. + _heap.accounts.push(Account(_id, _value)); + uint256 accountsLength = _heap.accounts.length; + _heap.ranks[_id] = accountsLength; + + // Move the account at the end of the heap and restore the invariant. + uint256 newSize = _heap.size + 1; + swap(_heap, newSize, accountsLength); + shiftUp(_heap, newSize); + _heap.size = computeSize(newSize, _maxSortedUsers); + } + + /// @notice Decreases the amount of an account in the `_heap`. + /// @dev Only call this function when `_id` is in the `_heap` with a value greater than `_newValue`. + /// @param _heap The heap to modify. + /// @param _id The address of the account to decrease the amount. + /// @param _newValue The new value of the account. + function decrease( + HeapArray storage _heap, + address _id, + uint96 _newValue + ) private { + uint256 rank = _heap.ranks[_id]; + setAccountValue(_heap, rank, _newValue); + + // We only need to restore the invariant if the account is a node in the heap + if (rank <= _heap.size >> 1) shiftDown(_heap, rank); + } + + /// @notice Increases the amount of an account in the `_heap`. + /// @dev Only call this function when `_id` is in the `_heap` with a smaller value than `_newValue`. + /// @param _heap The heap to modify. + /// @param _id The address of the account to increase the amount. + /// @param _newValue The new value of the account. + /// @param _maxSortedUsers The maximum size of the heap. + function increase( + HeapArray storage _heap, + address _id, + uint96 _newValue, + uint256 _maxSortedUsers + ) private { + uint256 rank = _heap.ranks[_id]; + setAccountValue(_heap, rank, _newValue); + uint256 nextSize = _heap.size + 1; + + if (rank < nextSize) shiftUp(_heap, rank); + else { + swap(_heap, nextSize, rank); + shiftUp(_heap, nextSize); + _heap.size = computeSize(nextSize, _maxSortedUsers); + } + } + + /// @notice Removes an account in the `_heap`. + /// @dev Only call when this function `_id` is in the `_heap` with value `_removedValue`. + /// @param _heap The heap to modify. + /// @param _id The address of the account to remove. + /// @param _removedValue The value of the account to remove. + function remove( + HeapArray storage _heap, + address _id, + uint96 _removedValue + ) private { + uint256 rank = _heap.ranks[_id]; + uint256 accountsLength = _heap.accounts.length; + + // Swap the last account and the account to remove, then pop it. + swap(_heap, rank, accountsLength); + if (_heap.size == accountsLength) _heap.size--; + _heap.accounts.pop(); + delete _heap.ranks[_id]; + + // If the swapped account is in the heap, restore the invariant: its value can be smaller or larger than the removed value. + if (rank <= _heap.size) { + if (_removedValue > getAccount(_heap, rank).value) shiftDown(_heap, rank); + else shiftUp(_heap, rank); + } + } + + /// GETTERS /// + + /// @notice Returns the number of users in the `_heap`. + /// @param _heap The heap parameter. + /// @return The length of the heap. + function length(HeapArray storage _heap) internal view returns (uint256) { + return _heap.accounts.length; + } + + /// @notice Returns the value of the account linked to `_id`. + /// @param _heap The heap to search in. + /// @param _id The address of the account. + /// @return The value of the account. + function getValueOf(HeapArray storage _heap, address _id) internal view returns (uint256) { + uint256 rank = _heap.ranks[_id]; + if (rank == 0) return 0; + else return getAccount(_heap, rank).value; + } + + /// @notice Returns the address at the head of the `_heap`. + /// @param _heap The heap to get the head. + /// @return The address of the head. + function getHead(HeapArray storage _heap) internal view returns (address) { + if (_heap.accounts.length > 0) return getAccount(_heap, ROOT).id; + else return address(0); + } + + /// @notice Returns the address at the tail of unsorted portion of the `_heap`. + /// @param _heap The heap to get the tail. + /// @return The address of the tail. + function getTail(HeapArray storage _heap) internal view returns (address) { + if (_heap.accounts.length > 0) return getAccount(_heap, _heap.accounts.length).id; + else return address(0); + } + + /// @notice Returns the address coming before `_id` in accounts. + /// @dev The account associated to the returned address does not necessarily have a lower value than the one of the account associated to `_id`. + /// @param _heap The heap to search in. + /// @param _id The address of the account. + /// @return The address of the previous account. + function getPrev(HeapArray storage _heap, address _id) internal view returns (address) { + uint256 rank = _heap.ranks[_id]; + if (rank > ROOT) return getAccount(_heap, rank - 1).id; + else return address(0); + } + + /// @notice Returns the address coming after `_id` in accounts. + /// @dev The account associated to the returned address does not necessarily have a greater value than the one of the account associated to `_id`. + /// @param _heap The heap to search in. + /// @param _id The address of the account. + /// @return The address of the next account. + function getNext(HeapArray storage _heap, address _id) internal view returns (address) { + uint256 rank = _heap.ranks[_id]; + if (rank < _heap.accounts.length) return getAccount(_heap, rank + 1).id; + else return address(0); + } +} + +library MarketLib { + function isCreated(Types.Market storage _market) internal view returns (bool) { + return _market.underlyingToken != address(0); + } + + function isCreatedMemory(Types.Market memory _market) internal pure returns (bool) { + return _market.underlyingToken != address(0); + } +} + +/// @title Types. +/// @author Morpho Labs. +/// @custom:contact security@morpho.xyz +/// @dev Common types and structs used in Morpho contracts. +library Types { + /// ENUMS /// + + enum PositionType { + SUPPLIERS_IN_P2P, + SUPPLIERS_ON_POOL, + BORROWERS_IN_P2P, + BORROWERS_ON_POOL + } + + /// STRUCTS /// + + struct SupplyBalance { + uint256 inP2P; // In supplier's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests earned by suppliers in peer-to-peer. Multiply by the peer-to-peer supply index to get the underlying amount. + uint256 onPool; // In scaled balance. Multiply by the pool supply index to get the underlying amount. + } + + struct BorrowBalance { + uint256 inP2P; // In borrower's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests paid by borrowers in peer-to-peer. Multiply by the peer-to-peer borrow index to get the underlying amount. + uint256 onPool; // In adUnit, a unit that grows in value, to keep track of the debt increase when borrowers are on Aave. Multiply by the pool borrow index to get the underlying amount. + } + + // Max gas to consume during the matching process for supply, borrow, withdraw and repay functions. + struct MaxGasForMatching { + uint64 supply; + uint64 borrow; + uint64 withdraw; + uint64 repay; + } + + struct Delta { + uint256 p2pSupplyDelta; // Difference between the stored peer-to-peer supply amount and the real peer-to-peer supply amount (in aToken). + uint256 p2pBorrowDelta; // Difference between the stored peer-to-peer borrow amount and the real peer-to-peer borrow amount (in adUnit). + uint256 p2pSupplyAmount; // Sum of all stored peer-to-peer supply (in peer-to-peer unit). + uint256 p2pBorrowAmount; // Sum of all stored peer-to-peer borrow (in peer-to-peer unit). + } + + struct AssetLiquidityData { + uint256 decimals; // The number of decimals of the underlying token. + uint256 tokenUnit; // The token unit considering its decimals. + uint256 liquidationThreshold; // The liquidation threshold applied on this token (in basis point). + uint256 ltv; // The LTV applied on this token (in basis point). + uint256 underlyingPrice; // The price of the token (in ETH). + uint256 collateral; // The collateral value of the asset (in ETH). + uint256 debt; // The debt value of the asset (in ETH). + } + + struct LiquidityData { + uint256 collateral; // The collateral value (in ETH). + uint256 maxDebt; // The max debt value (in ETH). + uint256 liquidationThreshold; // The liquidation threshold value (in ETH). + uint256 debt; // The debt value (in ETH). + } + + // Variables are packed together to save gas (will not exceed their limit during Morpho's lifetime). + struct PoolIndexes { + uint32 lastUpdateTimestamp; // The last time the local pool and peer-to-peer indexes were updated. + uint112 poolSupplyIndex; // Last pool supply index. + uint112 poolBorrowIndex; // Last pool borrow index. + } + + struct Market { + address underlyingToken; // The underlying address of the market. + uint16 reserveFactor; // Proportion of the additional interest earned being matched peer-to-peer on Morpho compared to being on the pool. It is sent to the DAO for each market. The default value is 0. In basis point (100% = 10 000). + uint16 p2pIndexCursor; // Position of the peer-to-peer rate in the pool's spread. Determine the weights of the weighted arithmetic average in the indexes computations ((1 - p2pIndexCursor) * r^S + p2pIndexCursor * r^B) (in basis point). + bool isP2PDisabled; // Whether the market's peer-to-peer is open or not. + bool isSupplyPaused; // Whether the supply is paused or not. + bool isBorrowPaused; // Whether the borrow is paused or not + bool isWithdrawPaused; // Whether the withdraw is paused or not. Note that a "withdraw" is still possible using a liquidation (if not paused). + bool isRepayPaused; // Whether the repay is paused or not. + bool isLiquidateCollateralPaused; // Whether the liquidation on this market as collateral is paused or not. + bool isLiquidateBorrowPaused; // Whether the liquidatation on this market as borrow is paused or not. + bool isDeprecated; // Whether a market is deprecated or not. + } + + struct LiquidityStackVars { + address poolToken; + uint256 poolTokensLength; + bytes32 userMarkets; + bytes32 borrowMask; + address underlyingToken; + uint256 underlyingPrice; + } +} + +// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) + +// OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/Initializable.sol) + +// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) + +/** + * @dev Collection of functions related to the address type + */ +library AddressUpgradeable { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCall(target, data, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value + ) internal returns (bytes memory) { + return + functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + require(isContract(target), "Address: call to non-contract"); + + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResult(success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) + internal + view + returns (bytes memory) + { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + require(isContract(target), "Address: static call to non-contract"); + + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResult(success, returndata, errorMessage); + } + + /** + * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } + } +} + +/** + * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed + * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an + * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer + * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. + * + * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as + * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. + * + * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure + * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. + * + * [CAUTION] + * ==== + * Avoid leaving a contract uninitialized. + * + * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation + * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the + * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: + * + * [.hljs-theme-light.nopadding] + * ``` + * /// @custom:oz-upgrades-unsafe-allow constructor + * constructor() initializer {} + * ``` + * ==== + */ +abstract contract Initializable { + /** + * @dev Indicates that the contract has been initialized. + */ + bool private _initialized; + + /** + * @dev Indicates that the contract is in the process of being initialized. + */ + bool private _initializing; + + /** + * @dev Modifier to protect an initializer function from being invoked twice. + */ + modifier initializer() { + // If the contract is initializing we ignore whether _initialized is set in order to support multiple + // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the + // contract may have been reentered. + require( + _initializing ? _isConstructor() : !_initialized, + "Initializable: contract is already initialized" + ); + + bool isTopLevelCall = !_initializing; + if (isTopLevelCall) { + _initializing = true; + _initialized = true; + } + + _; + + if (isTopLevelCall) { + _initializing = false; + } + } + + /** + * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the + * {initializer} modifier, directly or indirectly. + */ + modifier onlyInitializing() { + require(_initializing, "Initializable: contract is not initializing"); + _; + } + + function _isConstructor() private view returns (bool) { + return !AddressUpgradeable.isContract(address(this)); + } +} + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuardUpgradeable is Initializable { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + function __ReentrancyGuard_init() internal onlyInitializing { + __ReentrancyGuard_init_unchained(); + } + + function __ReentrancyGuard_init_unchained() internal onlyInitializing { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and making it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + // On the first call to nonReentrant, _notEntered will be true + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[49] private __gap; +} + +// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) + +// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract ContextUpgradeable is Initializable { + function __Context_init() internal onlyInitializing {} + + function __Context_init_unchained() internal onlyInitializing {} + + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; +} + +/** + * @dev Contract module which provides a basic access control mechanism, where + * there is an account (an owner) that can be granted exclusive access to + * specific functions. + * + * By default, the owner account will be the one that deploys the contract. This + * can later be changed with {transferOwnership}. + * + * This module is used through inheritance. It will make available the modifier + * `onlyOwner`, which can be applied to your functions to restrict their use to + * the owner. + */ +abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { + address private _owner; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Initializes the contract setting the deployer as the initial owner. + */ + function __Ownable_init() internal onlyInitializing { + __Ownable_init_unchained(); + } + + function __Ownable_init_unchained() internal onlyInitializing { + _transferOwnership(_msgSender()); + } + + /** + * @dev Returns the address of the current owner. + */ + function owner() public view virtual returns (address) { + return _owner; + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + require(owner() == _msgSender(), "Ownable: caller is not the owner"); + _; + } + + /** + * @dev Leaves the contract without owner. It will not be possible to call + * `onlyOwner` functions anymore. Can only be called by the current owner. + * + * NOTE: Renouncing ownership will leave the contract without an owner, + * thereby removing any functionality that is only available to the owner. + */ + function renounceOwnership() public virtual onlyOwner { + _transferOwnership(address(0)); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Can only be called by the current owner. + */ + function transferOwnership(address newOwner) public virtual onlyOwner { + require(newOwner != address(0), "Ownable: new owner is the zero address"); + _transferOwnership(newOwner); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Internal function without access restriction. + */ + function _transferOwnership(address newOwner) internal virtual { + address oldOwner = _owner; + _owner = newOwner; + emit OwnershipTransferred(oldOwner, newOwner); + } + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[49] private __gap; +} + +/// @title MorphoStorage. +/// @author Morpho Labs. +/// @custom:contact security@morpho.xyz +/// @notice All storage variables used in Morpho contracts. +abstract contract MorphoStorage is OwnableUpgradeable, ReentrancyGuardUpgradeable { + /// GLOBAL STORAGE /// + + uint8 public constant NO_REFERRAL_CODE = 0; + uint8 public constant VARIABLE_INTEREST_MODE = 2; + uint16 public constant MAX_BASIS_POINTS = 10_000; // 100% in basis points. + uint256 public constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 5_000; // 50% in basis points. + uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18; // Health factor below which the positions can be liquidated. + uint256 public constant MAX_NB_OF_MARKETS = 128; + bytes32 public constant BORROWING_MASK = + 0x5555555555555555555555555555555555555555555555555555555555555555; + bytes32 public constant ONE = + 0x0000000000000000000000000000000000000000000000000000000000000001; + + bool public isClaimRewardsPaused; // Whether claiming rewards is paused or not. + uint256 public maxSortedUsers; // The max number of users to sort in the data structure. + Types.MaxGasForMatching public defaultMaxGasForMatching; // The default max gas to consume within loops in matching engine functions. + + /// POSITIONS STORAGE /// + + mapping(address => HeapOrdering.HeapArray) internal suppliersInP2P; // For a given market, the suppliers in peer-to-peer. + mapping(address => HeapOrdering.HeapArray) internal suppliersOnPool; // For a given market, the suppliers on Aave. + mapping(address => HeapOrdering.HeapArray) internal borrowersInP2P; // For a given market, the borrowers in peer-to-peer. + mapping(address => HeapOrdering.HeapArray) internal borrowersOnPool; // For a given market, the borrowers on Aave. + mapping(address => mapping(address => Types.SupplyBalance)) public supplyBalanceInOf; // For a given market, the supply balance of a user. aToken -> user -> balances. + mapping(address => mapping(address => Types.BorrowBalance)) public borrowBalanceInOf; // For a given market, the borrow balance of a user. aToken -> user -> balances. + mapping(address => bytes32) public userMarkets; // The markets entered by a user as a bitmask. + + /// MARKETS STORAGE /// + + address[] internal marketsCreated; // Keeps track of the created markets. + mapping(address => uint256) public p2pSupplyIndex; // Current index from supply peer-to-peer unit to underlying (in ray). + mapping(address => uint256) public p2pBorrowIndex; // Current index from borrow peer-to-peer unit to underlying (in ray). + mapping(address => Types.PoolIndexes) public poolIndexes; // Last pool index stored. + mapping(address => Types.Market) public market; // Market information. + mapping(address => Types.Delta) public deltas; // Delta parameters for each market. + mapping(address => bytes32) public borrowMask; // Borrow mask of the given market, shift left to get the supply mask. + + /// CONTRACTS AND ADDRESSES /// + + ILendingPoolAddressesProvider public addressesProvider; + IAaveIncentivesController public aaveIncentivesController; + ILendingPool public pool; + + IEntryPositionsManager public entryPositionsManager; + IExitPositionsManager public exitPositionsManager; + IInterestRatesManager public interestRatesManager; + IIncentivesVault public incentivesVault; + IRewardsManager public rewardsManager; + address public treasuryVault; + + /// CONSTRUCTOR /// + + /// @notice Constructs the contract. + /// @dev The contract is automatically marked as initialized when deployed so that nobody can highjack the implementation contract. + constructor() initializer {} +} + +interface ILido { + function getPooledEthByShares(uint256 _sharesAmount) external view returns (uint256); +} + +/// @title InterestRatesManager. +/// @author Morpho Labs. +/// @custom:contact security@morpho.xyz +/// @notice Smart contract handling the computation of indexes used for peer-to-peer interactions. +/// @dev This contract inherits from MorphoStorage so that Morpho can delegate calls to this contract. +contract InterestRatesManager is IInterestRatesManager, MorphoStorage { + using PercentageMath for uint256; + using WadRayMath for uint256; + + /// STORAGE /// + + address public constant STETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84; + uint256 public immutable ST_ETH_REBASE_INDEX; + + constructor() { + ST_ETH_REBASE_INDEX = ILido(STETH).getPooledEthByShares(WadRayMath.RAY); + } + + /// STRUCTS /// + + struct Params { + uint256 lastP2PSupplyIndex; // The peer-to-peer supply index at last update. + uint256 lastP2PBorrowIndex; // The peer-to-peer borrow index at last update. + uint256 poolSupplyIndex; // The current pool supply index. + uint256 poolBorrowIndex; // The current pool borrow index. + uint256 lastPoolSupplyIndex; // The pool supply index at last update. + uint256 lastPoolBorrowIndex; // The pool borrow index at last update. + uint256 reserveFactor; // The reserve factor percentage (10 000 = 100%). + uint256 p2pIndexCursor; // The peer-to-peer index cursor (10 000 = 100%). + Types.Delta delta; // The deltas and peer-to-peer amounts. + } + + /// EVENTS /// + + /// @notice Emitted when the peer-to-peer indexes of a market are updated. + /// @param _poolToken The address of the market updated. + /// @param _p2pSupplyIndex The updated supply index from peer-to-peer unit to underlying. + /// @param _p2pBorrowIndex The updated borrow index from peer-to-peer unit to underlying. + /// @param _poolSupplyIndex The updated pool supply index. + /// @param _poolBorrowIndex The updated pool borrow index. + event P2PIndexesUpdated( + address indexed _poolToken, + uint256 _p2pSupplyIndex, + uint256 _p2pBorrowIndex, + uint256 _poolSupplyIndex, + uint256 _poolBorrowIndex + ); + + /// EXTERNAL /// + + /// @notice Updates the peer-to-peer indexes and pool indexes (only stored locally). + /// @param _poolToken The address of the market to update. + function updateIndexes(address _poolToken) external { + Types.PoolIndexes storage marketPoolIndexes = poolIndexes[_poolToken]; + + if (block.timestamp == marketPoolIndexes.lastUpdateTimestamp) return; + + Types.Market storage market = market[_poolToken]; + + address underlyingToken = market.underlyingToken; + uint256 newPoolSupplyIndex = pool.getReserveNormalizedIncome(underlyingToken); + uint256 newPoolBorrowIndex = pool.getReserveNormalizedVariableDebt(underlyingToken); + + if (underlyingToken == STETH) { + uint256 stEthRebaseIndex = ILido(STETH).getPooledEthByShares(WadRayMath.RAY); + newPoolSupplyIndex = newPoolSupplyIndex.rayMul(stEthRebaseIndex).rayDiv( + ST_ETH_REBASE_INDEX + ); + newPoolBorrowIndex = newPoolBorrowIndex.rayMul(stEthRebaseIndex).rayDiv( + ST_ETH_REBASE_INDEX + ); + } + + Params memory params = Params( + p2pSupplyIndex[_poolToken], + p2pBorrowIndex[_poolToken], + newPoolSupplyIndex, + newPoolBorrowIndex, + marketPoolIndexes.poolSupplyIndex, + marketPoolIndexes.poolBorrowIndex, + market.reserveFactor, + market.p2pIndexCursor, + deltas[_poolToken] + ); + + (uint256 newP2PSupplyIndex, uint256 newP2PBorrowIndex) = _computeP2PIndexes(params); + + p2pSupplyIndex[_poolToken] = newP2PSupplyIndex; + p2pBorrowIndex[_poolToken] = newP2PBorrowIndex; + + marketPoolIndexes.lastUpdateTimestamp = uint32(block.timestamp); + marketPoolIndexes.poolSupplyIndex = uint112(newPoolSupplyIndex); + marketPoolIndexes.poolBorrowIndex = uint112(newPoolBorrowIndex); + + emit P2PIndexesUpdated( + _poolToken, + newP2PSupplyIndex, + newP2PBorrowIndex, + newPoolSupplyIndex, + newPoolBorrowIndex + ); + } + + /// INTERNAL /// + + /// @notice Computes and returns new peer-to-peer indexes. + /// @param _params Computation parameters. + /// @return newP2PSupplyIndex The updated p2pSupplyIndex. + /// @return newP2PBorrowIndex The updated p2pBorrowIndex. + function _computeP2PIndexes(Params memory _params) + internal + pure + returns (uint256 newP2PSupplyIndex, uint256 newP2PBorrowIndex) + { + // Compute pool growth factors + + uint256 poolSupplyGrowthFactor = _params.poolSupplyIndex.rayDiv( + _params.lastPoolSupplyIndex + ); + uint256 poolBorrowGrowthFactor = _params.poolBorrowIndex.rayDiv( + _params.lastPoolBorrowIndex + ); + + // Compute peer-to-peer growth factors. + + uint256 p2pSupplyGrowthFactor; + uint256 p2pBorrowGrowthFactor; + if (poolSupplyGrowthFactor <= poolBorrowGrowthFactor) { + uint256 p2pGrowthFactor = poolSupplyGrowthFactor.percentMul( + MAX_BASIS_POINTS - _params.p2pIndexCursor + ) + poolBorrowGrowthFactor.percentMul(_params.p2pIndexCursor); + p2pSupplyGrowthFactor = + p2pGrowthFactor - + _params.reserveFactor.percentMul(p2pGrowthFactor - poolSupplyGrowthFactor); + p2pBorrowGrowthFactor = + p2pGrowthFactor + + _params.reserveFactor.percentMul(poolBorrowGrowthFactor - p2pGrowthFactor); + } else { + // The case poolSupplyGrowthFactor > poolBorrowGrowthFactor happens because someone has done a flashloan on Aave, or the interests + // generated by the stable rate borrowing are high (making the supply rate higher than the variable borrow rate): the peer-to-peer + // growth factors are set to the pool borrow growth factor. + p2pSupplyGrowthFactor = poolBorrowGrowthFactor; + p2pBorrowGrowthFactor = poolBorrowGrowthFactor; + } + + // Compute new peer-to-peer supply index. + + if (_params.delta.p2pSupplyAmount == 0 || _params.delta.p2pSupplyDelta == 0) { + newP2PSupplyIndex = _params.lastP2PSupplyIndex.rayMul(p2pSupplyGrowthFactor); + } else { + uint256 shareOfTheDelta = Math.min( + (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), + WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. + ); // In ray. + + newP2PSupplyIndex = _params.lastP2PSupplyIndex.rayMul( + (WadRayMath.RAY - shareOfTheDelta).rayMul(p2pSupplyGrowthFactor) + + shareOfTheDelta.rayMul(poolSupplyGrowthFactor) + ); + } + + // Compute new peer-to-peer borrow index. + + if (_params.delta.p2pBorrowAmount == 0 || _params.delta.p2pBorrowDelta == 0) { + newP2PBorrowIndex = _params.lastP2PBorrowIndex.rayMul(p2pBorrowGrowthFactor); + } else { + uint256 shareOfTheDelta = Math.min( + (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), + WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. + ); // In ray. + + newP2PBorrowIndex = _params.lastP2PBorrowIndex.rayMul( + (WadRayMath.RAY - shareOfTheDelta).rayMul(p2pBorrowGrowthFactor) + + shareOfTheDelta.rayMul(poolBorrowGrowthFactor) + ); + } + } +} diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index 7520c0b3e..dfa2d27c4 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -241,11 +241,11 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { { ILendingPool poolMem = pool; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem - .getConfiguration(tokenCollateralAddress) - .getParamsMemory(); + .getConfiguration(tokenCollateralAddress) + .getParamsMemory(); (, , , vars.borrowedReserveDecimals, ) = poolMem - .getConfiguration(tokenBorrowedAddress) - .getParamsMemory(); + .getConfiguration(tokenBorrowedAddress) + .getParamsMemory(); } unchecked { @@ -257,16 +257,16 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { uint256 collateralPrice = oracle.getAssetPrice(tokenCollateralAddress); uint256 amountToSeize = ((amountToLiquidate * borrowedTokenPrice * - vars.collateralTokenUnit) / (vars.borrowedTokenUnit * collateralPrice)) - .percentMul(vars.liquidationBonus); + vars.collateralTokenUnit) / (vars.borrowedTokenUnit * collateralPrice)).percentMul( + vars.liquidationBonus + ); uint256 collateralBalance = _getUserSupplyBalanceInOf(_poolTokenCollateral, _borrower); if (amountToSeize > collateralBalance) { amountToSeize = collateralBalance; amountToLiquidate = ((collateralBalance * collateralPrice * vars.borrowedTokenUnit) / - (borrowedTokenPrice * vars.collateralTokenUnit)) - .percentDiv(vars.liquidationBonus); + (borrowedTokenPrice * vars.collateralTokenUnit)).percentDiv(vars.liquidationBonus); } _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, amountToLiquidate, 0); diff --git a/contracts/aave-v2/InterestRatesManager.sol b/contracts/aave-v2/InterestRatesManager.sol index 6ec2cc602..58f21c726 100644 --- a/contracts/aave-v2/InterestRatesManager.sol +++ b/contracts/aave-v2/InterestRatesManager.sol @@ -163,9 +163,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -182,9 +182,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v2/MatchingEngine.sol b/contracts/aave-v2/MatchingEngine.sol index 244c46ada..e25131bc4 100644 --- a/contracts/aave-v2/MatchingEngine.sol +++ b/contracts/aave-v2/MatchingEngine.sol @@ -339,8 +339,8 @@ abstract contract MatchingEngine is MorphoUtils { if (formerValueOnPool != onPool && address(rewardsManager) != address(0)) { address variableDebtTokenAddress = pool - .getReserveData(market[_poolToken].underlyingToken) - .variableDebtTokenAddress; + .getReserveData(market[_poolToken].underlyingToken) + .variableDebtTokenAddress; rewardsManager.updateUserAssetAndAccruedRewards( aaveIncentivesController, _user, diff --git a/contracts/aave-v2/MorphoUtils.sol b/contracts/aave-v2/MorphoUtils.sol index 1a730d019..f20c7851a 100644 --- a/contracts/aave-v2/MorphoUtils.sol +++ b/contracts/aave-v2/MorphoUtils.sol @@ -277,8 +277,8 @@ abstract contract MorphoUtils is MorphoStorage { if (vars.poolToken != _poolToken) _updateIndexes(vars.poolToken); (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, ) = pool - .getConfiguration(vars.underlyingToken) - .getParamsMemory(); + .getConfiguration(vars.underlyingToken) + .getParamsMemory(); unchecked { assetData.tokenUnit = 10**assetData.decimals; diff --git a/contracts/aave-v2/lens/IndexesLens.sol b/contracts/aave-v2/lens/IndexesLens.sol index 0436bd3e2..4d86f352a 100644 --- a/contracts/aave-v2/lens/IndexesLens.sol +++ b/contracts/aave-v2/lens/IndexesLens.sol @@ -86,13 +86,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); p2pSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PIndexComputeParams({ @@ -139,13 +139,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); currentP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PIndexComputeParams({ @@ -182,13 +182,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); currentP2PBorrowIndex = InterestRatesModel.computeP2PBorrowIndex( InterestRatesModel.P2PIndexComputeParams({ diff --git a/contracts/aave-v2/lens/Lens.sol b/contracts/aave-v2/lens/Lens.sol index 9c22fcf93..41fbde113 100644 --- a/contracts/aave-v2/lens/Lens.sol +++ b/contracts/aave-v2/lens/Lens.sol @@ -47,8 +47,8 @@ contract Lens is MarketsLens { uint256 underlyingPrice = oracle.getAssetPrice(underlyingToken); (, , , uint256 reserveDecimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); uint256 tokenUnit = 10**reserveDecimals; p2pSupplyAmount += (marketP2PSupplyAmount * underlyingPrice) / tokenUnit; @@ -90,8 +90,8 @@ contract Lens is MarketsLens { uint256 underlyingPrice = oracle.getAssetPrice(underlyingToken); (, , , uint256 reserveDecimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); uint256 tokenUnit = 10**reserveDecimals; p2pBorrowAmount += (marketP2PBorrowAmount * underlyingPrice) / tokenUnit; diff --git a/contracts/aave-v2/lens/MarketsLens.sol b/contracts/aave-v2/lens/MarketsLens.sol index c2705c88b..9bcf9f5ec 100644 --- a/contracts/aave-v2/lens/MarketsLens.sol +++ b/contracts/aave-v2/lens/MarketsLens.sol @@ -157,8 +157,8 @@ abstract contract MarketsLens is RatesLens { p2pIndexCursor = market.p2pIndexCursor; (loanToValue, liquidationThreshold, liquidationBonus, decimals, ) = pool - .getConfiguration(underlying) - .getParamsMemory(); + .getConfiguration(underlying) + .getParamsMemory(); } /// PUBLIC /// diff --git a/contracts/aave-v2/lens/RatesLens.sol b/contracts/aave-v2/lens/RatesLens.sol index f33a7634b..5e6669fd3 100644 --- a/contracts/aave-v2/lens/RatesLens.sol +++ b/contracts/aave-v2/lens/RatesLens.sol @@ -73,10 +73,11 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !market.isP2PDisabled) { uint256 firstPoolBorrowerBalance = morpho - .borrowBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) - ).onPool; + .borrowBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) + ) + .onPool; if (firstPoolBorrowerBalance > 0) { uint256 matchedP2P = Math.min( @@ -153,10 +154,11 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !market.isP2PDisabled) { uint256 firstPoolSupplierBalance = morpho - .supplyBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) - ).onPool; + .supplyBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) + ) + .onPool; if (firstPoolSupplierBalance > 0) { uint256 matchedP2P = Math.min( @@ -434,8 +436,8 @@ abstract contract RatesLens is UsersLens { delta.p2pBorrowAmount.rayMul(_p2pBorrowIndex) - delta.p2pBorrowDelta.rayMul(_poolBorrowIndex); poolBorrowAmount = IVariableDebtToken(reserve.variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)) - .rayMul(_poolBorrowIndex); + .scaledBalanceOf(address(morpho)) + .rayMul(_poolBorrowIndex); } /// @dev Returns the supply rate per year experienced on a market based on a given position distribution. diff --git a/contracts/aave-v2/lens/UsersLens.sol b/contracts/aave-v2/lens/UsersLens.sol index 77d6322a4..b56d1a51d 100644 --- a/contracts/aave-v2/lens/UsersLens.sol +++ b/contracts/aave-v2/lens/UsersLens.sol @@ -128,8 +128,8 @@ abstract contract UsersLens is IndexesLens { ); (, , uint256 liquidationBonus, uint256 collateralReserveDecimals, ) = pool - .getConfiguration(collateralToken) - .getParamsMemory(); + .getConfiguration(collateralToken) + .getParamsMemory(); IPriceOracleGetter oracle = IPriceOracleGetter(addressesProvider.getPriceOracle()); uint256 borrowedPrice = oracle.getAssetPrice(borrowedToken); @@ -138,8 +138,7 @@ abstract contract UsersLens is IndexesLens { return Math.min( ((totalCollateralBalance * collateralPrice * 10**ERC20(borrowedToken).decimals()) / - (borrowedPrice * 10**collateralReserveDecimals)) - .percentDiv(liquidationBonus), + (borrowedPrice * 10**collateralReserveDecimals)).percentDiv(liquidationBonus), totalBorrowBalance.percentMul(DEFAULT_LIQUIDATION_CLOSE_FACTOR) ); } @@ -274,8 +273,8 @@ abstract contract UsersLens is IndexesLens { assetData.underlyingPrice = _oracle.getAssetPrice(underlyingToken); // In ETH. (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); (, , uint256 totalCollateralBalance) = _getSupplyBalanceInOf( _poolToken, diff --git a/contracts/aave-v3/ExitPositionsManager.sol b/contracts/aave-v3/ExitPositionsManager.sol index 0b78bd29c..a5339b9b5 100644 --- a/contracts/aave-v3/ExitPositionsManager.sol +++ b/contracts/aave-v3/ExitPositionsManager.sol @@ -243,11 +243,11 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { IPool poolMem = pool; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = poolMem - .getConfiguration(collateralMarket.underlyingToken) - .getParams(); + .getConfiguration(collateralMarket.underlyingToken) + .getParams(); (, , , vars.borrowedReserveDecimals, , ) = poolMem - .getConfiguration(borrowedMarket.underlyingToken) - .getParams(); + .getConfiguration(borrowedMarket.underlyingToken) + .getParams(); unchecked { vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -258,8 +258,9 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { vars.collateralPrice = oracle.getAssetPrice(collateralMarket.underlyingToken); vars.amountToSeize = ((vars.amountToLiquidate * vars.borrowedTokenPrice * - vars.collateralTokenUnit) / (vars.borrowedTokenUnit * vars.collateralPrice)) - .percentMul(vars.liquidationBonus); + vars.collateralTokenUnit) / (vars.borrowedTokenUnit * vars.collateralPrice)).percentMul( + vars.liquidationBonus + ); vars.collateralBalance = _getUserSupplyBalanceInOf(_poolTokenCollateral, _borrower); @@ -268,7 +269,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { vars.amountToLiquidate = ((vars.collateralBalance * vars.collateralPrice * vars.borrowedTokenUnit) / (vars.borrowedTokenPrice * vars.collateralTokenUnit)) - .percentDiv(vars.liquidationBonus); + .percentDiv(vars.liquidationBonus); } _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, vars.amountToLiquidate, 0); diff --git a/contracts/aave-v3/InterestRatesManager.sol b/contracts/aave-v3/InterestRatesManager.sol index 4b070649a..109d5152d 100644 --- a/contracts/aave-v3/InterestRatesManager.sol +++ b/contracts/aave-v3/InterestRatesManager.sol @@ -141,9 +141,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -160,9 +160,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v3/Lens.sol b/contracts/aave-v3/Lens.sol index f403cced9..cc1d978a9 100644 --- a/contracts/aave-v3/Lens.sol +++ b/contracts/aave-v3/Lens.sol @@ -148,8 +148,8 @@ contract Lens { assetData.underlyingPrice = _oracle.getAssetPrice(underlyingToken); // In base currency in wad. (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, , ) = pool - .getConfiguration(underlyingToken) - .getParams(); + .getConfiguration(underlyingToken) + .getParams(); assetData.tokenUnit = 10**assetData.decimals; assetData.debt = @@ -204,11 +204,11 @@ contract Lens { (_withdrawnAmount * assetData.underlyingPrice) / assetData.tokenUnit; liquidityData.maxDebt -= ((_withdrawnAmount * assetData.underlyingPrice) / - assetData.tokenUnit) - .percentMul(assetData.ltv); + assetData.tokenUnit).percentMul(assetData.ltv); liquidityData.liquidationThreshold -= ((_withdrawnAmount * - assetData.underlyingPrice) / assetData.tokenUnit) - .percentMul(assetData.liquidationThreshold); + assetData.underlyingPrice) / assetData.tokenUnit).percentMul( + assetData.liquidationThreshold + ); } } } @@ -431,13 +431,13 @@ contract Lens { uint256 p2pBorrowGrowthFactor, uint256 poolBorrowGrowthFactor ) = _computeGrowthFactors( - _params.poolSupplyIndex, - _params.poolBorrowIndex, - _params.lastPoolSupplyIndex, - _params.lastPoolBorrowIndex, - _params.reserveFactor, - _params.p2pIndexCursor - ); + _params.poolSupplyIndex, + _params.poolBorrowIndex, + _params.lastPoolSupplyIndex, + _params.lastPoolBorrowIndex, + _params.reserveFactor, + _params.p2pIndexCursor + ); // Compute new peer-to-peer supply index. @@ -446,9 +446,11 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - (_params.delta.p2pSupplyAmount.wadToRay()).rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + (_params.delta.p2pSupplyAmount.wadToRay()).rayMul( + _params.lastP2PSupplyIndex + ) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); @@ -465,9 +467,11 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - (_params.delta.p2pBorrowAmount.wadToRay()).rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + (_params.delta.p2pBorrowAmount.wadToRay()).rayMul( + _params.lastP2PBorrowIndex + ) + ), RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); @@ -500,9 +504,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -535,9 +539,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v3/MatchingEngine.sol b/contracts/aave-v3/MatchingEngine.sol index bc24cd07f..a622e268e 100644 --- a/contracts/aave-v3/MatchingEngine.sol +++ b/contracts/aave-v3/MatchingEngine.sol @@ -339,8 +339,8 @@ abstract contract MatchingEngine is MorphoUtils { if (formerValueOnPool != onPool && address(rewardsManager) != address(0)) { address variableDebtTokenAddress = pool - .getReserveData(market[_poolToken].underlyingToken) - .variableDebtTokenAddress; + .getReserveData(market[_poolToken].underlyingToken) + .variableDebtTokenAddress; rewardsManager.updateUserAssetAndAccruedRewards( rewardsController, _user, diff --git a/contracts/aave-v3/MorphoUtils.sol b/contracts/aave-v3/MorphoUtils.sol index d2162c5ae..c5b987f31 100644 --- a/contracts/aave-v3/MorphoUtils.sol +++ b/contracts/aave-v3/MorphoUtils.sol @@ -275,8 +275,8 @@ abstract contract MorphoUtils is MorphoStorage { if (vars.poolToken != _poolToken) _updateIndexes(vars.poolToken); (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, , ) = pool - .getConfiguration(vars.underlyingToken) - .getParams(); + .getConfiguration(vars.underlyingToken) + .getParams(); // LTV should be zero if Morpho has not enabled this asset as collateral if (!morphoUserConfig.isUsingAsCollateral(pool.getReserveData(vars.underlyingToken).id)) diff --git a/contracts/aave-v3/RewardsManager.sol b/contracts/aave-v3/RewardsManager.sol index 3e99cfe91..de6ea52f4 100644 --- a/contracts/aave-v3/RewardsManager.sol +++ b/contracts/aave-v3/RewardsManager.sol @@ -112,8 +112,8 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { for (uint256 j; j < rewardsList.length; ) { uint256 rewardAmount = localAssetData[asset][rewardsList[j]] - .usersData[_user] - .accrued; + .usersData[_user] + .accrued; if (rewardAmount != 0) { claimedAmounts[j] += rewardAmount; @@ -187,8 +187,8 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { for (uint256 i; i < userAssetBalances.length; ) { for (uint256 j; j < rewardsListLength; ) { unclaimedAmounts[j] += localAssetData[userAssetBalances[i].asset][rewardsList[j]] - .usersData[_user] - .accrued; + .usersData[_user] + .accrued; if (userAssetBalances[i].balance == 0) continue; @@ -515,12 +515,12 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { if (asset == reserve.aTokenAddress) userAssetBalances[i].balance = morpho - .supplyBalanceInOf(reserve.aTokenAddress, _user) - .onPool; + .supplyBalanceInOf(reserve.aTokenAddress, _user) + .onPool; else if (asset == reserve.variableDebtTokenAddress) userAssetBalances[i].balance = morpho - .borrowBalanceInOf(reserve.aTokenAddress, _user) - .onPool; + .borrowBalanceInOf(reserve.aTokenAddress, _user) + .onPool; else revert InvalidAsset(); userAssetBalances[i].totalSupply = IScaledBalanceToken(asset).scaledTotalSupply(); diff --git a/contracts/compound/lens/IndexesLens.sol b/contracts/compound/lens/IndexesLens.sol index 547ea8740..5f9bf38f8 100644 --- a/contracts/compound/lens/IndexesLens.sol +++ b/contracts/compound/lens/IndexesLens.sol @@ -71,13 +71,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - newPoolSupplyIndex, - newPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + newPoolSupplyIndex, + newPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); newP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PSupplyIndexComputeParams({ @@ -169,13 +169,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - currentPoolSupplyIndex, - currentPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + currentPoolSupplyIndex, + currentPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); currentP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PSupplyIndexComputeParams({ @@ -214,13 +214,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - currentPoolSupplyIndex, - currentPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + currentPoolSupplyIndex, + currentPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); currentP2PBorrowIndex = InterestRatesModel.computeP2PBorrowIndex( InterestRatesModel.P2PBorrowIndexComputeParams({ diff --git a/contracts/compound/lens/RatesLens.sol b/contracts/compound/lens/RatesLens.sol index 984fad6ae..2338196ad 100644 --- a/contracts/compound/lens/RatesLens.sol +++ b/contracts/compound/lens/RatesLens.sol @@ -67,10 +67,11 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !morpho.p2pDisabled(_poolToken)) { uint256 firstPoolBorrowerBalance = morpho - .borrowBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) - ).onPool; + .borrowBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) + ) + .onPool; if (firstPoolBorrowerBalance > 0) { uint256 borrowerBalanceInUnderlying = firstPoolBorrowerBalance.mul( @@ -143,10 +144,11 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !morpho.p2pDisabled(_poolToken)) { uint256 firstPoolSupplierBalance = morpho - .supplyBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) - ).onPool; + .supplyBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) + ) + .onPool; if (firstPoolSupplierBalance > 0) { uint256 supplierBalanceInUnderlying = firstPoolSupplierBalance.mul( @@ -414,9 +416,9 @@ abstract contract RatesLens is UsersLens { delta.p2pBorrowAmount.mul(_p2pBorrowIndex) - delta.p2pBorrowDelta.mul(_poolBorrowIndex); poolBorrowAmount = ICToken(_poolToken) - .borrowBalanceStored(address(morpho)) - .div(ICToken(_poolToken).borrowIndex()) - .mul(_poolBorrowIndex); + .borrowBalanceStored(address(morpho)) + .div(ICToken(_poolToken).borrowIndex()) + .mul(_poolBorrowIndex); } /// @dev Returns the supply rate per block experienced on a market based on a given position distribution. diff --git a/contracts/compound/lens/RewardsLens.sol b/contracts/compound/lens/RewardsLens.sol index d6443460f..f0d867773 100644 --- a/contracts/compound/lens/RewardsLens.sol +++ b/contracts/compound/lens/RewardsLens.sol @@ -91,7 +91,7 @@ abstract contract RewardsLens is MarketsLens { /// @return The updated COMP supply index. function getCurrentCompSupplyIndex(address _poolToken) public view returns (uint256) { IComptroller.CompMarketState memory localSupplyState = rewardsManager - .getLocalCompSupplyState(_poolToken); + .getLocalCompSupplyState(_poolToken); if (localSupplyState.block == block.number) return localSupplyState.index; else { @@ -119,7 +119,7 @@ abstract contract RewardsLens is MarketsLens { /// @return The updated COMP borrow index. function getCurrentCompBorrowIndex(address _poolToken) public view returns (uint256) { IComptroller.CompMarketState memory localBorrowState = rewardsManager - .getLocalCompBorrowState(_poolToken); + .getLocalCompBorrowState(_poolToken); if (localBorrowState.block == block.number) return localBorrowState.index; else { diff --git a/hardhat.config.ts b/hardhat.config.ts index 7f286d493..346a6f203 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,14 +1,9 @@ -import * as dotenv from 'dotenv'; -dotenv.config({ path: './.env.local' }); -import 'module-alias/register'; -import '@openzeppelin/hardhat-upgrades'; -import '@tenderly/hardhat-tenderly'; -import '@nomiclabs/hardhat-etherscan'; -import '@nomiclabs/hardhat-waffle'; -import 'hardhat-deploy'; +import * as dotenv from "dotenv"; + +dotenv.config({ path: "./.env.local" }); module.exports = { - defaultNetwork: 'hardhat', + defaultNetwork: "hardhat", networks: { hardhat: {}, mainnet: { @@ -46,15 +41,15 @@ module.exports = { }, }, paths: { - sources: './contracts/common/', + sources: "./contracts/common/", }, namedAccounts: { deployer: { - kovan: '0x2F25DB0982Fd8E8be238281e4b6c413Eda688637', + kovan: "0x2F25DB0982Fd8E8be238281e4b6c413Eda688637", }, }, solidity: { - version: '0.8.13', + version: "0.8.13", settings: { optimizer: { enabled: true, diff --git a/test-foundry/aave-v2/TestGovernance.t.sol b/test-foundry/aave-v2/TestGovernance.t.sol index 5ec2dd13a..689f211b2 100644 --- a/test-foundry/aave-v2/TestGovernance.t.sol +++ b/test-foundry/aave-v2/TestGovernance.t.sol @@ -15,7 +15,7 @@ contract TestGovernance is TestSetup { assertEq(morpho.maxSortedUsers(), 20); (uint256 supply, uint256 borrow, uint256 withdraw, uint256 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, 3e6); assertEq(borrow, 3e6); assertEq(withdraw, 3e6); @@ -94,7 +94,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/aave-v2/TestLens.t.sol b/test-foundry/aave-v2/TestLens.t.sol index 1decd8bc7..7d1bb7dba 100644 --- a/test-foundry/aave-v2/TestLens.t.sol +++ b/test-foundry/aave-v2/TestLens.t.sol @@ -31,8 +31,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; @@ -58,8 +58,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -87,8 +87,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -127,8 +127,8 @@ contract TestLens is TestSetup { uint256 decimalsUsdc; (expectedDataUsdc.ltv, expectedDataUsdc.liquidationThreshold, , decimalsUsdc, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); expectedDataUsdc.underlyingPrice = oracle.getAssetPrice(usdc); expectedDataUsdc.tokenUnit = 10**decimalsUsdc; expectedDataUsdc.debt = @@ -154,8 +154,8 @@ contract TestLens is TestSetup { uint256 decimalsDai; (expectedDataDai.ltv, expectedDataDai.liquidationThreshold, , decimalsDai, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); expectedDataDai.underlyingPrice = oracle.getAssetPrice(dai); expectedDataDai.tokenUnit = 10**decimalsDai; expectedDataDai.collateral = @@ -232,21 +232,21 @@ contract TestLens is TestSetup { borrower1.supply(aAave, amount); (uint256 withdrawableAaveBefore, uint256 borrowableAaveBefore) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aAave); + .getUserMaxCapacitiesForAsset(address(borrower1), aAave); (uint256 withdrawableDaiBefore, uint256 borrowableDaiBefore) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aDai); + .getUserMaxCapacitiesForAsset(address(borrower1), aDai); borrower1.borrow(aDai, borrowableDaiBefore / 2); (uint256 withdrawableAaveAfter, uint256 borrowableAaveAfter) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aAave); + .getUserMaxCapacitiesForAsset(address(borrower1), aAave); (uint256 withdrawableDaiAfter, uint256 borrowableDaiAfter) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aDai); + .getUserMaxCapacitiesForAsset(address(borrower1), aDai); Types.AssetLiquidityData memory aaveAssetData; (aaveAssetData.ltv, aaveAssetData.liquidationThreshold, , , ) = pool - .getConfiguration(aave) - .getParamsMemory(); + .getConfiguration(aave) + .getParamsMemory(); assertEq(withdrawableAaveBefore, amount, "cannot withdraw all AAVE"); assertEq( @@ -282,7 +282,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.inP2P, userSupplyBalance.onPool, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( aDai, @@ -307,7 +307,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.inP2P, userBorrowBalance.onPool, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( aUsdc, @@ -348,7 +348,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.inP2P, userSupplyBalance.onPool, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( aDai, @@ -372,7 +372,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.inP2P, userBorrowBalance.onPool, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( aUsdc, @@ -499,8 +499,8 @@ contract TestLens is TestSetup { // DAI data (uint256 ltvDai, uint256 liquidationThresholdDai, , uint256 decimalsDai, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPriceDai = oracle.getAssetPrice(dai); uint256 tokenUnitDai = 10**decimalsDai; @@ -545,8 +545,8 @@ contract TestLens is TestSetup { // USDC data (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); uint256 collateralValueToAdd = (to6Decimals(amount) * oracle.getAssetPrice(usdc)) / 10**decimals; expectedStates.collateral += collateralValueToAdd; @@ -734,7 +734,7 @@ contract TestLens is TestSetup { } { (address underlying, , , bool isPaused, bool isPartiallyPaused, , , , , , ) = lens - .getMarketConfiguration(aDai); + .getMarketConfiguration(aDai); assertEq(underlying, dai); Types.Market memory expectedConfig; @@ -1134,8 +1134,8 @@ contract TestLens is TestSetup { uint256 healthFactor = lens.getUserHealthFactor(address(borrower1)); (uint256 ltv, uint256 liquidationThreshold, , , ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); assertEq(healthFactor, uint256(1 ether).percentMul(liquidationThreshold).percentDiv(ltv)); } @@ -1337,9 +1337,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(aDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(aDai); @@ -1425,9 +1425,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(aDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(aDai); diff --git a/test-foundry/aave-v2/TestLiquidate.t.sol b/test-foundry/aave-v2/TestLiquidate.t.sol index 11e80115d..13681798c 100644 --- a/test-foundry/aave-v2/TestLiquidate.t.sol +++ b/test-foundry/aave-v2/TestLiquidate.t.sol @@ -92,8 +92,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(usdc); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -175,8 +175,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -185,8 +185,7 @@ contract TestLiquidate is TestSetup { vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; uint256 amountToSeize = ((toRepay * borrowedPrice * vars.collateralTokenUnit) / - (vars.borrowedTokenUnit * collateralPrice)) - .percentMul(vars.liquidationBonus); + (vars.borrowedTokenUnit * collateralPrice)).percentMul(vars.liquidationBonus); assertApproxEqAbs( onPoolBorrower, @@ -255,8 +254,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; diff --git a/test-foundry/aave-v2/TestRatesLens.t.sol b/test-foundry/aave-v2/TestRatesLens.t.sol index 669a3ec4c..f996334f8 100644 --- a/test-foundry/aave-v2/TestRatesLens.t.sol +++ b/test-foundry/aave-v2/TestRatesLens.t.sol @@ -839,7 +839,7 @@ contract TestRatesLens is TestSetup { function testAverageSupplyRateShouldEqual0WhenNoSupply() public { (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); assertEq(supplyRatePerYear, 0); assertEq(p2pSupplyAmount, 0); @@ -848,7 +848,7 @@ contract TestRatesLens is TestSetup { function testAverageBorrowRateShouldEqual0WhenNoBorrow() public { (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); assertEq(borrowRatePerYear, 0); assertEq(p2pBorrowAmount, 0); @@ -889,7 +889,7 @@ contract TestRatesLens is TestSetup { supplier1.supply(aDai, amount); (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); DataTypes.ReserveData memory reserve = pool.getReserveData(dai); @@ -906,7 +906,7 @@ contract TestRatesLens is TestSetup { borrower1.borrow(aDai, amount); (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); DataTypes.ReserveData memory reserve = pool.getReserveData(dai); @@ -929,9 +929,9 @@ contract TestRatesLens is TestSetup { borrower1.borrow(aDai, amount); (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); (uint256 p2pSupplyRate, uint256 p2pBorrowRate, , ) = lens.getRatesPerYear(aDai); assertApproxEqAbs(supplyRatePerYear, p2pSupplyRate, 1, "unexpected supply rate"); diff --git a/test-foundry/aave-v2/TestRepay.t.sol b/test-foundry/aave-v2/TestRepay.t.sol index 08d6111b5..566167573 100644 --- a/test-foundry/aave-v2/TestRepay.t.sol +++ b/test-foundry/aave-v2/TestRepay.t.sol @@ -92,7 +92,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(aDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(aDai, address(borrower2)); + .borrowBalanceInOf(aDai, address(borrower2)); uint256 p2pBorrowIndex = morpho.p2pBorrowIndex(aDai); uint256 expectedBorrowBalanceInP2P = underlyingToP2PUnit( (25 * borrowedAmount) / 100, @@ -490,11 +490,11 @@ contract TestRepay is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .SP2PD - .wadToRay() - .rayMul(newVars.NI) - .rayDiv(oldVars.SP2PER) - .rayDiv(newVars.SP2PA.wadToRay()); + .SP2PD + .wadToRay() + .rayMul(newVars.NI) + .rayDiv(oldVars.SP2PER) + .rayDiv(newVars.SP2PA.wadToRay()); uint256 expectedSP2PER = oldVars.SP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul( @@ -510,8 +510,8 @@ contract TestRepay is TestSetup { ); uint256 expectedSupplyBalanceInUnderlying = suppliedAmount - .rayDiv(oldVars.SP2PER) - .rayMul(expectedSP2PER); + .rayDiv(oldVars.SP2PER) + .rayMul(expectedSP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PSupplier, uint256 onPoolSupplier) = morpho.supplyBalanceInOf( @@ -610,7 +610,7 @@ contract TestRepay is TestSetup { borrower1.borrow(aUsdt, amount); uint256 initialDebt = IVariableDebtToken(pool.getReserveData(usdt).variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)); + .scaledBalanceOf(address(morpho)); // Repay on-behalf of Morpho deal(usdt, address(this), amount / 2); diff --git a/test-foundry/aave-v2/TestWithdraw.t.sol b/test-foundry/aave-v2/TestWithdraw.t.sol index 9d290b577..9459fe49b 100644 --- a/test-foundry/aave-v2/TestWithdraw.t.sol +++ b/test-foundry/aave-v2/TestWithdraw.t.sol @@ -502,11 +502,11 @@ contract TestWithdraw is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .BP2PD - .wadToRay() - .rayMul(newVars.NVD) - .rayDiv(oldVars.BP2PER) - .rayDiv(newVars.BP2PA.wadToRay()); + .BP2PD + .wadToRay() + .rayMul(newVars.NVD) + .rayDiv(oldVars.BP2PER) + .rayDiv(newVars.BP2PA.wadToRay()); uint256 expectedBP2PER = oldVars.BP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul(RAY - shareOfTheDelta) + @@ -521,8 +521,8 @@ contract TestWithdraw is TestSetup { ); uint256 expectedBorrowBalanceInUnderlying = borrowedAmount - .rayDiv(oldVars.BP2PER) - .rayMul(expectedBP2PER); + .rayDiv(oldVars.BP2PER) + .rayMul(expectedBP2PER); for (uint256 i = 1; i <= 10; i++) { (uint256 inP2PBorrower, uint256 onPoolBorrower) = morpho.borrowBalanceInOf( diff --git a/test-foundry/aave-v3/TestGovernance.t.sol b/test-foundry/aave-v3/TestGovernance.t.sol index 1cecc315f..4a56eb331 100644 --- a/test-foundry/aave-v3/TestGovernance.t.sol +++ b/test-foundry/aave-v3/TestGovernance.t.sol @@ -15,7 +15,7 @@ contract TestGovernance is TestSetup { assertEq(morpho.maxSortedUsers(), 20); (uint256 supply, uint256 borrow, uint256 withdraw, uint256 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, 3e6); assertEq(borrow, 3e6); assertEq(withdraw, 3e6); @@ -94,7 +94,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/aave-v3/TestLens.t.sol b/test-foundry/aave-v3/TestLens.t.sol index f078ab9c2..4c4c1701e 100644 --- a/test-foundry/aave-v3/TestLens.t.sol +++ b/test-foundry/aave-v3/TestLens.t.sol @@ -44,8 +44,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; @@ -71,8 +71,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -100,8 +100,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -140,8 +140,8 @@ contract TestLens is TestSetup { uint256 decimalsUsdc; (expectedDataUsdc.ltv, expectedDataUsdc.liquidationThreshold, , decimalsUsdc, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); expectedDataUsdc.underlyingPrice = oracle.getAssetPrice(usdc); expectedDataUsdc.tokenUnit = 10**decimalsUsdc; expectedDataUsdc.debt = @@ -167,8 +167,8 @@ contract TestLens is TestSetup { uint256 decimalsDai; (expectedDataDai.ltv, expectedDataDai.liquidationThreshold, , decimalsDai, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); expectedDataDai.underlyingPrice = oracle.getAssetPrice(dai); expectedDataDai.tokenUnit = 10**decimalsDai; expectedDataDai.collateral = @@ -307,8 +307,8 @@ contract TestLens is TestSetup { // DAI data (uint256 ltvDai, uint256 liquidationThresholdDai, , uint256 decimalsDai, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPriceDai = oracle.getAssetPrice(dai); uint256 tokenUnitDai = 10**decimalsDai; @@ -353,8 +353,8 @@ contract TestLens is TestSetup { // USDC data (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); uint256 collateralValueToAdd = (to6Decimals(amount) * oracle.getAssetPrice(usdc)) / 10**decimals; expectedStates.collateral += collateralValueToAdd; diff --git a/test-foundry/aave-v3/TestLiquidate.t.sol b/test-foundry/aave-v3/TestLiquidate.t.sol index 2bc4ab420..4e42e3db0 100644 --- a/test-foundry/aave-v3/TestLiquidate.t.sol +++ b/test-foundry/aave-v3/TestLiquidate.t.sol @@ -91,8 +91,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(usdc); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -173,8 +173,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -183,8 +183,7 @@ contract TestLiquidate is TestSetup { vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; uint256 amountToSeize = ((toRepay * borrowedPrice * vars.collateralTokenUnit) / - (vars.borrowedTokenUnit * collateralPrice)) - .percentMul(vars.liquidationBonus); + (vars.borrowedTokenUnit * collateralPrice)).percentMul(vars.liquidationBonus); testEqualityLarge( onPoolBorrower, @@ -251,8 +250,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; diff --git a/test-foundry/aave-v3/TestRepay.t.sol b/test-foundry/aave-v3/TestRepay.t.sol index 60e4671ef..99c7b39e0 100644 --- a/test-foundry/aave-v3/TestRepay.t.sol +++ b/test-foundry/aave-v3/TestRepay.t.sol @@ -92,7 +92,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(aDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(aDai, address(borrower2)); + .borrowBalanceInOf(aDai, address(borrower2)); uint256 p2pBorrowIndex = morpho.p2pBorrowIndex(aDai); uint256 expectedBorrowBalanceInP2P = underlyingToP2PUnit( (25 * borrowedAmount) / 100, @@ -495,11 +495,11 @@ contract TestRepay is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .SP2PD - .wadToRay() - .rayMul(newVars.NI) - .rayDiv(oldVars.SP2PER) - .rayDiv(newVars.SP2PA.wadToRay()); + .SP2PD + .wadToRay() + .rayMul(newVars.NI) + .rayDiv(oldVars.SP2PER) + .rayDiv(newVars.SP2PA.wadToRay()); uint256 expectedSP2PER = oldVars.SP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul( @@ -515,8 +515,8 @@ contract TestRepay is TestSetup { ); uint256 expectedSupplyBalanceInUnderlying = suppliedAmount - .rayDiv(oldVars.SP2PER) - .rayMul(expectedSP2PER); + .rayDiv(oldVars.SP2PER) + .rayMul(expectedSP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PSupplier, uint256 onPoolSupplier) = morpho.supplyBalanceInOf( @@ -620,7 +620,7 @@ contract TestRepay is TestSetup { borrower1.borrow(aUsdt, amount); uint256 initialDebt = IVariableDebtToken(pool.getReserveData(usdt).variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)); + .scaledBalanceOf(address(morpho)); // Repay on-behalf of Morpho deal(usdt, address(this), amount / 2); diff --git a/test-foundry/aave-v3/TestRewards.t.sol b/test-foundry/aave-v3/TestRewards.t.sol index f327c02d7..f48227848 100644 --- a/test-foundry/aave-v3/TestRewards.t.sol +++ b/test-foundry/aave-v3/TestRewards.t.sol @@ -266,7 +266,7 @@ contract TestRewards is TestSetup { assertGt(rewardBalanceAfter, rewardBalanceBefore); uint256 protocolUnclaimedRewards = IRewardsController(rewardsControllerAddress) - .getUserRewards(tokensInArray, address(morpho), rewardToken); + .getUserRewards(tokensInArray, address(morpho), rewardToken); assertEq(protocolUnclaimedRewards, 0); } @@ -341,7 +341,7 @@ contract TestRewards is TestSetup { assertEq(unclaimedRewards3, 0); uint256 protocolUnclaimedRewards = IRewardsController(rewardsControllerAddress) - .getUserRewards(tokensInArray, address(morpho), rewardToken); + .getUserRewards(tokensInArray, address(morpho), rewardToken); assertApproxEqAbs(protocolUnclaimedRewards, 0, 2); } diff --git a/test-foundry/aave-v3/TestWithdraw.t.sol b/test-foundry/aave-v3/TestWithdraw.t.sol index 150a3a31c..4883488db 100644 --- a/test-foundry/aave-v3/TestWithdraw.t.sol +++ b/test-foundry/aave-v3/TestWithdraw.t.sol @@ -509,11 +509,11 @@ contract TestWithdraw is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .BP2PD - .wadToRay() - .rayMul(newVars.NVD) - .rayDiv(oldVars.BP2PER) - .rayDiv(newVars.BP2PA.wadToRay()); + .BP2PD + .wadToRay() + .rayMul(newVars.NVD) + .rayDiv(oldVars.BP2PER) + .rayDiv(newVars.BP2PA.wadToRay()); uint256 expectedBP2PER = oldVars.BP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul(RAY - shareOfTheDelta) + @@ -528,8 +528,8 @@ contract TestWithdraw is TestSetup { ); uint256 expectedBorrowBalanceInUnderlying = borrowedAmount - .rayDiv(oldVars.BP2PER) - .rayMul(expectedBP2PER); + .rayDiv(oldVars.BP2PER) + .rayMul(expectedBP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PBorrower, uint256 onPoolBorrower) = morpho.borrowBalanceInOf( diff --git a/test-foundry/compound/TestBorrow.t.sol b/test-foundry/compound/TestBorrow.t.sol index 5f5ec274b..02f96b886 100644 --- a/test-foundry/compound/TestBorrow.t.sol +++ b/test-foundry/compound/TestBorrow.t.sol @@ -89,8 +89,7 @@ contract TestBorrow is TestSetup { morpho.p2pBorrowIndex(cDai) ); uint256 expectedBorrowOnPool = (borrowAmount - - getBalanceOnCompound(amount, cDaiSupplyIndex)) - .div(ICToken(cDai).borrowIndex()); + getBalanceOnCompound(amount, cDaiSupplyIndex)).div(ICToken(cDai).borrowIndex()); testEquality(inP2P, expectedBorrowInP2P, "Borrower1 in peer-to-peer"); testEquality(onPool, expectedBorrowOnPool, "Borrower1 on pool"); diff --git a/test-foundry/compound/TestEth.t.sol b/test-foundry/compound/TestEth.t.sol index 71c79b1a1..a26f4d64e 100644 --- a/test-foundry/compound/TestEth.t.sol +++ b/test-foundry/compound/TestEth.t.sol @@ -231,9 +231,9 @@ contract TestEth is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cEth); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cUsdc).exchangeRateCurrent()); @@ -289,9 +289,9 @@ contract TestEth is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cDai); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cEth).exchangeRateCurrent()); diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index 1f0ad9f46..ec5d44aa4 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -100,7 +100,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/compound/TestLens.t.sol b/test-foundry/compound/TestLens.t.sol index dd55bd3af..1514d37fc 100644 --- a/test-foundry/compound/TestLens.t.sol +++ b/test-foundry/compound/TestLens.t.sol @@ -54,7 +54,7 @@ contract TestLens is TestSetup { uint256 underlyingPrice = oracle.getUnderlyingPrice(cDai); uint256 collateralValue = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateStored()) - .mul(underlyingPrice); + .mul(underlyingPrice); uint256 maxDebtValue = collateralValue.mul(collateralFactor); assertEq(assetData.collateralFactor, collateralFactor, "collateralFactor"); @@ -140,7 +140,7 @@ contract TestLens is TestSetup { expectedDataCUsdc.underlyingPrice = oracle.getUnderlyingPrice(cUsdc); expectedDataCUsdc.debtValue = getBalanceOnCompound(toBorrow, ICToken(cUsdc).borrowIndex()) - .mul(expectedDataCUsdc.underlyingPrice); + .mul(expectedDataCUsdc.underlyingPrice); assertEq( assetDataCUsdc.underlyingPrice, @@ -248,7 +248,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.onPool, userSupplyBalance.inP2P, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( cDai, @@ -273,7 +273,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.onPool, userBorrowBalance.inP2P, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( cUsdc, @@ -310,7 +310,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.onPool, userSupplyBalance.inP2P, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( cDai, @@ -334,7 +334,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.onPool, userBorrowBalance.inP2P, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( cUsdc, @@ -420,7 +420,7 @@ contract TestLens is TestSetup { (, uint256 borrowableUsdt) = lens.getUserMaxCapacitiesForAsset(address(borrower1), cUsdt); uint256 expectedBorrowableUsdt = (assetDataCDai.maxDebtValue + assetDataCUsdc.maxDebtValue) - .div(assetDataCUsdt.underlyingPrice); + .div(assetDataCUsdt.underlyingPrice); assertEq( withdrawableUsdc, @@ -511,8 +511,8 @@ contract TestLens is TestSetup { // DAI data collateralValueToAdd = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateStored()).mul( - oracle.getUnderlyingPrice(cDai) - ); + oracle.getUnderlyingPrice(cDai) + ); expectedStates.collateralValue += collateralValueToAdd; (, collateralFactor, ) = comptroller.markets(cDai); expectedStates.maxDebtValue += collateralValueToAdd.mul(collateralFactor); @@ -628,17 +628,17 @@ contract TestLens is TestSetup { // DAI data (, collateralFactor, ) = comptroller.markets(cDai); collateralValueToAdd = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateCurrent()) - .mul(oracle.getUnderlyingPrice(cDai)); + .mul(oracle.getUnderlyingPrice(cDai)); expectedStates.collateralValue += collateralValueToAdd; expectedStates.maxDebtValue += collateralValueToAdd.mul(collateralFactor); // USDC data expectedStates.debtValue += getBalanceOnCompound(toBorrow, ICToken(cUsdc).borrowIndex()) - .mul(oracle.getUnderlyingPrice(cUsdc)); + .mul(oracle.getUnderlyingPrice(cUsdc)); // USDT data expectedStates.debtValue += getBalanceOnCompound(toBorrow, ICToken(cUsdt).borrowIndex()) - .mul(oracle.getUnderlyingPrice(cUsdt)); + .mul(oracle.getUnderlyingPrice(cUsdt)); assertEq(states.collateralValue, expectedStates.collateralValue, "Collateral Value"); assertEq(states.debtValue, expectedStates.debtValue, "Debt Value"); @@ -1178,7 +1178,7 @@ contract TestLens is TestSetup { createAndSetCustomPriceOracle().setDirectPrice(dai, collateralPrice); (uint256 collateralValue, uint256 debtValue, uint256 maxDebtValue) = lens - .getUserBalanceStates(address(borrower1), new address[](0)); + .getUserBalanceStates(address(borrower1), new address[](0)); uint256 borrowedPrice = oracle.getUnderlyingPrice(cUsdc); uint256 toRepay = lens.computeLiquidationRepayAmount( @@ -1328,9 +1328,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(cDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(cDai); @@ -1416,9 +1416,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(cDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(cDai); diff --git a/test-foundry/compound/TestLiquidate.t.sol b/test-foundry/compound/TestLiquidate.t.sol index 358ef639a..a3fdbac94 100644 --- a/test-foundry/compound/TestLiquidate.t.sol +++ b/test-foundry/compound/TestLiquidate.t.sol @@ -93,9 +93,9 @@ contract TestLiquidate is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cDai); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cUsdc).exchangeRateCurrent()); @@ -159,9 +159,9 @@ contract TestLiquidate is TestSetup { (inP2PBorrower, onPoolBorrower) = morpho.supplyBalanceInOf(cDai, address(borrower1)); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(customOracle.getUnderlyingPrice(cUsdc)) - .div(customOracle.getUnderlyingPrice(cDai)); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(customOracle.getUnderlyingPrice(cUsdc)) + .div(customOracle.getUnderlyingPrice(cDai)); testEquality( onPoolBorrower, @@ -225,9 +225,9 @@ contract TestLiquidate is TestSetup { (inP2PBorrower, onPoolBorrower) = morpho.supplyBalanceInOf(cDai, address(borrower1)); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(customOracle.getUnderlyingPrice(cUsdc)) - .div(customOracle.getUnderlyingPrice(cDai)); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(customOracle.getUnderlyingPrice(cUsdc)) + .div(customOracle.getUnderlyingPrice(cDai)); testEquality( onPoolBorrower, diff --git a/test-foundry/compound/TestRatesLens.t.sol b/test-foundry/compound/TestRatesLens.t.sol index 565988dad..0fb4c24d9 100644 --- a/test-foundry/compound/TestRatesLens.t.sol +++ b/test-foundry/compound/TestRatesLens.t.sol @@ -872,7 +872,7 @@ contract TestRatesLens is TestSetup { function testAverageSupplyRateShouldEqual0WhenNoSupply() public { (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); assertEq(supplyRatePerBlock, 0); assertEq(p2pSupplyAmount, 0); @@ -881,7 +881,7 @@ contract TestRatesLens is TestSetup { function testAverageBorrowRateShouldEqual0WhenNoBorrow() public { (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); assertEq(borrowRatePerBlock, 0); assertEq(p2pBorrowAmount, 0); @@ -929,7 +929,7 @@ contract TestRatesLens is TestSetup { supplier1.supply(cDai, amount); (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); assertApproxEqAbs(supplyRatePerBlock, ICToken(cDai).supplyRatePerBlock(), 1); assertApproxEqAbs(poolSupplyAmount, amount, 1e7); @@ -944,7 +944,7 @@ contract TestRatesLens is TestSetup { borrower1.borrow(cDai, amount); (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); assertApproxEqAbs(borrowRatePerBlock, ICToken(cDai).borrowRatePerBlock(), 1); assertApproxEqAbs(poolBorrowAmount, amount, 1); @@ -965,9 +965,9 @@ contract TestRatesLens is TestSetup { borrower1.borrow(cDai, amount); (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); (uint256 p2pSupplyRate, uint256 p2pBorrowRate, , ) = lens.getRatesPerBlock(cDai); assertApproxEqAbs(supplyRatePerBlock, p2pSupplyRate, 1, "unexpected supply rate"); diff --git a/test-foundry/compound/TestRepay.t.sol b/test-foundry/compound/TestRepay.t.sol index 09569ddc0..0cef74076 100644 --- a/test-foundry/compound/TestRepay.t.sol +++ b/test-foundry/compound/TestRepay.t.sol @@ -106,7 +106,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(cDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(cDai, address(borrower2)); + .borrowBalanceInOf(cDai, address(borrower2)); uint256 expectedBorrowBalanceInP2P = ((25 * borrowedAmount) / 100).div( morpho.p2pBorrowIndex(cDai) ); @@ -497,7 +497,7 @@ contract TestRepay is TestSetup { uint256 expectedp2pSupplyDeltaInUnderlying = (matched.mul(morpho.p2pSupplyIndex(cDai)) - unmatched); uint256 expectedp2pSupplyDelta = (matched.mul(morpho.p2pSupplyIndex(cDai)) - unmatched) - .div(ICToken(cDai).exchangeRateCurrent()); + .div(ICToken(cDai).exchangeRateCurrent()); (uint256 p2pSupplyDelta, , , ) = morpho.deltas(cDai); assertApproxEqAbs(p2pSupplyDelta, expectedp2pSupplyDelta, 10, "supply delta 1"); diff --git a/test-foundry/compound/TestWithdraw.t.sol b/test-foundry/compound/TestWithdraw.t.sol index 579d2be1a..a7128481a 100644 --- a/test-foundry/compound/TestWithdraw.t.sol +++ b/test-foundry/compound/TestWithdraw.t.sol @@ -247,8 +247,9 @@ contract TestWithdraw is TestSetup { // The amount withdrawn from supplier1 minus what is on pool will be removed from the borrower peer-to-peer's position. uint256 expectedBorrowBalanceOnPool = (toWithdraw - - onPoolSupplier.mul(ICToken(cDai).exchangeRateCurrent())) - .div(ICToken(cDai).borrowIndex()); + onPoolSupplier.mul(ICToken(cDai).exchangeRateCurrent())).div( + ICToken(cDai).borrowIndex() + ); assertApproxEqAbs(inP2PBorrower, expectedBorrowBalanceInP2P, 1, "borrower in peer-to-peer"); assertApproxEqAbs(onPoolBorrower, expectedBorrowBalanceOnPool, 1e3, "borrower on Pool"); @@ -454,7 +455,7 @@ contract TestWithdraw is TestSetup { uint256 expectedP2PBorrowDeltaInUnderlying = (matched.mul(morpho.p2pBorrowIndex(cDai)) - unmatched); uint256 expectedP2PBorrowDelta = (matched.mul(morpho.p2pBorrowIndex(cDai)) - unmatched) - .div(ICToken(cDai).borrowIndex()); + .div(ICToken(cDai).borrowIndex()); (, uint256 p2pBorrowDelta, , ) = morpho.deltas(cDai); assertEq(p2pBorrowDelta, expectedP2PBorrowDelta, "borrow delta not expected 1"); diff --git a/test-foundry/prod/aave-v2/TestBorrow.t.sol b/test-foundry/prod/aave-v2/TestBorrow.t.sol index 6ca633d57..f38b62e27 100644 --- a/test-foundry/prod/aave-v2/TestBorrow.t.sol +++ b/test-foundry/prod/aave-v2/TestBorrow.t.sol @@ -63,9 +63,9 @@ contract TestBorrow is TestSetup { test.borrowedPrice = oracle.getAssetPrice(address(test.borrowed)); (test.collateralLtv, , , test.collateralDecimals, ) = morpho - .pool() - .getConfiguration(address(test.collateral)) - .getParamsMemory(); + .pool() + .getConfiguration(address(test.collateral)) + .getParamsMemory(); (test.p2pSupplyDelta, , , ) = morpho.deltas(address(test.borrowedPoolToken)); (, , , , , , test.p2pDisabled) = morpho.market(address(test.borrowedPoolToken)); @@ -198,7 +198,7 @@ contract TestBorrow is TestSetup { vm.warp(block.timestamp + 60 * 60 * 24); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); uint256 expectedBorrowedOnPoolAfter = test.borrowedOnPoolBefore.rayMul( 1e27 + (test.poolBorrowRatePerYear * 60 * 60 * 48) / 365 days diff --git a/test-foundry/prod/aave-v2/TestRepay.t.sol b/test-foundry/prod/aave-v2/TestRepay.t.sol index dcbd54c41..d926eb770 100644 --- a/test-foundry/prod/aave-v2/TestRepay.t.sol +++ b/test-foundry/prod/aave-v2/TestRepay.t.sol @@ -59,9 +59,9 @@ contract TestRepay is TestSetup { test.borrowedPrice = oracle.getAssetPrice(address(test.borrowed)); (test.collateralLtv, , , test.collateralDecimals, ) = morpho - .pool() - .getConfiguration(address(test.collateral)) - .getParamsMemory(); + .pool() + .getConfiguration(address(test.collateral)) + .getParamsMemory(); test.borrowedBalanceBefore = test.borrowed.balanceOf(address(borrower1)); test.morphoBalanceOnPoolBefore = test.borrowedPoolToken.balanceOf(address(morpho)); @@ -132,7 +132,7 @@ contract TestRepay is TestSetup { ); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertGe( test.totalBorrowedAfter, @@ -156,7 +156,7 @@ contract TestRepay is TestSetup { ); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertEq(test.borrowedOnPoolAfter, 0, "unexpected pool borrowed amount after repay"); assertEq(test.borrowedInP2PAfter, 0, "unexpected p2p borrowed amount after repay"); diff --git a/test-foundry/prod/aave-v2/TestSupply.t.sol b/test-foundry/prod/aave-v2/TestSupply.t.sol index 6f54c960a..c00860376 100644 --- a/test-foundry/prod/aave-v2/TestSupply.t.sol +++ b/test-foundry/prod/aave-v2/TestSupply.t.sol @@ -46,9 +46,9 @@ contract TestSupply is TestSetup { (, , , , , , test.p2pDisabled) = morpho.market(address(test.poolToken)); test.morphoBalanceOnPoolBefore = test.poolToken.scaledBalanceOf(address(morpho)); test.morphoBorrowOnPoolBefore = test - .variablePoolToken - .scaledBalanceOf(address(morpho)) - .rayMul(pool.getReserveNormalizedVariableDebt(address(test.underlying))); + .variablePoolToken + .scaledBalanceOf(address(morpho)) + .rayMul(pool.getReserveNormalizedVariableDebt(address(test.underlying))); test.morphoUnderlyingBalanceBefore = test.underlying.balanceOf(address(morpho)); uint256 amount = bound( @@ -150,7 +150,7 @@ contract TestSupply is TestSetup { vm.warp(block.timestamp + 60 * 60 * 24); (test.underlyingInP2PAfter, test.underlyingOnPoolAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); uint256 expectedUnderlyingOnPoolAfter = test.underlyingOnPoolBefore.rayMul( 1e27 + (test.poolSupplyRatePerYear * 60 * 60 * 48) / 365 days diff --git a/test-foundry/prod/aave-v2/TestWithdraw.t.sol b/test-foundry/prod/aave-v2/TestWithdraw.t.sol index 83e26a38d..d8a7bf189 100644 --- a/test-foundry/prod/aave-v2/TestWithdraw.t.sol +++ b/test-foundry/prod/aave-v2/TestWithdraw.t.sol @@ -73,7 +73,7 @@ contract TestWithdraw is TestSetup { supplier1.withdraw(address(test.poolToken), test.totalUnderlyingBefore); (test.underlyingInP2PAfter, test.underlyingOnPoolAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); assertApproxEqAbs( test.underlying.balanceOf(address(supplier1)), diff --git a/test-foundry/prod/compound/TestBorrow.t.sol b/test-foundry/prod/compound/TestBorrow.t.sol index 828c03046..250ab85c3 100644 --- a/test-foundry/prod/compound/TestBorrow.t.sol +++ b/test-foundry/prod/compound/TestBorrow.t.sol @@ -188,7 +188,7 @@ contract TestBorrow is TestSetup { vm.roll(block.number + 500); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); uint256 expectedBorrowedOnPoolAfter = test.borrowedOnPoolBefore.mul( 1e18 + test.poolBorrowRatePerBlock * 1_000 diff --git a/test-foundry/prod/compound/TestRepay.t.sol b/test-foundry/prod/compound/TestRepay.t.sol index ee4a9a691..fffd043fd 100644 --- a/test-foundry/prod/compound/TestRepay.t.sol +++ b/test-foundry/prod/compound/TestRepay.t.sol @@ -124,7 +124,7 @@ contract TestRepay is TestSetup { ); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertGe( test.totalBorrowedAfter, @@ -148,7 +148,7 @@ contract TestRepay is TestSetup { ); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertEq(test.borrowedOnPoolAfter, 0, "unexpected pool borrowed amount after repay"); assertEq(test.borrowedInP2PAfter, 0, "unexpected p2p borrowed amount after repay"); diff --git a/test-foundry/prod/compound/TestSupply.t.sol b/test-foundry/prod/compound/TestSupply.t.sol index 6320c0841..f1519cfb1 100644 --- a/test-foundry/prod/compound/TestSupply.t.sol +++ b/test-foundry/prod/compound/TestSupply.t.sol @@ -133,7 +133,7 @@ contract TestSupply is TestSetup { vm.roll(block.number + 500); (test.underlyingOnPoolAfter, test.underlyingInP2PAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); uint256 expectedUnderlyingOnPoolAfter = test.underlyingOnPoolBefore.mul( 1e18 + test.poolSupplyRatePerBlock * 1_000 diff --git a/test-foundry/prod/compound/TestWithdraw.t.sol b/test-foundry/prod/compound/TestWithdraw.t.sol index d1aab59a4..d8a546817 100644 --- a/test-foundry/prod/compound/TestWithdraw.t.sol +++ b/test-foundry/prod/compound/TestWithdraw.t.sol @@ -66,7 +66,7 @@ contract TestWithdraw is TestSetup { supplier1.withdraw(address(test.poolToken), test.totalUnderlyingBefore); (test.underlyingOnPoolAfter, test.underlyingInP2PAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); assertEq( test.underlying.balanceOf(address(supplier1)), From 491df3e6db664b02745b119ca529b0e2ac31c0c2 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 17:09:14 +0200 Subject: [PATCH 03/31] Add stEth upgrade test --- .env.example | 4 +- .gitignore | 6 +- .prettierrc.json | 9 +- .tenderly/config.yaml | 1 - InterestRatesManagerUpgraded.sol | 2575 ----------------- Makefile | 4 + hardhat.config.ts | 65 +- package.json | 36 +- scripts/upgrade-compound.ts | 60 - ...tributor.ts => RewardsDistributor.spec.ts} | 64 +- .../test => test/contracts}/FakeToken.sol | 0 test/upgrades/maths/BaseMath.ts | 18 + test/upgrades/maths/CompoundMath.ts | 11 + test/upgrades/maths/PercentageMath.ts | 21 + test/upgrades/maths/WadRayMath.ts | 17 + test/upgrades/maths/index.ts | 6 + test/upgrades/maths/utils.ts | 10 + test/upgrades/mocks/aave-v2.json | 1672 +++++++++++ test/upgrades/stEth.spec.ts | 79 + tsconfig.json | 4 +- yarn.lock | 458 ++- 21 files changed, 2372 insertions(+), 2748 deletions(-) delete mode 100644 .tenderly/config.yaml delete mode 100644 InterestRatesManagerUpgraded.sol delete mode 100644 scripts/upgrade-compound.ts rename test/{test-rewards-distributor.ts => RewardsDistributor.spec.ts} (70%) rename {contracts/common/test => test/contracts}/FakeToken.sol (100%) create mode 100644 test/upgrades/maths/BaseMath.ts create mode 100644 test/upgrades/maths/CompoundMath.ts create mode 100644 test/upgrades/maths/PercentageMath.ts create mode 100644 test/upgrades/maths/WadRayMath.ts create mode 100644 test/upgrades/maths/index.ts create mode 100644 test/upgrades/maths/utils.ts create mode 100644 test/upgrades/mocks/aave-v2.json create mode 100644 test/upgrades/stEth.spec.ts diff --git a/.env.example b/.env.example index a78718cd5..411fa475d 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,3 @@ -INFURA_PROJECT_ID= NETWORK=eth-mainnet DEPLOYER_PRIVATE_KEY= -TENDERLY_SECRET_KEY= -ALCHEMY_KEY= \ No newline at end of file +ALCHEMY_KEY= diff --git a/.gitignore b/.gitignore index 13bb684ba..7a6f4167d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,13 +17,11 @@ /artifacts /cache /coverage.json +test/contracts/upgrades # misc .DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local +.env* *.ansi npm-debug.log* diff --git a/.prettierrc.json b/.prettierrc.json index dcb93dcb6..8b6dba7fa 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -10,7 +10,14 @@ "files": "*.ts", "options": { "tabWidth": 2, - "printWidth": 140 + "printWidth": 140, + "importOrder": [ + "^(?![@\\.]).*", + "^@", + "^\\.\\.", + "^\\." + ], + "importOrderSeparation": true } } ] diff --git a/.tenderly/config.yaml b/.tenderly/config.yaml deleted file mode 100644 index 3a98ced89..000000000 --- a/.tenderly/config.yaml +++ /dev/null @@ -1 +0,0 @@ -access_key: ${{ TENDERLY_SECRET_KEY }} diff --git a/InterestRatesManagerUpgraded.sol b/InterestRatesManagerUpgraded.sol deleted file mode 100644 index f465519e3..000000000 --- a/InterestRatesManagerUpgraded.sol +++ /dev/null @@ -1,2575 +0,0 @@ -// SPDX-License-Identifier: GNU AGPLv3 -pragma solidity 0.8.13; - -/** - * @dev Interface of the ERC20 standard as defined in the EIP. - */ -interface IERC20 { - /** - * @dev Returns the amount of tokens in existence. - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Returns the amount of tokens owned by `account`. - */ - function balanceOf(address account) external view returns (uint256); - - /** - * @dev Moves `amount` tokens from the caller's account to `recipient`. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transfer(address recipient, uint256 amount) external returns (bool); - - /** - * @dev Returns the remaining number of tokens that `spender` will be - * allowed to spend on behalf of `owner` through {transferFrom}. This is - * zero by default. - * - * This value changes when {approve} or {transferFrom} are called. - */ - function allowance(address owner, address spender) external view returns (uint256); - - /** - * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * IMPORTANT: Beware that changing an allowance with this method brings the risk - * that someone may use both the old and the new allowance by unfortunate - * transaction ordering. One possible solution to mitigate this race - * condition is to first reduce the spender's allowance to 0 and set the - * desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * - * Emits an {Approval} event. - */ - function approve(address spender, uint256 amount) external returns (bool); - - /** - * @dev Moves `amount` tokens from `sender` to `recipient` using the - * allowance mechanism. `amount` is then deducted from the caller's - * allowance. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - /** - * @dev Emitted when `value` tokens are moved from one account (`from`) to - * another (`to`). - * - * Note that `value` may be zero. - */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /** - * @dev Emitted when the allowance of a `spender` for an `owner` is set by - * a call to {approve}. `value` is the new allowance. - */ - event Approval(address indexed owner, address indexed spender, uint256 value); -} - -interface IScaledBalanceToken { - /** - * @dev Returns the scaled balance of the user. The scaled balance is the sum of all the - * updated stored balance divided by the reserve's liquidity index at the moment of the update - * @param user The user whose balance is calculated - * @return The scaled balance of the user - **/ - function scaledBalanceOf(address user) external view returns (uint256); - - /** - * @dev Returns the scaled balance of the user and the scaled total supply. - * @param user The address of the user - * @return The scaled balance of the user - * @return The scaled balance and the scaled total supply - **/ - function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256); - - /** - * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index) - * @return The scaled total supply - **/ - function scaledTotalSupply() external view returns (uint256); -} - -interface IAToken is IERC20, IScaledBalanceToken { - /** - * @dev Emitted after the mint action - * @param from The address performing the mint - * @param value The amount being - * @param index The new liquidity index of the reserve - **/ - event Mint(address indexed from, uint256 value, uint256 index); - - /** - * @dev Mints `amount` aTokens to `user` - * @param user The address receiving the minted tokens - * @param amount The amount of tokens getting minted - * @param index The new liquidity index of the reserve - * @return `true` if the the previous balance of the user was 0 - */ - function mint( - address user, - uint256 amount, - uint256 index - ) external returns (bool); - - /** - * @dev Emitted after aTokens are burned - * @param from The owner of the aTokens, getting them burned - * @param target The address that will receive the underlying - * @param value The amount being burned - * @param index The new liquidity index of the reserve - **/ - event Burn(address indexed from, address indexed target, uint256 value, uint256 index); - - /** - * @dev Emitted during the transfer action - * @param from The user whose tokens are being transferred - * @param to The recipient - * @param value The amount being transferred - * @param index The new liquidity index of the reserve - **/ - event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index); - - /** - * @dev Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying` - * @param user The owner of the aTokens, getting them burned - * @param receiverOfUnderlying The address that will receive the underlying - * @param amount The amount being burned - * @param index The new liquidity index of the reserve - **/ - function burn( - address user, - address receiverOfUnderlying, - uint256 amount, - uint256 index - ) external; - - /** - * @dev Mints aTokens to the reserve treasury - * @param amount The amount of tokens getting minted - * @param index The new liquidity index of the reserve - */ - function mintToTreasury(uint256 amount, uint256 index) external; - - /** - * @dev Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken - * @param from The address getting liquidated, current owner of the aTokens - * @param to The recipient - * @param value The amount of tokens getting transferred - **/ - function transferOnLiquidation( - address from, - address to, - uint256 value - ) external; - - /** - * @dev Transfers the underlying asset to `target`. Used by the LendingPool to transfer - * assets in borrow(), withdraw() and flashLoan() - * @param user The recipient of the aTokens - * @param amount The amount getting transferred - * @return The amount transferred - **/ - function transferUnderlyingTo(address user, uint256 amount) external returns (uint256); - - function UNDERLYING_ASSET_ADDRESS() external view returns (address); -} - -/// @title PercentageMath. -/// @author Morpho Labs. -/// @custom:contact security@morpho.xyz -/// @notice Optimized version of Aave V3 math library PercentageMath to conduct percentage manipulations: https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/libraries/math/PercentageMath.sol -library PercentageMath { - /// CONSTANTS /// - - uint256 internal constant PERCENTAGE_FACTOR = 1e4; - uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4; - uint256 internal constant MAX_UINT256 = 2**256 - 1; - uint256 internal constant MAX_UINT256_MINUS_HALF_PERCENTAGE = 2**256 - 1 - 0.5e4; - - /// ERRORS /// - - // Thrown when percentage is above 100%. - error PercentageTooHigh(); - - /// INTERNAL /// - - /// @notice Executes a percentage multiplication. - /// @param x The value of which the percentage needs to be calculated. - /// @param percentage The percentage of the value to be calculated. - /// @return y The result of the multiplication. - function percentMul(uint256 x, uint256 percentage) internal pure returns (uint256 y) { - // Let percentage > 0 - // Overflow if x * percentage + HALF_PERCENTAGE_FACTOR > type(uint256).max - // <=> x * percentage > type(uint256).max - HALF_PERCENTAGE_FACTOR - // <=> x > (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage - assembly { - if mul(percentage, gt(x, div(MAX_UINT256_MINUS_HALF_PERCENTAGE, percentage))) { - revert(0, 0) - } - - y := div(add(mul(x, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR) - } - } - - /// @notice Executes a percentage division. - /// @param x The value of which the percentage needs to be calculated. - /// @param percentage The percentage of the value to be calculated. - /// @return y The result of the division. - function percentDiv(uint256 x, uint256 percentage) internal pure returns (uint256 y) { - // let percentage > 0 - // Overflow if x * PERCENTAGE_FACTOR + halfPercentage > type(uint256).max - // <=> x * PERCENTAGE_FACTOR > type(uint256).max - halfPercentage - // <=> x > type(uint256).max - halfPercentage / PERCENTAGE_FACTOR - assembly { - y := div(percentage, 2) - if iszero(mul(percentage, iszero(gt(x, div(sub(MAX_UINT256, y), PERCENTAGE_FACTOR))))) { - revert(0, 0) - } - - y := div(add(mul(x, PERCENTAGE_FACTOR), y), percentage) - } - } - - /// @notice Executes a weighted average, given an interval [x, y] and a percent p: x * (1 - p) + y * p - /// @param x The value at the start of the interval (included). - /// @param y The value at the end of the interval (included). - /// @param percentage The percentage of the interval to be calculated. - /// @return the average of x and y, weighted by percentage. - function weightedAvg( - uint256 x, - uint256 y, - uint256 percentage - ) internal pure returns (uint256) { - if (percentage > PERCENTAGE_FACTOR) revert PercentageTooHigh(); - - return percentMul(x, PERCENTAGE_FACTOR - percentage) + percentMul(y, percentage); - } -} - -/// @title WadRayMath. -/// @author Morpho Labs. -/// @custom:contact security@morpho.xyz -/// @notice Optimized version of Aave V3 math library WadRayMath to conduct wad and ray manipulations: https://github.com/aave/aave-v3-core/blob/master/contracts/protocol/libraries/math/WadRayMath.sol -library WadRayMath { - /// CONSTANTS /// - - uint256 internal constant WAD = 1e18; - uint256 internal constant HALF_WAD = 0.5e18; - uint256 internal constant RAY = 1e27; - uint256 internal constant HALF_RAY = 0.5e27; - uint256 internal constant WAD_RAY_RATIO = 1e9; - uint256 internal constant HALF_WAD_RAY_RATIO = 0.5e9; - uint256 internal constant MAX_UINT256 = 2**256 - 1; // Not possible to use type(uint256).max in yul. - uint256 internal constant MAX_UINT256_MINUS_HALF_WAD = 2**256 - 1 - 0.5e18; - uint256 internal constant MAX_UINT256_MINUS_HALF_RAY = 2**256 - 1 - 0.5e27; - - /// INTERNAL /// - - /// @dev Multiplies two wad, rounding half up to the nearest wad. - /// @param x Wad. - /// @param y Wad. - /// @return z The result of x * y, in wad. - function wadMul(uint256 x, uint256 y) internal pure returns (uint256 z) { - // Let y > 0 - // Overflow if (x * y + HALF_WAD) > type(uint256).max - // <=> x * y > type(uint256).max - HALF_WAD - // <=> x > (type(uint256).max - HALF_WAD) / y - assembly { - if mul(y, gt(x, div(MAX_UINT256_MINUS_HALF_WAD, y))) { - revert(0, 0) - } - - z := div(add(mul(x, y), HALF_WAD), WAD) - } - } - - /// @dev Divides two wad, rounding half up to the nearest wad. - /// @param x Wad. - /// @param y Wad. - /// @return z The result of x / y, in wad. - function wadDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { - // Overflow if y == 0 - // Overflow if (x * WAD + y / 2) > type(uint256).max - // <=> x * WAD > type(uint256).max - y / 2 - // <=> x > (type(uint256).max - y / 2) / WAD - assembly { - z := div(y, 2) - if iszero(mul(y, iszero(gt(x, div(sub(MAX_UINT256, z), WAD))))) { - revert(0, 0) - } - - z := div(add(mul(x, WAD), z), y) - } - } - - /// @dev Multiplies two ray, rounding half up to the nearest ray. - /// @param x Ray. - /// @param y Ray. - /// @return z The result of x * y, in ray. - function rayMul(uint256 x, uint256 y) internal pure returns (uint256 z) { - // Let y > 0 - // Overflow if (x * y + HALF_RAY) > type(uint256).max - // <=> x * y > type(uint256).max - HALF_RAY - // <=> x > (type(uint256).max - HALF_RAY) / y - assembly { - if mul(y, gt(x, div(MAX_UINT256_MINUS_HALF_RAY, y))) { - revert(0, 0) - } - - z := div(add(mul(x, y), HALF_RAY), RAY) - } - } - - /// @dev Divides two ray, rounding half up to the nearest ray. - /// @param x Ray. - /// @param y Ray. - /// @return z The result of x / y, in ray. - function rayDiv(uint256 x, uint256 y) internal pure returns (uint256 z) { - // Overflow if y == 0 - // Overflow if (x * RAY + y / 2) > type(uint256).max - // <=> x * RAY > type(uint256).max - y / 2 - // <=> x > (type(uint256).max - y / 2) / RAY - assembly { - z := div(y, 2) - if iszero(mul(y, iszero(gt(x, div(sub(MAX_UINT256, z), RAY))))) { - revert(0, 0) - } - - z := div(add(mul(x, RAY), z), y) - } - } - - /// @dev Casts ray down to wad. - /// @param x Ray. - /// @return y = x converted to wad, rounded half up to the nearest wad. - function rayToWad(uint256 x) internal pure returns (uint256 y) { - assembly { - // If x % WAD_RAY_RATIO >= HALF_WAD_RAY_RATIO, round up. - y := add(div(x, WAD_RAY_RATIO), iszero(lt(mod(x, WAD_RAY_RATIO), HALF_WAD_RAY_RATIO))) - } - } - - /// @dev Converts wad up to ray. - /// @param x Wad. - /// @return y = x converted in ray. - function wadToRay(uint256 x) internal pure returns (uint256 y) { - assembly { - y := mul(x, WAD_RAY_RATIO) - // Revert if y / WAD_RAY_RATIO != x - if iszero(eq(div(y, WAD_RAY_RATIO), x)) { - revert(0, 0) - } - } - } -} - -library Math { - function min(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - z := add(mul(x, lt(x, y)), mul(y, iszero(lt(x, y)))) - } - } - - function max(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - z := add(mul(x, gt(x, y)), mul(y, iszero(gt(x, y)))) - } - } - - /// @dev Returns max(x - y, 0). - function zeroFloorSub(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - z := mul(gt(x, y), sub(x, y)) - } - } - - /// @dev Returns x / y rounded up (x / y + boolAsInt(x % y > 0)). - function divUp(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - // Revert if y = 0 - if iszero(y) { - revert(0, 0) - } - - z := add(gt(mod(x, y), 0), div(x, y)) - } - } -} - -/** - * @title LendingPoolAddressesProvider contract - * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles - * - Acting also as factory of proxies and admin of those, so with right to change its implementations - * - Owned by the Aave Governance - * @author Aave - **/ -interface ILendingPoolAddressesProvider { - event MarketIdSet(string newMarketId); - event LendingPoolUpdated(address indexed newAddress); - event ConfigurationAdminUpdated(address indexed newAddress); - event EmergencyAdminUpdated(address indexed newAddress); - event LendingPoolConfiguratorUpdated(address indexed newAddress); - event LendingPoolCollateralManagerUpdated(address indexed newAddress); - event PriceOracleUpdated(address indexed newAddress); - event LendingRateOracleUpdated(address indexed newAddress); - event ProxyCreated(bytes32 id, address indexed newAddress); - event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy); - - function getMarketId() external view returns (string memory); - - function setMarketId(string calldata marketId) external; - - function setAddress(bytes32 id, address newAddress) external; - - function setAddressAsProxy(bytes32 id, address impl) external; - - function getAddress(bytes32 id) external view returns (address); - - function getLendingPool() external view returns (address); - - function setLendingPoolImpl(address pool) external; - - function getLendingPoolConfigurator() external view returns (address); - - function setLendingPoolConfiguratorImpl(address configurator) external; - - function getLendingPoolCollateralManager() external view returns (address); - - function setLendingPoolCollateralManager(address manager) external; - - function getPoolAdmin() external view returns (address); - - function setPoolAdmin(address admin) external; - - function getEmergencyAdmin() external view returns (address); - - function setEmergencyAdmin(address admin) external; - - function getPriceOracle() external view returns (address); - - function setPriceOracle(address priceOracle) external; - - function getLendingRateOracle() external view returns (address); - - function setLendingRateOracle(address lendingRateOracle) external; -} - -library DataTypes { - // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties. - struct ReserveData { - //stores the reserve configuration - ReserveConfigurationMap configuration; - //the liquidity index. Expressed in ray - uint128 liquidityIndex; - //variable borrow index. Expressed in ray - uint128 variableBorrowIndex; - //the current supply rate. Expressed in ray - uint128 currentLiquidityRate; - //the current variable borrow rate. Expressed in ray - uint128 currentVariableBorrowRate; - //the current stable borrow rate. Expressed in ray - uint128 currentStableBorrowRate; - uint40 lastUpdateTimestamp; - //tokens addresses - address aTokenAddress; - address stableDebtTokenAddress; - address variableDebtTokenAddress; - //address of the interest rate strategy - address interestRateStrategyAddress; - //the id of the reserve. Represents the position in the list of the active reserves - uint8 id; - } - - struct ReserveConfigurationMap { - //bit 0-15: LTV - //bit 16-31: Liq. threshold - //bit 32-47: Liq. bonus - //bit 48-55: Decimals - //bit 56: Reserve is active - //bit 57: reserve is frozen - //bit 58: borrowing is enabled - //bit 59: stable rate borrowing enabled - //bit 60-63: reserved - //bit 64-79: reserve factor - uint256 data; - } - - struct UserConfigurationMap { - uint256 data; - } - - enum InterestRateMode { - NONE, - STABLE, - VARIABLE - } -} - -interface ILendingPool { - /** - * @dev Emitted on deposit() - * @param reserve The address of the underlying asset of the reserve - * @param user The address initiating the deposit - * @param onBehalfOf The beneficiary of the deposit, receiving the aTokens - * @param amount The amount deposited - * @param referral The referral code used - **/ - event Deposit( - address indexed reserve, - address user, - address indexed onBehalfOf, - uint256 amount, - uint16 indexed referral - ); - - /** - * @dev Emitted on withdraw() - * @param reserve The address of the underlyng asset being withdrawn - * @param user The address initiating the withdrawal, owner of aTokens - * @param to Address that will receive the underlying - * @param amount The amount to be withdrawn - **/ - event Withdraw( - address indexed reserve, - address indexed user, - address indexed to, - uint256 amount - ); - - /** - * @dev Emitted on borrow() and flashLoan() when debt needs to be opened - * @param reserve The address of the underlying asset being borrowed - * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just - * initiator of the transaction on flashLoan() - * @param onBehalfOf The address that will be getting the debt - * @param amount The amount borrowed out - * @param borrowRateMode The rate mode: 1 for Stable, 2 for Variable - * @param borrowRate The numeric rate at which the user has borrowed - * @param referral The referral code used - **/ - event Borrow( - address indexed reserve, - address user, - address indexed onBehalfOf, - uint256 amount, - uint256 borrowRateMode, - uint256 borrowRate, - uint16 indexed referral - ); - - /** - * @dev Emitted on repay() - * @param reserve The address of the underlying asset of the reserve - * @param user The beneficiary of the repayment, getting his debt reduced - * @param repayer The address of the user initiating the repay(), providing the funds - * @param amount The amount repaid - **/ - event Repay( - address indexed reserve, - address indexed user, - address indexed repayer, - uint256 amount - ); - - /** - * @dev Emitted on swapBorrowRateMode() - * @param reserve The address of the underlying asset of the reserve - * @param user The address of the user swapping his rate mode - * @param rateMode The rate mode that the user wants to swap to - **/ - event Swap(address indexed reserve, address indexed user, uint256 rateMode); - - /** - * @dev Emitted on setUserUseReserveAsCollateral() - * @param reserve The address of the underlying asset of the reserve - * @param user The address of the user enabling the usage as collateral - **/ - event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user); - - /** - * @dev Emitted on setUserUseReserveAsCollateral() - * @param reserve The address of the underlying asset of the reserve - * @param user The address of the user enabling the usage as collateral - **/ - event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user); - - /** - * @dev Emitted on rebalanceStableBorrowRate() - * @param reserve The address of the underlying asset of the reserve - * @param user The address of the user for which the rebalance has been executed - **/ - event RebalanceStableBorrowRate(address indexed reserve, address indexed user); - - /** - * @dev Emitted on flashLoan() - * @param target The address of the flash loan receiver contract - * @param initiator The address initiating the flash loan - * @param asset The address of the asset being flash borrowed - * @param amount The amount flash borrowed - * @param premium The fee flash borrowed - * @param referralCode The referral code used - **/ - event FlashLoan( - address indexed target, - address indexed initiator, - address indexed asset, - uint256 amount, - uint256 premium, - uint16 referralCode - ); - - /** - * @dev Emitted when the pause is triggered. - */ - event Paused(); - - /** - * @dev Emitted when the pause is lifted. - */ - event Unpaused(); - - /** - * @dev Emitted when a borrower is liquidated. This event is emitted by the LendingPool via - * LendingPoolCollateral manager using a DELEGATECALL - * This allows to have the events in the generated ABI for LendingPool. - * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation - * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation - * @param user The address of the borrower getting liquidated - * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover - * @param liquidatedCollateralAmount The amount of collateral received by the liiquidator - * @param liquidator The address of the liquidator - * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants - * to receive the underlying collateral asset directly - **/ - event LiquidationCall( - address indexed collateralAsset, - address indexed debtAsset, - address indexed user, - uint256 debtToCover, - uint256 liquidatedCollateralAmount, - address liquidator, - bool receiveAToken - ); - - /** - * @dev Emitted when the state of a reserve is updated. NOTE: This event is actually declared - * in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal, - * the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it - * gets added to the LendingPool ABI - * @param reserve The address of the underlying asset of the reserve - * @param liquidityRate The new liquidity rate - * @param stableBorrowRate The new stable borrow rate - * @param variableBorrowRate The new variable borrow rate - * @param liquidityIndex The new liquidity index - * @param variableBorrowIndex The new variable borrow index - **/ - event ReserveDataUpdated( - address indexed reserve, - uint256 liquidityRate, - uint256 stableBorrowRate, - uint256 variableBorrowRate, - uint256 liquidityIndex, - uint256 variableBorrowIndex - ); - - /** - * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - * - E.g. User deposits 100 USDC and gets in return 100 aUSDC - * @param asset The address of the underlying asset to deposit - * @param amount The amount to be deposited - * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user - * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens - * is a different wallet - * @param referralCode Code used to register the integrator originating the operation, for potential rewards. - * 0 if the action is executed directly by the user, without any middle-man - **/ - function deposit( - address asset, - uint256 amount, - address onBehalfOf, - uint16 referralCode - ) external; - - /** - * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned - * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC - * @param asset The address of the underlying asset to withdraw - * @param amount The underlying amount to be withdrawn - * - Send the value type(uint256).max in order to withdraw the whole aToken balance - * @param to Address that will receive the underlying, same as msg.sender if the user - * wants to receive it on his own wallet, or a different address if the beneficiary is a - * different wallet - * @return The final amount withdrawn - **/ - function withdraw( - address asset, - uint256 amount, - address to - ) external returns (uint256); - - /** - * @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower - * already deposited enough collateral, or he was given enough allowance by a credit delegator on the - * corresponding debt token (StableDebtToken or VariableDebtToken) - * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet - * and 100 stable/variable debt tokens, depending on the `interestRateMode` - * @param asset The address of the underlying asset to borrow - * @param amount The amount to be borrowed - * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable - * @param referralCode Code used to register the integrator originating the operation, for potential rewards. - * 0 if the action is executed directly by the user, without any middle-man - * @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself - * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator - * if he has been given credit delegation allowance - **/ - function borrow( - address asset, - uint256 amount, - uint256 interestRateMode, - uint16 referralCode, - address onBehalfOf - ) external; - - /** - * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address - * @param asset The address of the borrowed underlying asset previously borrowed - * @param amount The amount to repay - * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode` - * @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable - * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the - * user calling the function if he wants to reduce/remove his own debt, or the address of any other - * other borrower whose debt should be removed - * @return The final amount repaid - **/ - function repay( - address asset, - uint256 amount, - uint256 rateMode, - address onBehalfOf - ) external returns (uint256); - - /** - * @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa - * @param asset The address of the underlying asset borrowed - * @param rateMode The rate mode that the user wants to swap to - **/ - function swapBorrowRateMode(address asset, uint256 rateMode) external; - - /** - * @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - * - Users can be rebalanced if the following conditions are satisfied: - * 1. Usage ratio is above 95% - * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been - * borrowed at a stable rate and depositors are not earning enough - * @param asset The address of the underlying asset borrowed - * @param user The address of the user to be rebalanced - **/ - function rebalanceStableBorrowRate(address asset, address user) external; - - /** - * @dev Allows depositors to enable/disable a specific deposited asset as collateral - * @param asset The address of the underlying asset deposited - * @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise - **/ - function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external; - - /** - * @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives - * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk - * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation - * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation - * @param user The address of the borrower getting liquidated - * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover - * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants - * to receive the underlying collateral asset directly - **/ - function liquidationCall( - address collateralAsset, - address debtAsset, - address user, - uint256 debtToCover, - bool receiveAToken - ) external; - - /** - * @dev Allows smartcontracts to access the liquidity of the pool within one transaction, - * as long as the amount taken plus a fee is returned. - * IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. - * For further details please visit https://developers.aave.com - * @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface - * @param assets The addresses of the assets being flash-borrowed - * @param amounts The amounts amounts being flash-borrowed - * @param modes Types of the debt to open if the flash loan is not returned: - * 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver - * 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address - * 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address - * @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2 - * @param params Variadic packed params to pass to the receiver as extra information - * @param referralCode Code used to register the integrator originating the operation, for potential rewards. - * 0 if the action is executed directly by the user, without any middle-man - **/ - function flashLoan( - address receiverAddress, - address[] calldata assets, - uint256[] calldata amounts, - uint256[] calldata modes, - address onBehalfOf, - bytes calldata params, - uint16 referralCode - ) external; - - /** - * @dev Returns the user account data across all the reserves - * @param user The address of the user - * @return totalCollateralETH the total collateral in ETH of the user - * @return totalDebtETH the total debt in ETH of the user - * @return availableBorrowsETH the borrowing power left of the user - * @return currentLiquidationThreshold the liquidation threshold of the user - * @return ltv the loan to value of the user - * @return healthFactor the current health factor of the user - **/ - function getUserAccountData(address user) - external - view - returns ( - uint256 totalCollateralETH, - uint256 totalDebtETH, - uint256 availableBorrowsETH, - uint256 currentLiquidationThreshold, - uint256 ltv, - uint256 healthFactor - ); - - function initReserve( - address reserve, - address aTokenAddress, - address stableDebtAddress, - address variableDebtAddress, - address interestRateStrategyAddress - ) external; - - function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress) - external; - - function setConfiguration(address reserve, uint256 configuration) external; - - /** - * @dev Returns the configuration of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The configuration of the reserve - **/ - function getConfiguration(address asset) - external - view - returns (DataTypes.ReserveConfigurationMap memory); - - /** - * @dev Returns the configuration of the user across all the reserves - * @param user The user address - * @return The configuration of the user - **/ - function getUserConfiguration(address user) - external - view - returns (DataTypes.UserConfigurationMap memory); - - /** - * @dev Returns the normalized income normalized income of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The reserve's normalized income - */ - function getReserveNormalizedIncome(address asset) external view returns (uint256); - - /** - * @dev Returns the normalized variable debt per unit of asset - * @param asset The address of the underlying asset of the reserve - * @return The reserve normalized variable debt - */ - function getReserveNormalizedVariableDebt(address asset) external view returns (uint256); - - /** - * @dev Returns the state and configuration of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The state of the reserve - **/ - function getReserveData(address asset) external view returns (DataTypes.ReserveData memory); - - function finalizeTransfer( - address asset, - address from, - address to, - uint256 amount, - uint256 balanceFromAfter, - uint256 balanceToBefore - ) external; - - function getReservesList() external view returns (address[] memory); - - function getAddressesProvider() external view returns (ILendingPoolAddressesProvider); - - function setPause(bool val) external; - - function paused() external view returns (bool); -} - -interface IEntryPositionsManager { - function supplyLogic( - address _poolToken, - address _supplier, - address _onBehalf, - uint256 _amount, - uint256 _maxGasForMatching - ) external; - - function borrowLogic( - address _poolToken, - uint256 _amount, - uint256 _maxGasForMatching - ) external; -} - -interface IExitPositionsManager { - function withdrawLogic( - address _poolToken, - uint256 _amount, - address _supplier, - address _receiver, - uint256 _maxGasForMatching - ) external; - - function repayLogic( - address _poolToken, - address _repayer, - address _onBehalf, - uint256 _amount, - uint256 _maxGasForMatching - ) external; - - function liquidateLogic( - address _poolTokenBorrowed, - address _poolTokenCollateral, - address _borrower, - uint256 _amount - ) external; - - function increaseP2PDeltasLogic(address _poolToken, uint256 _amount) external; -} - -interface IInterestRatesManager { - function updateIndexes(address _marketAddress) external; -} - -interface IOracle { - function consult(uint256 _amountIn) external returns (uint256); -} - -interface IIncentivesVault { - function isPaused() external view returns (bool); - - function bonus() external view returns (uint256); - - function MAX_BASIS_POINTS() external view returns (uint256); - - function incentivesTreasuryVault() external view returns (address); - - function oracle() external view returns (IOracle); - - function setOracle(IOracle _newOracle) external; - - function setIncentivesTreasuryVault(address _newIncentivesTreasuryVault) external; - - function setBonus(uint256 _newBonus) external; - - function setPauseStatus(bool _newStatus) external; - - function transferTokensToDao(address _token, uint256 _amount) external; - - function tradeRewardTokensForMorphoTokens(address _to, uint256 _amount) external; -} - -interface IAaveDistributionManager { - event AssetConfigUpdated(address indexed asset, uint256 emission); - event AssetIndexUpdated(address indexed asset, uint256 index); - event UserIndexUpdated(address indexed user, address indexed asset, uint256 index); - event DistributionEndUpdated(uint256 newDistributionEnd); - - /** - * @dev Sets the end date for the distribution - * @param distributionEnd The end date timestamp - **/ - function setDistributionEnd(uint256 distributionEnd) external; - - /** - * @dev Gets the end date for the distribution - * @return The end of the distribution - **/ - function getDistributionEnd() external view returns (uint256); - - /** - * @dev for backwards compatibility with the previous DistributionManager used - * @return The end of the distribution - **/ - function DISTRIBUTION_END() external view returns (uint256); - - /** - * @dev Returns the data of an user on a distribution - * @param user Address of the user - * @param asset The address of the reference asset of the distribution - * @return The new index - **/ - function getUserAssetData(address user, address asset) external view returns (uint256); - - /** - * @dev Returns the configuration of the distribution for a certain asset - * @param asset The address of the reference asset of the distribution - * @return The asset index, the emission per second and the last updated timestamp - **/ - function getAssetData(address asset) - external - view - returns ( - uint256, - uint256, - uint256 - ); -} - -interface IAaveIncentivesController is IAaveDistributionManager { - event RewardsAccrued(address indexed user, uint256 amount); - - event RewardsClaimed( - address indexed user, - address indexed to, - address indexed claimer, - uint256 amount - ); - - event ClaimerSet(address indexed user, address indexed claimer); - - /** - * @dev Whitelists an address to claim the rewards on behalf of another address - * @param user The address of the user - * @param claimer The address of the claimer - */ - function setClaimer(address user, address claimer) external; - - /** - * @dev Returns the whitelisted claimer for a certain address (0x0 if not set) - * @param user The address of the user - * @return The claimer address - */ - function getClaimer(address user) external view returns (address); - - /** - * @dev Configure assets for a certain rewards emission - * @param assets The assets to incentivize - * @param emissionsPerSecond The emission for each asset - */ - function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond) - external; - - /** - * @dev Called by the corresponding asset on any update that affects the rewards distribution - * @param asset The address of the user - * @param userBalance The balance of the user of the asset in the lending pool - * @param totalSupply The total supply of the asset in the lending pool - **/ - function handleAction( - address asset, - uint256 userBalance, - uint256 totalSupply - ) external; - - /** - * @dev Returns the total of rewards of an user, already accrued + not yet accrued - * @param user The address of the user - * @return The rewards - **/ - function getRewardsBalance(address[] calldata assets, address user) - external - view - returns (uint256); - - /** - * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards - * @param amount Amount of rewards to claim - * @param to Address that will be receiving the rewards - * @return Rewards claimed - **/ - function claimRewards( - address[] calldata assets, - uint256 amount, - address to - ) external returns (uint256); - - /** - * @dev Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must - * be whitelisted via "allowClaimOnBehalf" function by the RewardsAdmin role manager - * @param amount Amount of rewards to claim - * @param user Address to check and claim rewards - * @param to Address that will be receiving the rewards - * @return Rewards claimed - **/ - function claimRewardsOnBehalf( - address[] calldata assets, - uint256 amount, - address user, - address to - ) external returns (uint256); - - /** - * @dev returns the unclaimed rewards of the user - * @param user the address of the user - * @return the unclaimed user rewards - */ - function getUserUnclaimedRewards(address user) external view returns (uint256); - - /** - * @dev for backward compatibility with previous implementation of the Incentives controller - */ - function REWARD_TOKEN() external view returns (address); - - struct AssetData { - uint128 emissionPerSecond; - uint128 lastUpdateTimestamp; - uint256 index; - } - - function assets(address) external view returns (AssetData memory); -} - -interface IRewardsManager { - function initialize(address _morpho) external; - - function getUserIndex(address, address) external returns (uint256); - - function getUserUnclaimedRewards(address[] calldata, address) external view returns (uint256); - - function claimRewards( - IAaveIncentivesController _aaveIncentivesController, - address[] calldata, - address - ) external returns (uint256); - - function updateUserAssetAndAccruedRewards( - IAaveIncentivesController _aaveIncentivesController, - address _user, - address _asset, - uint256 _userBalance, - uint256 _totalBalance - ) external; -} - -// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol) - -/** - * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow - * checks. - * - * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can - * easily result in undesired exploitation or bugs, since developers usually - * assume that overflows raise errors. `SafeCast` restores this intuition by - * reverting the transaction when such an operation overflows. - * - * Using this library instead of the unchecked operations eliminates an entire - * class of bugs, so it's recommended to use it always. - * - * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing - * all math on `uint256` and `int256` and then downcasting. - */ -library SafeCast { - /** - * @dev Returns the downcasted uint224 from uint256, reverting on - * overflow (when the input is greater than largest uint224). - * - * Counterpart to Solidity's `uint224` operator. - * - * Requirements: - * - * - input must fit into 224 bits - */ - function toUint224(uint256 value) internal pure returns (uint224) { - require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); - return uint224(value); - } - - /** - * @dev Returns the downcasted uint128 from uint256, reverting on - * overflow (when the input is greater than largest uint128). - * - * Counterpart to Solidity's `uint128` operator. - * - * Requirements: - * - * - input must fit into 128 bits - */ - function toUint128(uint256 value) internal pure returns (uint128) { - require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); - return uint128(value); - } - - /** - * @dev Returns the downcasted uint96 from uint256, reverting on - * overflow (when the input is greater than largest uint96). - * - * Counterpart to Solidity's `uint96` operator. - * - * Requirements: - * - * - input must fit into 96 bits - */ - function toUint96(uint256 value) internal pure returns (uint96) { - require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); - return uint96(value); - } - - /** - * @dev Returns the downcasted uint64 from uint256, reverting on - * overflow (when the input is greater than largest uint64). - * - * Counterpart to Solidity's `uint64` operator. - * - * Requirements: - * - * - input must fit into 64 bits - */ - function toUint64(uint256 value) internal pure returns (uint64) { - require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); - return uint64(value); - } - - /** - * @dev Returns the downcasted uint32 from uint256, reverting on - * overflow (when the input is greater than largest uint32). - * - * Counterpart to Solidity's `uint32` operator. - * - * Requirements: - * - * - input must fit into 32 bits - */ - function toUint32(uint256 value) internal pure returns (uint32) { - require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); - return uint32(value); - } - - /** - * @dev Returns the downcasted uint16 from uint256, reverting on - * overflow (when the input is greater than largest uint16). - * - * Counterpart to Solidity's `uint16` operator. - * - * Requirements: - * - * - input must fit into 16 bits - */ - function toUint16(uint256 value) internal pure returns (uint16) { - require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); - return uint16(value); - } - - /** - * @dev Returns the downcasted uint8 from uint256, reverting on - * overflow (when the input is greater than largest uint8). - * - * Counterpart to Solidity's `uint8` operator. - * - * Requirements: - * - * - input must fit into 8 bits. - */ - function toUint8(uint256 value) internal pure returns (uint8) { - require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); - return uint8(value); - } - - /** - * @dev Converts a signed int256 into an unsigned uint256. - * - * Requirements: - * - * - input must be greater than or equal to 0. - */ - function toUint256(int256 value) internal pure returns (uint256) { - require(value >= 0, "SafeCast: value must be positive"); - return uint256(value); - } - - /** - * @dev Returns the downcasted int128 from int256, reverting on - * overflow (when the input is less than smallest int128 or - * greater than largest int128). - * - * Counterpart to Solidity's `int128` operator. - * - * Requirements: - * - * - input must fit into 128 bits - * - * _Available since v3.1._ - */ - function toInt128(int256 value) internal pure returns (int128) { - require( - value >= type(int128).min && value <= type(int128).max, - "SafeCast: value doesn't fit in 128 bits" - ); - return int128(value); - } - - /** - * @dev Returns the downcasted int64 from int256, reverting on - * overflow (when the input is less than smallest int64 or - * greater than largest int64). - * - * Counterpart to Solidity's `int64` operator. - * - * Requirements: - * - * - input must fit into 64 bits - * - * _Available since v3.1._ - */ - function toInt64(int256 value) internal pure returns (int64) { - require( - value >= type(int64).min && value <= type(int64).max, - "SafeCast: value doesn't fit in 64 bits" - ); - return int64(value); - } - - /** - * @dev Returns the downcasted int32 from int256, reverting on - * overflow (when the input is less than smallest int32 or - * greater than largest int32). - * - * Counterpart to Solidity's `int32` operator. - * - * Requirements: - * - * - input must fit into 32 bits - * - * _Available since v3.1._ - */ - function toInt32(int256 value) internal pure returns (int32) { - require( - value >= type(int32).min && value <= type(int32).max, - "SafeCast: value doesn't fit in 32 bits" - ); - return int32(value); - } - - /** - * @dev Returns the downcasted int16 from int256, reverting on - * overflow (when the input is less than smallest int16 or - * greater than largest int16). - * - * Counterpart to Solidity's `int16` operator. - * - * Requirements: - * - * - input must fit into 16 bits - * - * _Available since v3.1._ - */ - function toInt16(int256 value) internal pure returns (int16) { - require( - value >= type(int16).min && value <= type(int16).max, - "SafeCast: value doesn't fit in 16 bits" - ); - return int16(value); - } - - /** - * @dev Returns the downcasted int8 from int256, reverting on - * overflow (when the input is less than smallest int8 or - * greater than largest int8). - * - * Counterpart to Solidity's `int8` operator. - * - * Requirements: - * - * - input must fit into 8 bits. - * - * _Available since v3.1._ - */ - function toInt8(int256 value) internal pure returns (int8) { - require( - value >= type(int8).min && value <= type(int8).max, - "SafeCast: value doesn't fit in 8 bits" - ); - return int8(value); - } - - /** - * @dev Converts an unsigned uint256 into a signed int256. - * - * Requirements: - * - * - input must be less than or equal to maxInt256. - */ - function toInt256(uint256 value) internal pure returns (int256) { - // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive - require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); - return int256(value); - } -} - -library HeapOrdering { - struct Account { - address id; // The address of the account. - uint96 value; // The value of the account. - } - - struct HeapArray { - Account[] accounts; // All the accounts. - uint256 size; // The size of the heap portion of the structure, should be less than accounts length, the rest is an unordered array. - mapping(address => uint256) ranks; // A mapping from an address to a rank in accounts. Beware: ranks are shifted by one compared to indexes, so the first rank is 1 and not 0. - } - - /// CONSTANTS /// - - uint256 private constant ROOT = 1; - - /// ERRORS /// - - /// @notice Thrown when the address is zero at insertion. - error AddressIsZero(); - - /// INTERNAL /// - - /// @notice Updates an account in the `_heap`. - /// @dev Only call this function when `_id` is in the `_heap` with value `_formerValue` or when `_id` is not in the `_heap` with `_formerValue` equal to 0. - /// @param _heap The heap to modify. - /// @param _id The address of the account to update. - /// @param _formerValue The former value of the account to update. - /// @param _newValue The new value of the account to update. - /// @param _maxSortedUsers The maximum size of the heap. - function update( - HeapArray storage _heap, - address _id, - uint256 _formerValue, - uint256 _newValue, - uint256 _maxSortedUsers - ) internal { - uint96 formerValue = SafeCast.toUint96(_formerValue); - uint96 newValue = SafeCast.toUint96(_newValue); - - uint256 size = _heap.size; - uint256 newSize = computeSize(size, _maxSortedUsers); - if (size != newSize) _heap.size = newSize; - - if (formerValue != newValue) { - if (newValue == 0) remove(_heap, _id, formerValue); - else if (formerValue == 0) insert(_heap, _id, newValue, _maxSortedUsers); - else if (formerValue < newValue) increase(_heap, _id, newValue, _maxSortedUsers); - else decrease(_heap, _id, newValue); - } - } - - /// PRIVATE /// - - /// @notice Computes a new suitable size from `_size` that is smaller than `_maxSortedUsers`. - /// @dev We use division by 2 to remove the leaves of the heap. - /// @param _size The old size of the heap. - /// @param _maxSortedUsers The maximum size of the heap. - /// @return The new size computed. - function computeSize(uint256 _size, uint256 _maxSortedUsers) private pure returns (uint256) { - while (_size >= _maxSortedUsers) _size >>= 1; - return _size; - } - - /// @notice Returns the account of rank `_rank`. - /// @dev The first rank is 1 and the last one is length of the array. - /// @dev Only call this function with positive numbers. - /// @param _heap The heap to search in. - /// @param _rank The rank of the account. - /// @return The account of rank `_rank`. - function getAccount(HeapArray storage _heap, uint256 _rank) - private - view - returns (Account storage) - { - return _heap.accounts[_rank - 1]; - } - - /// @notice Sets the value at `_rank` in the `_heap` to be `_newValue`. - /// @dev The heap may lose its invariant about the order of the values stored. - /// @dev Only call this function with a rank within array's bounds. - /// @param _heap The heap to modify. - /// @param _rank The rank of the account in the heap to be set. - /// @param _newValue The new value to set the `_rank` to. - function setAccountValue( - HeapArray storage _heap, - uint256 _rank, - uint96 _newValue - ) private { - _heap.accounts[_rank - 1].value = _newValue; - } - - /// @notice Sets `_rank` in the `_heap` to be `_account`. - /// @dev The heap may lose its invariant about the order of the values stored. - /// @dev Only call this function with a rank within array's bounds. - /// @param _heap The heap to modify. - /// @param _rank The rank of the account in the heap to be set. - /// @param _account The account to set the `_rank` to. - function setAccount( - HeapArray storage _heap, - uint256 _rank, - Account memory _account - ) private { - _heap.accounts[_rank - 1] = _account; - _heap.ranks[_account.id] = _rank; - } - - /// @notice Swaps two accounts in the `_heap`. - /// @dev The heap may lose its invariant about the order of the values stored. - /// @dev Only call this function with ranks within array's bounds. - /// @param _heap The heap to modify. - /// @param _rank1 The rank of the first account in the heap. - /// @param _rank2 The rank of the second account in the heap. - function swap( - HeapArray storage _heap, - uint256 _rank1, - uint256 _rank2 - ) private { - if (_rank1 == _rank2) return; - Account memory accountOldRank1 = getAccount(_heap, _rank1); - Account memory accountOldRank2 = getAccount(_heap, _rank2); - setAccount(_heap, _rank1, accountOldRank2); - setAccount(_heap, _rank2, accountOldRank1); - } - - /// @notice Moves an account up the heap until its value is smaller than the one of its parent. - /// @dev This functions restores the invariant about the order of the values stored when the account at `_rank` is the only one with value greater than what it should be. - /// @param _heap The heap to modify. - /// @param _rank The rank of the account to move. - function shiftUp(HeapArray storage _heap, uint256 _rank) private { - Account memory accountToShift = getAccount(_heap, _rank); - uint256 valueToShift = accountToShift.value; - Account memory parentAccount; - while ( - _rank > ROOT && valueToShift > (parentAccount = getAccount(_heap, _rank >> 1)).value - ) { - setAccount(_heap, _rank, parentAccount); - _rank >>= 1; - } - setAccount(_heap, _rank, accountToShift); - } - - /// @notice Moves an account down the heap until its value is greater than the ones of its children. - /// @dev This functions restores the invariant about the order of the values stored when the account at `_rank` is the only one with value smaller than what it should be. - /// @param _heap The heap to modify. - /// @param _rank The rank of the account to move. - function shiftDown(HeapArray storage _heap, uint256 _rank) private { - uint256 size = _heap.size; - Account memory accountToShift = getAccount(_heap, _rank); - uint256 valueToShift = accountToShift.value; - uint256 childRank = _rank << 1; - // At this point, childRank (resp. childRank+1) is the rank of the left (resp. right) child. - - while (childRank <= size) { - Account memory childToSwap = getAccount(_heap, childRank); - - // Find the child with largest value. - if (childRank < size) { - Account memory rightChild = getAccount(_heap, childRank + 1); - if (rightChild.value > childToSwap.value) { - unchecked { - ++childRank; // This cannot overflow because childRank < size. - } - childToSwap = rightChild; - } - } - - if (childToSwap.value > valueToShift) { - setAccount(_heap, _rank, childToSwap); - _rank = childRank; - childRank <<= 1; - } else break; - } - setAccount(_heap, _rank, accountToShift); - } - - /// @notice Inserts an account in the `_heap`. - /// @dev Only call this function when `_id` is not in the `_heap`. - /// @dev Reverts with AddressIsZero if `_value` is 0. - /// @param _heap The heap to modify. - /// @param _id The address of the account to insert. - /// @param _value The value of the account to insert. - /// @param _maxSortedUsers The maximum size of the heap. - function insert( - HeapArray storage _heap, - address _id, - uint96 _value, - uint256 _maxSortedUsers - ) private { - // `_heap` cannot contain the 0 address. - if (_id == address(0)) revert AddressIsZero(); - - // Put the account at the end of accounts. - _heap.accounts.push(Account(_id, _value)); - uint256 accountsLength = _heap.accounts.length; - _heap.ranks[_id] = accountsLength; - - // Move the account at the end of the heap and restore the invariant. - uint256 newSize = _heap.size + 1; - swap(_heap, newSize, accountsLength); - shiftUp(_heap, newSize); - _heap.size = computeSize(newSize, _maxSortedUsers); - } - - /// @notice Decreases the amount of an account in the `_heap`. - /// @dev Only call this function when `_id` is in the `_heap` with a value greater than `_newValue`. - /// @param _heap The heap to modify. - /// @param _id The address of the account to decrease the amount. - /// @param _newValue The new value of the account. - function decrease( - HeapArray storage _heap, - address _id, - uint96 _newValue - ) private { - uint256 rank = _heap.ranks[_id]; - setAccountValue(_heap, rank, _newValue); - - // We only need to restore the invariant if the account is a node in the heap - if (rank <= _heap.size >> 1) shiftDown(_heap, rank); - } - - /// @notice Increases the amount of an account in the `_heap`. - /// @dev Only call this function when `_id` is in the `_heap` with a smaller value than `_newValue`. - /// @param _heap The heap to modify. - /// @param _id The address of the account to increase the amount. - /// @param _newValue The new value of the account. - /// @param _maxSortedUsers The maximum size of the heap. - function increase( - HeapArray storage _heap, - address _id, - uint96 _newValue, - uint256 _maxSortedUsers - ) private { - uint256 rank = _heap.ranks[_id]; - setAccountValue(_heap, rank, _newValue); - uint256 nextSize = _heap.size + 1; - - if (rank < nextSize) shiftUp(_heap, rank); - else { - swap(_heap, nextSize, rank); - shiftUp(_heap, nextSize); - _heap.size = computeSize(nextSize, _maxSortedUsers); - } - } - - /// @notice Removes an account in the `_heap`. - /// @dev Only call when this function `_id` is in the `_heap` with value `_removedValue`. - /// @param _heap The heap to modify. - /// @param _id The address of the account to remove. - /// @param _removedValue The value of the account to remove. - function remove( - HeapArray storage _heap, - address _id, - uint96 _removedValue - ) private { - uint256 rank = _heap.ranks[_id]; - uint256 accountsLength = _heap.accounts.length; - - // Swap the last account and the account to remove, then pop it. - swap(_heap, rank, accountsLength); - if (_heap.size == accountsLength) _heap.size--; - _heap.accounts.pop(); - delete _heap.ranks[_id]; - - // If the swapped account is in the heap, restore the invariant: its value can be smaller or larger than the removed value. - if (rank <= _heap.size) { - if (_removedValue > getAccount(_heap, rank).value) shiftDown(_heap, rank); - else shiftUp(_heap, rank); - } - } - - /// GETTERS /// - - /// @notice Returns the number of users in the `_heap`. - /// @param _heap The heap parameter. - /// @return The length of the heap. - function length(HeapArray storage _heap) internal view returns (uint256) { - return _heap.accounts.length; - } - - /// @notice Returns the value of the account linked to `_id`. - /// @param _heap The heap to search in. - /// @param _id The address of the account. - /// @return The value of the account. - function getValueOf(HeapArray storage _heap, address _id) internal view returns (uint256) { - uint256 rank = _heap.ranks[_id]; - if (rank == 0) return 0; - else return getAccount(_heap, rank).value; - } - - /// @notice Returns the address at the head of the `_heap`. - /// @param _heap The heap to get the head. - /// @return The address of the head. - function getHead(HeapArray storage _heap) internal view returns (address) { - if (_heap.accounts.length > 0) return getAccount(_heap, ROOT).id; - else return address(0); - } - - /// @notice Returns the address at the tail of unsorted portion of the `_heap`. - /// @param _heap The heap to get the tail. - /// @return The address of the tail. - function getTail(HeapArray storage _heap) internal view returns (address) { - if (_heap.accounts.length > 0) return getAccount(_heap, _heap.accounts.length).id; - else return address(0); - } - - /// @notice Returns the address coming before `_id` in accounts. - /// @dev The account associated to the returned address does not necessarily have a lower value than the one of the account associated to `_id`. - /// @param _heap The heap to search in. - /// @param _id The address of the account. - /// @return The address of the previous account. - function getPrev(HeapArray storage _heap, address _id) internal view returns (address) { - uint256 rank = _heap.ranks[_id]; - if (rank > ROOT) return getAccount(_heap, rank - 1).id; - else return address(0); - } - - /// @notice Returns the address coming after `_id` in accounts. - /// @dev The account associated to the returned address does not necessarily have a greater value than the one of the account associated to `_id`. - /// @param _heap The heap to search in. - /// @param _id The address of the account. - /// @return The address of the next account. - function getNext(HeapArray storage _heap, address _id) internal view returns (address) { - uint256 rank = _heap.ranks[_id]; - if (rank < _heap.accounts.length) return getAccount(_heap, rank + 1).id; - else return address(0); - } -} - -library MarketLib { - function isCreated(Types.Market storage _market) internal view returns (bool) { - return _market.underlyingToken != address(0); - } - - function isCreatedMemory(Types.Market memory _market) internal pure returns (bool) { - return _market.underlyingToken != address(0); - } -} - -/// @title Types. -/// @author Morpho Labs. -/// @custom:contact security@morpho.xyz -/// @dev Common types and structs used in Morpho contracts. -library Types { - /// ENUMS /// - - enum PositionType { - SUPPLIERS_IN_P2P, - SUPPLIERS_ON_POOL, - BORROWERS_IN_P2P, - BORROWERS_ON_POOL - } - - /// STRUCTS /// - - struct SupplyBalance { - uint256 inP2P; // In supplier's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests earned by suppliers in peer-to-peer. Multiply by the peer-to-peer supply index to get the underlying amount. - uint256 onPool; // In scaled balance. Multiply by the pool supply index to get the underlying amount. - } - - struct BorrowBalance { - uint256 inP2P; // In borrower's peer-to-peer unit, a unit that grows in underlying value, to keep track of the interests paid by borrowers in peer-to-peer. Multiply by the peer-to-peer borrow index to get the underlying amount. - uint256 onPool; // In adUnit, a unit that grows in value, to keep track of the debt increase when borrowers are on Aave. Multiply by the pool borrow index to get the underlying amount. - } - - // Max gas to consume during the matching process for supply, borrow, withdraw and repay functions. - struct MaxGasForMatching { - uint64 supply; - uint64 borrow; - uint64 withdraw; - uint64 repay; - } - - struct Delta { - uint256 p2pSupplyDelta; // Difference between the stored peer-to-peer supply amount and the real peer-to-peer supply amount (in aToken). - uint256 p2pBorrowDelta; // Difference between the stored peer-to-peer borrow amount and the real peer-to-peer borrow amount (in adUnit). - uint256 p2pSupplyAmount; // Sum of all stored peer-to-peer supply (in peer-to-peer unit). - uint256 p2pBorrowAmount; // Sum of all stored peer-to-peer borrow (in peer-to-peer unit). - } - - struct AssetLiquidityData { - uint256 decimals; // The number of decimals of the underlying token. - uint256 tokenUnit; // The token unit considering its decimals. - uint256 liquidationThreshold; // The liquidation threshold applied on this token (in basis point). - uint256 ltv; // The LTV applied on this token (in basis point). - uint256 underlyingPrice; // The price of the token (in ETH). - uint256 collateral; // The collateral value of the asset (in ETH). - uint256 debt; // The debt value of the asset (in ETH). - } - - struct LiquidityData { - uint256 collateral; // The collateral value (in ETH). - uint256 maxDebt; // The max debt value (in ETH). - uint256 liquidationThreshold; // The liquidation threshold value (in ETH). - uint256 debt; // The debt value (in ETH). - } - - // Variables are packed together to save gas (will not exceed their limit during Morpho's lifetime). - struct PoolIndexes { - uint32 lastUpdateTimestamp; // The last time the local pool and peer-to-peer indexes were updated. - uint112 poolSupplyIndex; // Last pool supply index. - uint112 poolBorrowIndex; // Last pool borrow index. - } - - struct Market { - address underlyingToken; // The underlying address of the market. - uint16 reserveFactor; // Proportion of the additional interest earned being matched peer-to-peer on Morpho compared to being on the pool. It is sent to the DAO for each market. The default value is 0. In basis point (100% = 10 000). - uint16 p2pIndexCursor; // Position of the peer-to-peer rate in the pool's spread. Determine the weights of the weighted arithmetic average in the indexes computations ((1 - p2pIndexCursor) * r^S + p2pIndexCursor * r^B) (in basis point). - bool isP2PDisabled; // Whether the market's peer-to-peer is open or not. - bool isSupplyPaused; // Whether the supply is paused or not. - bool isBorrowPaused; // Whether the borrow is paused or not - bool isWithdrawPaused; // Whether the withdraw is paused or not. Note that a "withdraw" is still possible using a liquidation (if not paused). - bool isRepayPaused; // Whether the repay is paused or not. - bool isLiquidateCollateralPaused; // Whether the liquidation on this market as collateral is paused or not. - bool isLiquidateBorrowPaused; // Whether the liquidatation on this market as borrow is paused or not. - bool isDeprecated; // Whether a market is deprecated or not. - } - - struct LiquidityStackVars { - address poolToken; - uint256 poolTokensLength; - bytes32 userMarkets; - bytes32 borrowMask; - address underlyingToken; - uint256 underlyingPrice; - } -} - -// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) - -// OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/Initializable.sol) - -// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) - -/** - * @dev Collection of functions related to the address type - */ -library AddressUpgradeable { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - * - * [IMPORTANT] - * ==== - * You shouldn't rely on `isContract` to protect against flash loan attacks! - * - * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets - * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract - * constructor. - * ==== - */ - function isContract(address account) internal view returns (bool) { - // This method relies on extcodesize/address.code.length, which returns 0 - // for contracts in construction, since the code is only stored at the end - // of the constructor execution. - - return account.code.length > 0; - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, "Address: insufficient balance"); - - (bool success, ) = recipient.call{value: amount}(""); - require(success, "Address: unable to send value, recipient may have reverted"); - } - - /** - * @dev Performs a Solidity function call using a low level `call`. A - * plain `call` is an unsafe replacement for a function call: use this - * function instead. - * - * If `target` reverts with a revert reason, it is bubbled up by this - * function (like regular Solidity function calls). - * - * Returns the raw returned data. To convert to the expected return value, - * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. - * - * Requirements: - * - * - `target` must be a contract. - * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data) internal returns (bytes memory) { - return functionCall(target, data, "Address: low-level call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with - * `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, 0, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but also transferring `value` wei to `target`. - * - * Requirements: - * - * - the calling contract must have an ETH balance of at least `value`. - * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value - ) internal returns (bytes memory) { - return - functionCallWithValue(target, data, value, "Address: low-level call with value failed"); - } - - /** - * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but - * with `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value, - string memory errorMessage - ) internal returns (bytes memory) { - require(address(this).balance >= value, "Address: insufficient balance for call"); - require(isContract(target), "Address: call to non-contract"); - - (bool success, bytes memory returndata) = target.call{value: value}(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data) - internal - view - returns (bytes memory) - { - return functionStaticCall(target, data, "Address: low-level static call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall( - address target, - bytes memory data, - string memory errorMessage - ) internal view returns (bytes memory) { - require(isContract(target), "Address: static call to non-contract"); - - (bool success, bytes memory returndata) = target.staticcall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the - * revert reason using the provided one. - * - * _Available since v4.3._ - */ - function verifyCallResult( - bool success, - bytes memory returndata, - string memory errorMessage - ) internal pure returns (bytes memory) { - if (success) { - return returndata; - } else { - // Look for revert reason and bubble it up if present - if (returndata.length > 0) { - // The easiest way to bubble the revert reason is using memory via assembly - - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert(errorMessage); - } - } - } -} - -/** - * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed - * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an - * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer - * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. - * - * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as - * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. - * - * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure - * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. - * - * [CAUTION] - * ==== - * Avoid leaving a contract uninitialized. - * - * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation - * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the - * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: - * - * [.hljs-theme-light.nopadding] - * ``` - * /// @custom:oz-upgrades-unsafe-allow constructor - * constructor() initializer {} - * ``` - * ==== - */ -abstract contract Initializable { - /** - * @dev Indicates that the contract has been initialized. - */ - bool private _initialized; - - /** - * @dev Indicates that the contract is in the process of being initialized. - */ - bool private _initializing; - - /** - * @dev Modifier to protect an initializer function from being invoked twice. - */ - modifier initializer() { - // If the contract is initializing we ignore whether _initialized is set in order to support multiple - // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the - // contract may have been reentered. - require( - _initializing ? _isConstructor() : !_initialized, - "Initializable: contract is already initialized" - ); - - bool isTopLevelCall = !_initializing; - if (isTopLevelCall) { - _initializing = true; - _initialized = true; - } - - _; - - if (isTopLevelCall) { - _initializing = false; - } - } - - /** - * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the - * {initializer} modifier, directly or indirectly. - */ - modifier onlyInitializing() { - require(_initializing, "Initializable: contract is not initializing"); - _; - } - - function _isConstructor() private view returns (bool) { - return !AddressUpgradeable.isContract(address(this)); - } -} - -/** - * @dev Contract module that helps prevent reentrant calls to a function. - * - * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier - * available, which can be applied to functions to make sure there are no nested - * (reentrant) calls to them. - * - * Note that because there is a single `nonReentrant` guard, functions marked as - * `nonReentrant` may not call one another. This can be worked around by making - * those functions `private`, and then adding `external` `nonReentrant` entry - * points to them. - * - * TIP: If you would like to learn more about reentrancy and alternative ways - * to protect against it, check out our blog post - * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. - */ -abstract contract ReentrancyGuardUpgradeable is Initializable { - // Booleans are more expensive than uint256 or any type that takes up a full - // word because each write operation emits an extra SLOAD to first read the - // slot's contents, replace the bits taken up by the boolean, and then write - // back. This is the compiler's defense against contract upgrades and - // pointer aliasing, and it cannot be disabled. - - // The values being non-zero value makes deployment a bit more expensive, - // but in exchange the refund on every call to nonReentrant will be lower in - // amount. Since refunds are capped to a percentage of the total - // transaction's gas, it is best to keep them low in cases like this one, to - // increase the likelihood of the full refund coming into effect. - uint256 private constant _NOT_ENTERED = 1; - uint256 private constant _ENTERED = 2; - - uint256 private _status; - - function __ReentrancyGuard_init() internal onlyInitializing { - __ReentrancyGuard_init_unchained(); - } - - function __ReentrancyGuard_init_unchained() internal onlyInitializing { - _status = _NOT_ENTERED; - } - - /** - * @dev Prevents a contract from calling itself, directly or indirectly. - * Calling a `nonReentrant` function from another `nonReentrant` - * function is not supported. It is possible to prevent this from happening - * by making the `nonReentrant` function external, and making it call a - * `private` function that does the actual work. - */ - modifier nonReentrant() { - // On the first call to nonReentrant, _notEntered will be true - require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - - // Any calls to nonReentrant after this point will fail - _status = _ENTERED; - - _; - - // By storing the original value once again, a refund is triggered (see - // https://eips.ethereum.org/EIPS/eip-2200) - _status = _NOT_ENTERED; - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[49] private __gap; -} - -// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) - -// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract ContextUpgradeable is Initializable { - function __Context_init() internal onlyInitializing {} - - function __Context_init_unchained() internal onlyInitializing {} - - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; -} - -/** - * @dev Contract module which provides a basic access control mechanism, where - * there is an account (an owner) that can be granted exclusive access to - * specific functions. - * - * By default, the owner account will be the one that deploys the contract. This - * can later be changed with {transferOwnership}. - * - * This module is used through inheritance. It will make available the modifier - * `onlyOwner`, which can be applied to your functions to restrict their use to - * the owner. - */ -abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { - address private _owner; - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - /** - * @dev Initializes the contract setting the deployer as the initial owner. - */ - function __Ownable_init() internal onlyInitializing { - __Ownable_init_unchained(); - } - - function __Ownable_init_unchained() internal onlyInitializing { - _transferOwnership(_msgSender()); - } - - /** - * @dev Returns the address of the current owner. - */ - function owner() public view virtual returns (address) { - return _owner; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(owner() == _msgSender(), "Ownable: caller is not the owner"); - _; - } - - /** - * @dev Leaves the contract without owner. It will not be possible to call - * `onlyOwner` functions anymore. Can only be called by the current owner. - * - * NOTE: Renouncing ownership will leave the contract without an owner, - * thereby removing any functionality that is only available to the owner. - */ - function renounceOwnership() public virtual onlyOwner { - _transferOwnership(address(0)); - } - - /** - * @dev Transfers ownership of the contract to a new account (`newOwner`). - * Can only be called by the current owner. - */ - function transferOwnership(address newOwner) public virtual onlyOwner { - require(newOwner != address(0), "Ownable: new owner is the zero address"); - _transferOwnership(newOwner); - } - - /** - * @dev Transfers ownership of the contract to a new account (`newOwner`). - * Internal function without access restriction. - */ - function _transferOwnership(address newOwner) internal virtual { - address oldOwner = _owner; - _owner = newOwner; - emit OwnershipTransferred(oldOwner, newOwner); - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[49] private __gap; -} - -/// @title MorphoStorage. -/// @author Morpho Labs. -/// @custom:contact security@morpho.xyz -/// @notice All storage variables used in Morpho contracts. -abstract contract MorphoStorage is OwnableUpgradeable, ReentrancyGuardUpgradeable { - /// GLOBAL STORAGE /// - - uint8 public constant NO_REFERRAL_CODE = 0; - uint8 public constant VARIABLE_INTEREST_MODE = 2; - uint16 public constant MAX_BASIS_POINTS = 10_000; // 100% in basis points. - uint256 public constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 5_000; // 50% in basis points. - uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18; // Health factor below which the positions can be liquidated. - uint256 public constant MAX_NB_OF_MARKETS = 128; - bytes32 public constant BORROWING_MASK = - 0x5555555555555555555555555555555555555555555555555555555555555555; - bytes32 public constant ONE = - 0x0000000000000000000000000000000000000000000000000000000000000001; - - bool public isClaimRewardsPaused; // Whether claiming rewards is paused or not. - uint256 public maxSortedUsers; // The max number of users to sort in the data structure. - Types.MaxGasForMatching public defaultMaxGasForMatching; // The default max gas to consume within loops in matching engine functions. - - /// POSITIONS STORAGE /// - - mapping(address => HeapOrdering.HeapArray) internal suppliersInP2P; // For a given market, the suppliers in peer-to-peer. - mapping(address => HeapOrdering.HeapArray) internal suppliersOnPool; // For a given market, the suppliers on Aave. - mapping(address => HeapOrdering.HeapArray) internal borrowersInP2P; // For a given market, the borrowers in peer-to-peer. - mapping(address => HeapOrdering.HeapArray) internal borrowersOnPool; // For a given market, the borrowers on Aave. - mapping(address => mapping(address => Types.SupplyBalance)) public supplyBalanceInOf; // For a given market, the supply balance of a user. aToken -> user -> balances. - mapping(address => mapping(address => Types.BorrowBalance)) public borrowBalanceInOf; // For a given market, the borrow balance of a user. aToken -> user -> balances. - mapping(address => bytes32) public userMarkets; // The markets entered by a user as a bitmask. - - /// MARKETS STORAGE /// - - address[] internal marketsCreated; // Keeps track of the created markets. - mapping(address => uint256) public p2pSupplyIndex; // Current index from supply peer-to-peer unit to underlying (in ray). - mapping(address => uint256) public p2pBorrowIndex; // Current index from borrow peer-to-peer unit to underlying (in ray). - mapping(address => Types.PoolIndexes) public poolIndexes; // Last pool index stored. - mapping(address => Types.Market) public market; // Market information. - mapping(address => Types.Delta) public deltas; // Delta parameters for each market. - mapping(address => bytes32) public borrowMask; // Borrow mask of the given market, shift left to get the supply mask. - - /// CONTRACTS AND ADDRESSES /// - - ILendingPoolAddressesProvider public addressesProvider; - IAaveIncentivesController public aaveIncentivesController; - ILendingPool public pool; - - IEntryPositionsManager public entryPositionsManager; - IExitPositionsManager public exitPositionsManager; - IInterestRatesManager public interestRatesManager; - IIncentivesVault public incentivesVault; - IRewardsManager public rewardsManager; - address public treasuryVault; - - /// CONSTRUCTOR /// - - /// @notice Constructs the contract. - /// @dev The contract is automatically marked as initialized when deployed so that nobody can highjack the implementation contract. - constructor() initializer {} -} - -interface ILido { - function getPooledEthByShares(uint256 _sharesAmount) external view returns (uint256); -} - -/// @title InterestRatesManager. -/// @author Morpho Labs. -/// @custom:contact security@morpho.xyz -/// @notice Smart contract handling the computation of indexes used for peer-to-peer interactions. -/// @dev This contract inherits from MorphoStorage so that Morpho can delegate calls to this contract. -contract InterestRatesManager is IInterestRatesManager, MorphoStorage { - using PercentageMath for uint256; - using WadRayMath for uint256; - - /// STORAGE /// - - address public constant STETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84; - uint256 public immutable ST_ETH_REBASE_INDEX; - - constructor() { - ST_ETH_REBASE_INDEX = ILido(STETH).getPooledEthByShares(WadRayMath.RAY); - } - - /// STRUCTS /// - - struct Params { - uint256 lastP2PSupplyIndex; // The peer-to-peer supply index at last update. - uint256 lastP2PBorrowIndex; // The peer-to-peer borrow index at last update. - uint256 poolSupplyIndex; // The current pool supply index. - uint256 poolBorrowIndex; // The current pool borrow index. - uint256 lastPoolSupplyIndex; // The pool supply index at last update. - uint256 lastPoolBorrowIndex; // The pool borrow index at last update. - uint256 reserveFactor; // The reserve factor percentage (10 000 = 100%). - uint256 p2pIndexCursor; // The peer-to-peer index cursor (10 000 = 100%). - Types.Delta delta; // The deltas and peer-to-peer amounts. - } - - /// EVENTS /// - - /// @notice Emitted when the peer-to-peer indexes of a market are updated. - /// @param _poolToken The address of the market updated. - /// @param _p2pSupplyIndex The updated supply index from peer-to-peer unit to underlying. - /// @param _p2pBorrowIndex The updated borrow index from peer-to-peer unit to underlying. - /// @param _poolSupplyIndex The updated pool supply index. - /// @param _poolBorrowIndex The updated pool borrow index. - event P2PIndexesUpdated( - address indexed _poolToken, - uint256 _p2pSupplyIndex, - uint256 _p2pBorrowIndex, - uint256 _poolSupplyIndex, - uint256 _poolBorrowIndex - ); - - /// EXTERNAL /// - - /// @notice Updates the peer-to-peer indexes and pool indexes (only stored locally). - /// @param _poolToken The address of the market to update. - function updateIndexes(address _poolToken) external { - Types.PoolIndexes storage marketPoolIndexes = poolIndexes[_poolToken]; - - if (block.timestamp == marketPoolIndexes.lastUpdateTimestamp) return; - - Types.Market storage market = market[_poolToken]; - - address underlyingToken = market.underlyingToken; - uint256 newPoolSupplyIndex = pool.getReserveNormalizedIncome(underlyingToken); - uint256 newPoolBorrowIndex = pool.getReserveNormalizedVariableDebt(underlyingToken); - - if (underlyingToken == STETH) { - uint256 stEthRebaseIndex = ILido(STETH).getPooledEthByShares(WadRayMath.RAY); - newPoolSupplyIndex = newPoolSupplyIndex.rayMul(stEthRebaseIndex).rayDiv( - ST_ETH_REBASE_INDEX - ); - newPoolBorrowIndex = newPoolBorrowIndex.rayMul(stEthRebaseIndex).rayDiv( - ST_ETH_REBASE_INDEX - ); - } - - Params memory params = Params( - p2pSupplyIndex[_poolToken], - p2pBorrowIndex[_poolToken], - newPoolSupplyIndex, - newPoolBorrowIndex, - marketPoolIndexes.poolSupplyIndex, - marketPoolIndexes.poolBorrowIndex, - market.reserveFactor, - market.p2pIndexCursor, - deltas[_poolToken] - ); - - (uint256 newP2PSupplyIndex, uint256 newP2PBorrowIndex) = _computeP2PIndexes(params); - - p2pSupplyIndex[_poolToken] = newP2PSupplyIndex; - p2pBorrowIndex[_poolToken] = newP2PBorrowIndex; - - marketPoolIndexes.lastUpdateTimestamp = uint32(block.timestamp); - marketPoolIndexes.poolSupplyIndex = uint112(newPoolSupplyIndex); - marketPoolIndexes.poolBorrowIndex = uint112(newPoolBorrowIndex); - - emit P2PIndexesUpdated( - _poolToken, - newP2PSupplyIndex, - newP2PBorrowIndex, - newPoolSupplyIndex, - newPoolBorrowIndex - ); - } - - /// INTERNAL /// - - /// @notice Computes and returns new peer-to-peer indexes. - /// @param _params Computation parameters. - /// @return newP2PSupplyIndex The updated p2pSupplyIndex. - /// @return newP2PBorrowIndex The updated p2pBorrowIndex. - function _computeP2PIndexes(Params memory _params) - internal - pure - returns (uint256 newP2PSupplyIndex, uint256 newP2PBorrowIndex) - { - // Compute pool growth factors - - uint256 poolSupplyGrowthFactor = _params.poolSupplyIndex.rayDiv( - _params.lastPoolSupplyIndex - ); - uint256 poolBorrowGrowthFactor = _params.poolBorrowIndex.rayDiv( - _params.lastPoolBorrowIndex - ); - - // Compute peer-to-peer growth factors. - - uint256 p2pSupplyGrowthFactor; - uint256 p2pBorrowGrowthFactor; - if (poolSupplyGrowthFactor <= poolBorrowGrowthFactor) { - uint256 p2pGrowthFactor = poolSupplyGrowthFactor.percentMul( - MAX_BASIS_POINTS - _params.p2pIndexCursor - ) + poolBorrowGrowthFactor.percentMul(_params.p2pIndexCursor); - p2pSupplyGrowthFactor = - p2pGrowthFactor - - _params.reserveFactor.percentMul(p2pGrowthFactor - poolSupplyGrowthFactor); - p2pBorrowGrowthFactor = - p2pGrowthFactor + - _params.reserveFactor.percentMul(poolBorrowGrowthFactor - p2pGrowthFactor); - } else { - // The case poolSupplyGrowthFactor > poolBorrowGrowthFactor happens because someone has done a flashloan on Aave, or the interests - // generated by the stable rate borrowing are high (making the supply rate higher than the variable borrow rate): the peer-to-peer - // growth factors are set to the pool borrow growth factor. - p2pSupplyGrowthFactor = poolBorrowGrowthFactor; - p2pBorrowGrowthFactor = poolBorrowGrowthFactor; - } - - // Compute new peer-to-peer supply index. - - if (_params.delta.p2pSupplyAmount == 0 || _params.delta.p2pSupplyDelta == 0) { - newP2PSupplyIndex = _params.lastP2PSupplyIndex.rayMul(p2pSupplyGrowthFactor); - } else { - uint256 shareOfTheDelta = Math.min( - (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), - WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. - ); // In ray. - - newP2PSupplyIndex = _params.lastP2PSupplyIndex.rayMul( - (WadRayMath.RAY - shareOfTheDelta).rayMul(p2pSupplyGrowthFactor) + - shareOfTheDelta.rayMul(poolSupplyGrowthFactor) - ); - } - - // Compute new peer-to-peer borrow index. - - if (_params.delta.p2pBorrowAmount == 0 || _params.delta.p2pBorrowDelta == 0) { - newP2PBorrowIndex = _params.lastP2PBorrowIndex.rayMul(p2pBorrowGrowthFactor); - } else { - uint256 shareOfTheDelta = Math.min( - (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), - WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. - ); // In ray. - - newP2PBorrowIndex = _params.lastP2PBorrowIndex.rayMul( - (WadRayMath.RAY - shareOfTheDelta).rayMul(p2pBorrowGrowthFactor) + - shareOfTheDelta.rayMul(poolBorrowGrowthFactor) - ); - } - } -} diff --git a/Makefile b/Makefile index b76564f02..6f51762ba 100644 --- a/Makefile +++ b/Makefile @@ -127,5 +127,9 @@ storage-layout-check: config: @forge config +flatten-tests: + @mkdir -p test/contracts/upgrades/ + @FOUNDRY_SRC=contracts forge flatten contracts/common/rewards-distribution/RewardsDistributor.sol > test/contracts/upgrades/RewardsDistributor.flattened.sol + .PHONY: test config test-common foundry diff --git a/hardhat.config.ts b/hardhat.config.ts index 346a6f203..854aa7a33 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,63 +1,26 @@ import * as dotenv from "dotenv"; +import { HardhatUserConfig } from "hardhat/config"; + +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomiclabs/hardhat-ethers"; dotenv.config({ path: "./.env.local" }); -module.exports = { +const config: HardhatUserConfig = { + solidity: "0.8.13", defaultNetwork: "hardhat", networks: { - hardhat: {}, - mainnet: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - }, - kovan: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://kovan.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - }, - forkMainnet: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://rpc.tenderly.co/fork/${process.env.TENDERLY_SECRET_KEY}`, - chainId: 1, - }, - rinkeby: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - }, - ropsten: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://ropsten.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - }, - polygon: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://polygon-mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - gas: 2100000, - gasPrice: 8000000000, - }, - mumbai: { - accounts: [process.env.DEPLOYER_PRIVATE_KEY], - url: `https://polygon-mumbai.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - gas: 2100000, - gasPrice: 8000000000, - }, - }, - paths: { - sources: "./contracts/common/", - }, - namedAccounts: { - deployer: { - kovan: "0x2F25DB0982Fd8E8be238281e4b6c413Eda688637", - }, - }, - solidity: { - version: "0.8.13", - settings: { - optimizer: { + hardhat: { + forking: { enabled: true, - runs: 200, + url: `https://${process.env.NETWORK}.g.alchemy.com/v2/${process.env.ALCHEMY_KEY}`, + blockNumber: 15_567_589, }, }, }, - etherscan: { - apiKey: process.env.ETHERSCAN_API_KEY, + paths: { + sources: "./test/contracts/", }, }; + +export default config; diff --git a/package.json b/package.json index 09cc10e7a..a0bb1e1ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "1.0.0", "description": "Core contracts of the Morpho Protocol V1.", "scripts": { - "test": "hardhat test", + "test": "make flatten-tests && NETWORK=eth-mainnet hardhat test test/*.spec.ts", + "test:upgrade:stEth": "make flatten-tests && NETWORK=eth-mainnet hardhat test test/upgrades/stEth.spec.ts", "lint": "yarn lint:sol && yarn lint:ts", "lint:ts": "eslint . --ext .ts", "lint:sol": "solhint 'contracts/**/*.sol'", @@ -22,18 +23,23 @@ }, "homepage": "https://github.com/morpho-dao/morpho-v1#readme", "devDependencies": { + "@morpho-labs/ethers-multicall": "^1.3.1", "@morpho-labs/morpho-ethers-contract": "^1.1.1", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-network-helpers": "1.0.6", "@nomiclabs/hardhat-ethers": "2.1.1", - "@types/chai": "4.3.3", - "@types/node": "18.7.18", - "@typescript-eslint/eslint-plugin": "5.38.0", - "@typescript-eslint/parser": "5.38.0", + "@nomiclabs/hardhat-waffle": "2.0.3", + "@trivago/prettier-plugin-sort-imports": "^3.3.0", + "@types/chai": "^4.3.3", + "@types/mocha": "^9.1.1", + "@types/node": "^18.7.18", + "@typescript-eslint/eslint-plugin": "^5.38.0", + "@typescript-eslint/parser": "^5.38.0", "chai": "4.3.6", "dotenv": "16.0.2", "eslint": "^8.23.1", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-prettier": "4.2.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", "ethers": "5.7.1", "hardhat": "2.11.2", "husky": "^8.0.1", @@ -41,12 +47,26 @@ "prettier": "^2.7.1", "prettier-plugin-solidity": "^1.0.0-beta.24", "solhint": "^3.3.7", - "solhint-plugin-prettier": "0.0.5", + "solhint-plugin-prettier": "^0.0.5", "ts-node": "^10.9.1", "typescript": "^4.8.3" }, "dependencies": { "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2" + }, + "jest": { + "clearMocks": true, + "moduleFileExtensions": [ + "ts", + "js" + ], + "testMatch": [ + "**/*.spec.ts" + ], + "transform": { + "^.+\\.ts$": "ts-jest" + }, + "verbose": true } } diff --git a/scripts/upgrade-compound.ts b/scripts/upgrade-compound.ts deleted file mode 100644 index 606db00db..000000000 --- a/scripts/upgrade-compound.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable no-console */ -const config = require(`@config/${process.env.NETWORK}-config.json`); -import hre, { ethers, upgrades } from 'hardhat'; - -// Check this doc to understand how the OZ upgrade plugin works: https://docs.openzeppelin.com/upgrades-plugins/1.x/ - -async function main() { - const [deployer] = await ethers.getSigners(); - - console.log('\n🦋 Upgrading Morpho contracts for Compound'); - console.log('👩 Deployer account:', deployer.address); - console.log('🤑 Account balance:', (await deployer.getBalance()).toString()); - - const positionsManagerAddress = '0xaa3d9c6b6379a1d3611b41c73552f61d68694f76'; - const interestRatesAddress = '0xa519a5421a004fbb6473169f9d24d5aa13e30697'; - const morphoProxyAddress = '0x9c8f4e4d0298e0711fc15d3674bd40ae0c5977a0'; - - /// MORPHO UPGRADE /// - - const maxGas = { supply: 3e6, borrow: 3e6, withdraw: 3e6, repay: 3e6 }; - - console.log('\n🦋 Upgrading Morpho...'); - - // Part to update - const Morpho = await ethers.getContractFactory('Morpho'); - await upgrades.upgradeProxy(morphoProxyAddress, Morpho, { - call: { - fn: 'initialize', - args: [ - positionsManagerAddress, - interestRatesAddress, - config.compound.comptroller.address, - 1, - maxGas, - 100, - config.tokens.cEth.address, - config.tokens.wEth.address, - ], - }, - unsafeAllow: ['delegatecall'], - }); - const morphoImplementationAddress = await upgrades.erc1967.getImplementationAddress(morphoProxyAddress); - - console.log('🎉 Morpho Proxy deployed to address:', morphoProxyAddress); - console.log('🎉 Morpho Implementation deployed to address:', morphoImplementationAddress); - - console.log('\n🦋 Verifying Morpho Implementation on Tenderly...'); - await hre.tenderly.verify({ - name: 'Morpho Implementation', - address: morphoImplementationAddress, - }); - console.log('🎉 Morpho Implementation verified!'); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/test/test-rewards-distributor.ts b/test/RewardsDistributor.spec.ts similarity index 70% rename from test/test-rewards-distributor.ts rename to test/RewardsDistributor.spec.ts index 643138095..0365d9b76 100644 --- a/test/test-rewards-distributor.ts +++ b/test/RewardsDistributor.spec.ts @@ -1,11 +1,11 @@ -import * as dotenv from 'dotenv'; -dotenv.config({ path: './.env.local' }); -import hre, { ethers } from 'hardhat'; -import { MerkleTree } from 'merkletreejs'; -import { Signer, Contract } from 'ethers'; -import { expect } from 'chai'; - -describe('RewardsDistributor Contract', () => { +import { expect } from "chai"; +import { Signer, Contract } from "ethers"; +import hre, { ethers } from "hardhat"; +import { MerkleTree } from "merkletreejs"; + +import "../hardhat.config"; + +describe("RewardsDistributor Contract", () => { let snapshotId: number; let rewardsDistributor: Contract; let morphoToken: Contract; @@ -18,20 +18,20 @@ describe('RewardsDistributor Contract', () => { let leaves: any[]; let root: string; let merkleTree: MerkleTree; - const amount0 = ethers.utils.parseUnits('1'); - const amount1 = ethers.utils.parseUnits('1'); - const amount2 = ethers.utils.parseUnits('2'); - const amountMinted = ethers.utils.parseUnits('100000'); + const amount0 = ethers.utils.parseUnits("1"); + const amount1 = ethers.utils.parseUnits("1"); + const amount2 = ethers.utils.parseUnits("2"); + const amountMinted = ethers.utils.parseUnits("100000"); const initialize = async () => { const signers = await ethers.getSigners(); [governance, account0, account1, account2] = signers; - const MorphoToken = await ethers.getContractFactory('FakeToken'); - morphoToken = await MorphoToken.deploy('Morpho Token', 'MORPHO'); + const MorphoToken = await ethers.getContractFactory("FakeToken"); + morphoToken = await MorphoToken.deploy("Morpho Token", "MORPHO"); // Deploy RewardsDistributor - const RewardsDistributor = await ethers.getContractFactory('RewardsDistributor'); + const RewardsDistributor = await ethers.getContractFactory("RewardsDistributor"); rewardsDistributor = await RewardsDistributor.deploy(morphoToken.address); await rewardsDistributor.deployed(); @@ -44,11 +44,11 @@ describe('RewardsDistributor Contract', () => { { account: await account2.getAddress(), claimable: amount2 }, ]; - leaves = distribution.map((receiver) => ethers.utils.solidityKeccak256(['address', 'uint256'], [receiver.account, receiver.claimable])); + leaves = distribution.map((receiver) => ethers.utils.solidityKeccak256(["address", "uint256"], [receiver.account, receiver.claimable])); merkleTree = new MerkleTree(leaves, ethers.utils.keccak256, { sortPairs: true }); proofs = distribution.map((receiver) => ({ address: receiver.account, - proof: merkleTree.getHexProof(ethers.utils.solidityKeccak256(['address', 'uint256'], [receiver.account, receiver.claimable])), + proof: merkleTree.getHexProof(ethers.utils.solidityKeccak256(["address", "uint256"], [receiver.account, receiver.claimable])), })); root = merkleTree.getHexRoot(); }; @@ -56,43 +56,43 @@ describe('RewardsDistributor Contract', () => { before(initialize); beforeEach(async () => { - snapshotId = await hre.network.provider.send('evm_snapshot', []); + snapshotId = await hre.network.provider.send("evm_snapshot", []); }); afterEach(async () => { - await hre.network.provider.send('evm_revert', [snapshotId]); + await hre.network.provider.send("evm_revert", [snapshotId]); }); - describe('Test RewardsDistributor', () => { - it('Should withdraw Morpho tokens', async () => { - const toWithdraw = ethers.utils.parseUnits('4'); + describe("Test RewardsDistributor", () => { + it("Should withdraw Morpho tokens", async () => { + const toWithdraw = ethers.utils.parseUnits("4"); await rewardsDistributor.connect(governance).withdrawMorphoTokens(account0.getAddress(), toWithdraw); expect(await morphoToken.balanceOf(rewardsDistributor.address)).equal(amountMinted.sub(toWithdraw)); expect(await morphoToken.balanceOf(account0.getAddress())).equal(toWithdraw); }); - it('Should withdraw Morpho tokens', async () => { + it("Should withdraw Morpho tokens", async () => { await rewardsDistributor.connect(governance).withdrawMorphoTokens(account0.getAddress(), ethers.constants.MaxUint256); expect(await morphoToken.balanceOf(rewardsDistributor.address)).equal(0); expect(await morphoToken.balanceOf(account0.getAddress())).equal(amountMinted); }); - it('Only governance should be able to update root', async () => { - const newRoot = ethers.utils.formatBytes32String('root'); + it("Only governance should be able to update root", async () => { + const newRoot = ethers.utils.formatBytes32String("root"); expect(rewardsDistributor.connect(account0).updateRoot(newRoot)).to.be.reverted; await rewardsDistributor.connect(governance).updateRoot(newRoot); expect(await rewardsDistributor.currRoot()).equal(newRoot); }); - it('Should claim nothing when no root', async () => { + it("Should claim nothing when no root", async () => { expect(rewardsDistributor.connect(account0).claim(distribution[0].account, distribution[0].claimable, proofs[0].proof)).to.be .reverted; }); - it('Should not be possible to replay proof', async () => { + it("Should not be possible to replay proof", async () => { await rewardsDistributor.connect(governance).updateRoot(root); await rewardsDistributor.connect(account0).claim(distribution[0].account, distribution[0].claimable, proofs[0].proof); @@ -101,26 +101,26 @@ describe('RewardsDistributor Contract', () => { .reverted; }); - it('Should be possible to claim for previous distribution', async () => { + it("Should be possible to claim for previous distribution", async () => { await rewardsDistributor.connect(governance).updateRoot(root); - await rewardsDistributor.connect(governance).updateRoot(ethers.utils.formatBytes32String('new root')); + await rewardsDistributor.connect(governance).updateRoot(ethers.utils.formatBytes32String("new root")); await rewardsDistributor.connect(account0).claim(distribution[0].account, distribution[0].claimable, proofs[0].proof); expect(await morphoToken.balanceOf(distribution[0].account)).to.equal(distribution[0].claimable); }); - it('Should be possible to claim for previous and current distribution', async () => { + it("Should be possible to claim for previous and current distribution", async () => { await rewardsDistributor.connect(governance).updateRoot(root); const newDistribution = [{ account: await account0.getAddress(), claimable: amount0.add(amount1) }]; const newLeaves = newDistribution.map((receiver) => - ethers.utils.solidityKeccak256(['address', 'uint256'], [receiver.account, receiver.claimable]) + ethers.utils.solidityKeccak256(["address", "uint256"], [receiver.account, receiver.claimable]) ); const newMerkleTree = new MerkleTree(newLeaves, ethers.utils.keccak256, { sortPairs: true }); const newProofs = newDistribution.map((receiver) => { return { address: receiver.account, - proof: newMerkleTree.getHexProof(ethers.utils.solidityKeccak256(['address', 'uint256'], [receiver.account, receiver.claimable])), + proof: newMerkleTree.getHexProof(ethers.utils.solidityKeccak256(["address", "uint256"], [receiver.account, receiver.claimable])), }; }); const newRoot = newMerkleTree.getHexRoot(); diff --git a/contracts/common/test/FakeToken.sol b/test/contracts/FakeToken.sol similarity index 100% rename from contracts/common/test/FakeToken.sol rename to test/contracts/FakeToken.sol diff --git a/test/upgrades/maths/BaseMath.ts b/test/upgrades/maths/BaseMath.ts new file mode 100644 index 000000000..fdec50979 --- /dev/null +++ b/test/upgrades/maths/BaseMath.ts @@ -0,0 +1,18 @@ +import { BigNumber, BigNumberish } from "ethers"; + +const BaseMath = { + min: (x: BigNumberish, y: BigNumberish) => { + x = BigNumber.from(x); + y = BigNumber.from(y); + + return x.gt(y) ? y : x; + }, + max: (x: BigNumberish, y: BigNumberish) => { + x = BigNumber.from(x); + y = BigNumber.from(y); + + return x.gt(y) ? x : y; + }, +}; + +export default BaseMath; diff --git a/test/upgrades/maths/CompoundMath.ts b/test/upgrades/maths/CompoundMath.ts new file mode 100644 index 000000000..9115c0d37 --- /dev/null +++ b/test/upgrades/maths/CompoundMath.ts @@ -0,0 +1,11 @@ +import { BigNumber, BigNumberish } from "ethers"; + +export const WAD = BigNumber.from(10).pow(18); + +const CompoundMath = { + WAD, + mul: (x: BigNumberish, y: BigNumberish) => BigNumber.from(x).mul(y).div(WAD), + div: (x: BigNumberish, y: BigNumberish) => WAD.mul(x).mul(WAD).div(y).div(WAD), +}; + +export default CompoundMath; diff --git a/test/upgrades/maths/PercentageMath.ts b/test/upgrades/maths/PercentageMath.ts new file mode 100644 index 000000000..d5f1ad8a2 --- /dev/null +++ b/test/upgrades/maths/PercentageMath.ts @@ -0,0 +1,21 @@ +import { BigNumber, BigNumberish } from "ethers"; + +import BaseMath from "./BaseMath"; +import { mulDivUp } from "./utils"; + +const BASE_PERCENT = BigNumber.from(100_00); +const HALF_PERCENT = BigNumber.from(50_00); + +const percentMul = (x: BigNumberish, y: BigNumberish) => mulDivUp(x, y, BASE_PERCENT); + +const percentDiv = (x: BigNumberish, y: BigNumberish) => mulDivUp(x, BASE_PERCENT, y); + +const PercentMath = { + BASE_PERCENT, + percentMul, + percentDiv, + weightedAvg: (x: BigNumberish, y: BigNumberish, pct: BigNumberish) => + BaseMath.max(0, BASE_PERCENT.sub(pct)).mul(x).add(BaseMath.min(BASE_PERCENT, pct).mul(y)).add(HALF_PERCENT).div(BASE_PERCENT), +}; + +export default PercentMath; diff --git a/test/upgrades/maths/WadRayMath.ts b/test/upgrades/maths/WadRayMath.ts new file mode 100644 index 000000000..8749795d4 --- /dev/null +++ b/test/upgrades/maths/WadRayMath.ts @@ -0,0 +1,17 @@ +import { BigNumber, BigNumberish } from "ethers"; + +import { mulDivUp } from "./utils"; + +export const WAD = BigNumber.from(10).pow(18); +export const RAY = BigNumber.from(10).pow(27); + +const WadRayMath = { + WAD, + RAY, + wadMul: (x: BigNumberish, y: BigNumberish) => mulDivUp(x, y, WAD), + wadDiv: (x: BigNumberish, y: BigNumberish) => mulDivUp(x, WAD, y), + rayMul: (x: BigNumberish, y: BigNumberish) => mulDivUp(x, y, RAY), + rayDiv: (x: BigNumberish, y: BigNumberish) => mulDivUp(x, RAY, y), +}; + +export default WadRayMath; diff --git a/test/upgrades/maths/index.ts b/test/upgrades/maths/index.ts new file mode 100644 index 000000000..a34b65415 --- /dev/null +++ b/test/upgrades/maths/index.ts @@ -0,0 +1,6 @@ +export { default as BaseMath } from "./BaseMath"; +export { default as WadRayMath } from "./WadRayMath"; +export { default as PercentageMath } from "./PercentageMath"; +export { default as CompoundMath } from "./CompoundMath"; + +export { mulDivUp } from "./utils"; diff --git a/test/upgrades/maths/utils.ts b/test/upgrades/maths/utils.ts new file mode 100644 index 000000000..85b8fde14 --- /dev/null +++ b/test/upgrades/maths/utils.ts @@ -0,0 +1,10 @@ +import { BigNumber, BigNumberish } from "ethers"; + +export const mulDivUp = (x: BigNumberish, y: BigNumberish, scale: BigNumberish) => { + x = BigNumber.from(x); + y = BigNumber.from(y); + scale = BigNumber.from(scale); + if (x.eq(0) || y.eq(0)) return BigNumber.from(0); + + return x.mul(y).add(scale.div(2)).div(scale); +}; diff --git a/test/upgrades/mocks/aave-v2.json b/test/upgrades/mocks/aave-v2.json new file mode 100644 index 000000000..18e377668 --- /dev/null +++ b/test/upgrades/mocks/aave-v2.json @@ -0,0 +1,1672 @@ +{ + "data": { + "users": { + "0x6e632701fd42a9b856294a2172dd63f03eb957c5": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "144433391", + "inP2P": "0", + "since": { + "blockNumber": 15401682, + "transactionIndex": 27 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "18572133644081737", + "since": { + "blockNumber": 15401699, + "transactionIndex": 119 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "0", + "inP2P": "14890141", + "since": { + "blockNumber": 15395065, + "transactionIndex": 35 + } + }, + "supply": { + "onPool": "118351025", + "inP2P": "0", + "since": { + "blockNumber": 15392103, + "transactionIndex": 19 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "6389035", + "since": { + "blockNumber": 15396838, + "transactionIndex": 13 + } + }, + "supply": { + "onPool": "23205579", + "inP2P": "0", + "since": { + "blockNumber": 15395044, + "transactionIndex": 23 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "borrow": { + "onPool": "0", + "inP2P": "5730835474723607141", + "since": { + "blockNumber": 15396839, + "transactionIndex": 101 + } + }, + "supply": { + "onPool": "23254124789831142008", + "inP2P": "0", + "since": { + "blockNumber": 15395065, + "transactionIndex": 58 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15398478, + "transactionIndex": 44 + } + }, + "supply": { + "onPool": "113210", + "inP2P": "0", + "since": { + "blockNumber": 15392172, + "transactionIndex": 21 + } + } + }, + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "borrow": { + "onPool": "0", + "inP2P": "999997863893129798", + "since": { + "blockNumber": 15409235, + "transactionIndex": 133 + } + }, + "supply": { + "onPool": "88027434990123781659", + "inP2P": "0", + "since": { + "blockNumber": 15409208, + "transactionIndex": 22 + } + } + }, + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "199257119133653564", + "inP2P": "0", + "since": { + "blockNumber": 15433054, + "transactionIndex": 46 + } + } + } + } + }, + "0x4e8ffddb1403cf5306c6c7b31dc72ef5f44bc4f5": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "0", + "inP2P": "34579276819405360", + "since": { + "blockNumber": 15473953, + "transactionIndex": 83 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "749", + "since": { + "blockNumber": 15451836, + "transactionIndex": 48 + } + } + } + } + }, + "0x4426023bbeac104ea9f6f816c979f4e39c174957": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "1345060048055", + "inP2P": "0", + "since": { + "blockNumber": 15466666, + "transactionIndex": 130 + } + } + } + } + }, + "0x30ef0552e16c4f04d4ce1c954ab67776b3dff542": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "3431336969473784", + "inP2P": "0", + "since": { + "blockNumber": 15495604, + "transactionIndex": 222 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "279437389283", + "since": { + "blockNumber": 15486477, + "transactionIndex": 191 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "supply": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15492018, + "transactionIndex": 249 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "75", + "since": { + "blockNumber": 15492903, + "transactionIndex": 172 + } + } + }, + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "supply": { + "onPool": "25146987426743", + "inP2P": "0", + "since": { + "blockNumber": 15492032, + "transactionIndex": 147 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "891961862", + "since": { + "blockNumber": 15495519, + "transactionIndex": 205 + } + } + } + } + }, + "0xfa469977ed4253c9c0c7b59ba69211be0b226de6": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "2565553083423449", + "inP2P": "0", + "since": { + "blockNumber": 15488353, + "transactionIndex": 74 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "240501994", + "since": { + "blockNumber": 15488301, + "transactionIndex": 76 + } + } + } + } + }, + "0xdce38101a45640b02306bb60a0fdeb2c3d8487b6": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "15113773709180", + "inP2P": "0", + "since": { + "blockNumber": 15496485, + "transactionIndex": 230 + } + } + } + } + }, + "0xeec6cc090ca8ac1b934525762fa772d785a6a67c": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "18", + "inP2P": "0", + "since": { + "blockNumber": 15524109, + "transactionIndex": 44 + } + } + } + } + }, + "0x7f2691cec4fefd54422159d6cbfc1ea534de4d17": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "12696604135073", + "inP2P": "0", + "since": { + "blockNumber": 15531943, + "transactionIndex": 238 + } + } + } + } + }, + "0xc53539fd4d109840dbfe8c759ba7fc2e7200709b": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "1856028624", + "inP2P": "0", + "since": { + "blockNumber": 15546035, + "transactionIndex": 351 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "1999044454", + "since": { + "blockNumber": 15546022, + "transactionIndex": 719 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "2959879858361381342", + "inP2P": "0", + "since": { + "blockNumber": 15546017, + "transactionIndex": 66 + } + } + } + } + }, + "0x16c2312b7168f0e268751a4d5d73953176d87768": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "16351499314682311552", + "inP2P": "0", + "since": { + "blockNumber": 15543060, + "transactionIndex": 135 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "12574335687", + "since": { + "blockNumber": 15561835, + "transactionIndex": 207 + } + }, + "supply": { + "onPool": "13813983415", + "inP2P": "0", + "since": { + "blockNumber": 15561816, + "transactionIndex": 157 + } + } + } + } + }, + "0xcf339235b44198c990bc0d674cc6c7f3bffe1d1a": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "19322672537613751700", + "inP2P": "0", + "since": { + "blockNumber": 15545599, + "transactionIndex": 30 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "9995990090", + "since": { + "blockNumber": 15502154, + "transactionIndex": 17 + } + } + } + } + }, + "0xf212ce21a97dbe30999a4c2b309d278bccbb686a": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "2029", + "inP2P": "0", + "since": { + "blockNumber": 15545849, + "transactionIndex": 378 + } + } + } + } + }, + "0x5a805112171fea540cb85f851757e395751fb7c1": { + "positions": { + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "supply": { + "onPool": "1", + "inP2P": "0", + "since": { + "blockNumber": 15547081, + "transactionIndex": 277 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "22893978439232", + "inP2P": "0", + "since": { + "blockNumber": 15554767, + "transactionIndex": 123 + } + } + } + } + }, + "0xdffdb9beea2ab3151bcbcf37a01ee8726f22ed94": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "23369094727", + "inP2P": "0", + "since": { + "blockNumber": 15559632, + "transactionIndex": 231 + } + } + } + } + }, + "0x519121f08b4d1c3bc0964acd862495b7b72bccd7": { + "positions": { + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15558367, + "transactionIndex": 247 + } + } + } + } + }, + "0x4e56234ccba22a60013f4c92f527d17209e80f04": { + "positions": { + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15558484, + "transactionIndex": 253 + } + } + } + } + }, + "0xd43ba4193920da3a288aaf3400dcb5be62fb1dee": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15563457, + "transactionIndex": 133 + } + } + } + } + }, + "0xef764bac8a438e7e498c2e5fccf0f174c3e3f8db": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "12979562349884", + "inP2P": "0", + "since": { + "blockNumber": 15563767, + "transactionIndex": 59 + } + } + } + } + }, + "0x08ca2051adfc16e419a5bcb496c78034cfd86c7b": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "65", + "inP2P": "0", + "since": { + "blockNumber": 15564704, + "transactionIndex": 271 + } + } + } + } + }, + "0xf87694eeec1ced7c1136cba56dc21b414957d62b": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "182", + "inP2P": "0", + "since": { + "blockNumber": 15566166, + "transactionIndex": 299 + } + } + } + } + }, + "0xe36288736e5a45c27ee6fa2f8d1a1aed99d3ea63": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "107", + "inP2P": "0", + "since": { + "blockNumber": 15566538, + "transactionIndex": 197 + } + } + } + } + }, + "0x408e986a277da059a90c4be5051f67c6e3fd5cff": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "199975909719069018", + "since": { + "blockNumber": 15395347, + "transactionIndex": 382 + } + }, + "supply": { + "onPool": "247268138757580425", + "inP2P": "199975909719069018", + "since": { + "blockNumber": 15395818, + "transactionIndex": 198 + } + } + } + } + }, + "0x264c86dbbd2e4165fbbf0c35b0ddf0e00aec6b31": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "79793532077846857", + "since": { + "blockNumber": 15398967, + "transactionIndex": 47 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "185643285", + "inP2P": "0", + "since": { + "blockNumber": 15398962, + "transactionIndex": 228 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "93015023430657882968", + "inP2P": "0", + "since": { + "blockNumber": 15399001, + "transactionIndex": 112 + } + } + } + } + }, + "0x6abfd6139c7c3cc270ee2ce132e309f59caaf6a2": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "499888375062", + "since": { + "blockNumber": 15439582, + "transactionIndex": 106 + } + }, + "supply": { + "onPool": "1391871858688", + "inP2P": "499898142", + "since": { + "blockNumber": 15434322, + "transactionIndex": 145 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "465002691310801573465403", + "inP2P": "0", + "since": { + "blockNumber": 15434322, + "transactionIndex": 145 + } + } + }, + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "299996786230825735481", + "inP2P": "0", + "since": { + "blockNumber": 15434322, + "transactionIndex": 145 + } + } + } + } + }, + "0x2b5469940fa577bc4082c6940ee4d8e97fda1b42": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "37668268714010995", + "since": { + "blockNumber": 15439863, + "transactionIndex": 47 + } + }, + "supply": { + "onPool": "45623285312973555", + "inP2P": "0", + "since": { + "blockNumber": 15439855, + "transactionIndex": 100 + } + } + } + } + }, + "0xb21731d830b7e8460e5d6c66dc1ccc0a5d0a6b87": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "2299154452", + "since": { + "blockNumber": 15531775, + "transactionIndex": 227 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "2910435478480831912", + "inP2P": "0", + "since": { + "blockNumber": 15531743, + "transactionIndex": 241 + } + } + } + } + }, + "0xb7bff12c323fd4e610e186b991e01fdb7542e6b0": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "37610647832", + "since": { + "blockNumber": 15449355, + "transactionIndex": 122 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "supply": { + "onPool": "534218086", + "inP2P": "0", + "since": { + "blockNumber": 15447929, + "transactionIndex": 215 + } + } + } + } + }, + "0x5853ed4f26a3fcea565b3fbc698bb19cdf6deb85": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "borrow": { + "onPool": "0", + "inP2P": "7696244487237998", + "since": { + "blockNumber": 15451489, + "transactionIndex": 29 + } + }, + "supply": { + "onPool": "92993536322793228", + "inP2P": "0", + "since": { + "blockNumber": 15450520, + "transactionIndex": 80 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "99973", + "since": { + "blockNumber": 15451826, + "transactionIndex": 18 + } + }, + "supply": { + "onPool": "928123", + "inP2P": "0", + "since": { + "blockNumber": 15451813, + "transactionIndex": 37 + } + } + } + } + }, + "0xbcf8d8059790c3b69e507e37892e0bf67f47a60d": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "2439290279", + "since": { + "blockNumber": 15453973, + "transactionIndex": 200 + } + }, + "supply": { + "onPool": "2678901263", + "inP2P": "0", + "since": { + "blockNumber": 15453966, + "transactionIndex": 79 + } + } + } + } + }, + "0x35b9c86d87e44971fe1315c8b3a3e2500c9111b3": { + "positions": { + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "0", + "inP2P": "8443225", + "since": { + "blockNumber": 15454064, + "transactionIndex": 193 + } + }, + "supply": { + "onPool": "12154747", + "inP2P": "0", + "since": { + "blockNumber": 15454058, + "transactionIndex": 127 + } + } + } + } + }, + "0x2b266b260d1ccf94648329bb0189d3d283181444": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "13995021278", + "since": { + "blockNumber": 15510599, + "transactionIndex": 201 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "5903398988762001582", + "inP2P": "0", + "since": { + "blockNumber": 15553673, + "transactionIndex": 88 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "supply": { + "onPool": "84519083", + "inP2P": "0", + "since": { + "blockNumber": 15471004, + "transactionIndex": 45 + } + } + } + } + }, + "0x50e4eb3a74d2be7fd7c0be081754cee2dbeae918": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "19992615", + "since": { + "blockNumber": 15481521, + "transactionIndex": 153 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "46491564716123851964", + "inP2P": "0", + "since": { + "blockNumber": 15481464, + "transactionIndex": 160 + } + } + } + } + }, + "0xa1958a37c21372482deff4618baebbec23c9a449": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "borrow": { + "onPool": "0", + "inP2P": "20430186793277404", + "since": { + "blockNumber": 15495449, + "transactionIndex": 160 + } + }, + "supply": { + "onPool": "9384189078079590506172", + "inP2P": "0", + "since": { + "blockNumber": 15486578, + "transactionIndex": 97 + } + } + } + } + }, + "0x299161b9d8149052d81e652b81a6c0fc187e2224": { + "positions": { + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "3292149291484694468", + "inP2P": "0", + "since": { + "blockNumber": 15411621, + "transactionIndex": 120 + } + } + } + } + }, + "0x617edca70efb4be0a42f1a83dc1d6cc84613e158": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "6920293149090232612", + "inP2P": "0", + "since": { + "blockNumber": 15441125, + "transactionIndex": 77 + } + } + } + } + }, + "0x1a27881e041737bc7ef5c616a8af08ec7e51db40": { + "positions": { + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "supply": { + "onPool": "20583641407016846427", + "inP2P": "0", + "since": { + "blockNumber": 15441267, + "transactionIndex": 155 + } + } + } + } + }, + "0xf7253a0e87e39d2cd6365919d4a3d56d431d0041": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "372590649443942397174", + "inP2P": "0", + "since": { + "blockNumber": 15442370, + "transactionIndex": 88 + } + } + } + } + }, + "0xab888291f4127352b655fd476f64ac2ebfb8fe76": { + "positions": { + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "supply": { + "onPool": "879705584127384176", + "inP2P": "0", + "since": { + "blockNumber": 15445076, + "transactionIndex": 48 + } + } + } + } + }, + "0xf18288d96dde32206e811871bdd5e274a32cfbe4": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "46406641", + "inP2P": "0", + "since": { + "blockNumber": 15445183, + "transactionIndex": 152 + } + } + } + } + }, + "0x0b5d9ae8fd1eba316a1b8b22b3c08b5621fb68b4": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "25790608539682612781", + "inP2P": "0", + "since": { + "blockNumber": 15445297, + "transactionIndex": 10 + } + } + } + } + }, + "0xaf88097460d0ba2a99c04deb30e05ff21e0dd246": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "928131", + "inP2P": "0", + "since": { + "blockNumber": 15446134, + "transactionIndex": 200 + } + } + } + } + }, + "0xa8cbf4200595efcd94b7526d04deafe0f284af2d": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "67827856873579148293", + "inP2P": "0", + "since": { + "blockNumber": 15446686, + "transactionIndex": 164 + } + } + } + } + }, + "0xbb53d3fdb99adb815d7d2824d6a0b82396cf046d": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "9885073955728292418", + "inP2P": "0", + "since": { + "blockNumber": 15448767, + "transactionIndex": 17 + } + } + } + } + }, + "0xad34972d50b00d9c5bbe09895cbcfe0b2bc3a0d5": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "31007226649008111", + "inP2P": "0", + "since": { + "blockNumber": 15451866, + "transactionIndex": 306 + } + } + } + } + }, + "0x69528c13dcb9d6d5bcb68fd77f8d5498f841ffe4": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "98843586372829034", + "inP2P": "0", + "since": { + "blockNumber": 15452748, + "transactionIndex": 254 + } + } + } + } + }, + "0x29f66860c93cb45ce811ada74b1b30f4965740f1": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "988433104235685880", + "inP2P": "0", + "since": { + "blockNumber": 15452909, + "transactionIndex": 325 + } + } + } + } + }, + "0x0db0f4506f5de744052d90f04e3fca3d1dd3600d": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "46405651", + "inP2P": "0", + "since": { + "blockNumber": 15459359, + "transactionIndex": 297 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24706885545205999", + "inP2P": "0", + "since": { + "blockNumber": 15460125, + "transactionIndex": 250 + } + } + } + } + }, + "0x6b1009e2bb8ee7f36c21f5f38f4f25f1b79bc02d": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "589164568", + "inP2P": "0", + "since": { + "blockNumber": 15463820, + "transactionIndex": 248 + } + } + } + } + }, + "0x3cb06e95719497cca509f55e3c09e53c8f43fd3f": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "2784316577", + "inP2P": "0", + "since": { + "blockNumber": 15464507, + "transactionIndex": 154 + } + } + } + } + }, + "0x32c52c9e56c7382e9a9e52d53862ff3e6cbcaeee": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "42077508373121442962", + "inP2P": "0", + "since": { + "blockNumber": 15465232, + "transactionIndex": 38 + } + } + } + } + }, + "0xb76707515c3f908411b5211863a7581589a1e31f": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24704977158268060", + "inP2P": "0", + "since": { + "blockNumber": 15465806, + "transactionIndex": 144 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45774008", + "inP2P": "0", + "since": { + "blockNumber": 15470759, + "transactionIndex": 91 + } + } + } + } + }, + "0x9b9a614ceba98797e775cd623e7ce3b2c56f3b6c": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "91548794", + "inP2P": "0", + "since": { + "blockNumber": 15472415, + "transactionIndex": 42 + } + } + } + } + }, + "0x5679b0f75f4c418845960bad8282e2c8e42280b9": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45775242", + "inP2P": "0", + "since": { + "blockNumber": 15465926, + "transactionIndex": 94 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24702777659017586", + "inP2P": "0", + "since": { + "blockNumber": 15472405, + "transactionIndex": 218 + } + } + } + } + }, + "0x676936d597f6cb2a8c2211a3303bbb03c284ac49": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45775232", + "inP2P": "0", + "since": { + "blockNumber": 15465974, + "transactionIndex": 102 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24702782541860895", + "inP2P": "0", + "since": { + "blockNumber": 15472394, + "transactionIndex": 238 + } + } + } + } + }, + "0x159f9412cb2e157d24c8c69e63032ed23107aa5e": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24703341303783549", + "inP2P": "0", + "since": { + "blockNumber": 15470724, + "transactionIndex": 79 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45774016", + "inP2P": "0", + "since": { + "blockNumber": 15470734, + "transactionIndex": 194 + } + } + } + } + }, + "0x48f33b292729c098d54a6c7a38678e826cf31b0b": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24703280944832828", + "inP2P": "0", + "since": { + "blockNumber": 15470903, + "transactionIndex": 300 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45773953", + "inP2P": "0", + "since": { + "blockNumber": 15470969, + "transactionIndex": 80 + } + } + } + } + }, + "0x41aece83450e1e38264b63b5a9832f9177532251": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24703217719321227", + "inP2P": "0", + "since": { + "blockNumber": 15471100, + "transactionIndex": 107 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45773660", + "inP2P": "0", + "since": { + "blockNumber": 15472012, + "transactionIndex": 112 + } + } + } + } + }, + "0xdda833c0be0d1f570c10c2cc900eb2a5725001d4": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45773576", + "inP2P": "0", + "since": { + "blockNumber": 15472295, + "transactionIndex": 38 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24702814342332601", + "inP2P": "0", + "since": { + "blockNumber": 15472308, + "transactionIndex": 88 + } + } + } + } + }, + "0x78720984c7cf028e7a74f2acfcf857ee7a79696c": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "45773565", + "inP2P": "0", + "since": { + "blockNumber": 15472341, + "transactionIndex": 23 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "24702799644885683", + "inP2P": "0", + "since": { + "blockNumber": 15472347, + "transactionIndex": 171 + } + } + } + } + }, + "0x9da59c875a145fefd7c6be87c002af29faec4d3a": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "105384350763069778", + "inP2P": "0", + "since": { + "blockNumber": 15477967, + "transactionIndex": 231 + } + } + } + } + }, + "0x2c6e2e2eb9153631aa098d671df870a0f9026d74": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "1975886036534189559", + "inP2P": "0", + "since": { + "blockNumber": 15482162, + "transactionIndex": 246 + } + } + } + } + }, + "0x23abad8c65a9a93abcc343892aaf3d6e88b5ccc9": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "473320845", + "inP2P": "0", + "since": { + "blockNumber": 15483941, + "transactionIndex": 168 + } + } + } + } + }, + "0x32ca3698bc7707102a7e0da52a383f1c881d80d7": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "1425485655", + "inP2P": "0", + "since": { + "blockNumber": 15525596, + "transactionIndex": 266 + } + } + } + } + }, + "0x3a91d37bac30c913369e1abc8cad1c13d1ff2e98": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "92981945", + "inP2P": "0", + "since": { + "blockNumber": 15485142, + "transactionIndex": 13 + } + } + } + } + }, + "0x762fafa0257cd3b697e0d7fd40f1f6c03f07a8ef": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "98782535", + "inP2P": "0", + "since": { + "blockNumber": 15485142, + "transactionIndex": 16 + } + } + } + } + }, + "0x963311ebb58043755a33bc3de4be8b492fda66d0": { + "positions": { + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "supply": { + "onPool": "87931932", + "inP2P": "0", + "since": { + "blockNumber": 15485143, + "transactionIndex": 17 + } + } + } + } + }, + "0x1926bb3977336fd376be0aee2915406a904e5870": { + "positions": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "91539730", + "inP2P": "0", + "since": { + "blockNumber": 15485143, + "transactionIndex": 20 + } + } + } + } + }, + "0xd45ef8c9b9431298019fc15753609db2fb101aa5": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "92807871", + "inP2P": "0", + "since": { + "blockNumber": 15485144, + "transactionIndex": 27 + } + } + } + } + }, + "0xa59d6996bdbfaef7b64eee436e5326869c9d8399": { + "positions": { + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "supply": { + "onPool": "997485", + "inP2P": "0", + "since": { + "blockNumber": 15485144, + "transactionIndex": 30 + } + } + } + } + }, + "0x998f9112632d2e56517aa3b993336785c23d2707": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "108662435825243498", + "inP2P": "0", + "since": { + "blockNumber": 15489521, + "transactionIndex": 47 + } + } + } + } + }, + "0x5f9d7cef3e9298de2e91ff0cb486ce2c7ffc5144": { + "positions": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "18594770989631920144", + "inP2P": "0", + "since": { + "blockNumber": 15507818, + "transactionIndex": 100 + } + } + } + } + }, + "0x929d5ab51be0b6249d8e6a63e4802ec20b2ef17e": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "1971554647492338853", + "inP2P": "0", + "since": { + "blockNumber": 15535533, + "transactionIndex": 169 + } + } + } + } + }, + "0x967ccf549783e87787ee2edfba5340143339aa1b": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "10098760589579712", + "inP2P": "0", + "since": { + "blockNumber": 15538492, + "transactionIndex": 275 + } + } + } + } + }, + "0x1a92b1338788d670993819a9f234da283021bafa": { + "positions": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "34483451641638150987", + "inP2P": "0", + "since": { + "blockNumber": 15539036, + "transactionIndex": 176 + } + } + } + } + }, + "0xe4fb9ca52e39b83be69e74e7fac8f807a9c16ef9": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "37120627306", + "inP2P": "0", + "since": { + "blockNumber": 15544884, + "transactionIndex": 187 + } + } + } + } + }, + "0x771b36164c96991f3757fc3ad6e0ab972661d643": { + "positions": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "9280056", + "inP2P": "0", + "since": { + "blockNumber": 15552525, + "transactionIndex": 79 + } + } + } + } + } + }, + "syncBlockNumber": 15567492 + }, + "markets": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "price": "1000000000000000000", + "indexes": { + "poolSupply": "1015080158227754631363360587", + "poolBorrow": "1026328768739238775490686926", + "p2pSupply": "1005235675644569488523606037", + "p2pBorrow": "1005725804133153224630663681" + }, + "updatedIndexes": { + "poolSupply": "1015080158227754631363360587", + "poolBorrow": "1026328768739238775490686926", + "p2pSupply": "1005235675644569488523606037", + "p2pBorrow": "1005725804133153224630663681" + }, + "collateralFactor": "8500", + "liquidationBonus": "10500" + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "price": "761250653114884", + "indexes": { + "poolSupply": "1092896405915821311811953630", + "poolBorrow": "1140934475598407843714959281", + "p2pSupply": "1001438237681221717953400286", + "p2pBorrow": "1001438237681221717953400286" + }, + "updatedIndexes": { + "poolSupply": "1092896405915821311811953630", + "poolBorrow": "1140934475598407843714959281", + "p2pSupply": "1001438237681221717953400286", + "p2pBorrow": "1001438237681221717953400286" + }, + "collateralFactor": "0", + "liquidationBonus": "0" + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "price": "14258745220000000000", + "indexes": { + "poolSupply": "1002563380287150885073789902", + "poolBorrow": "1012643898635247363683993928", + "p2pSupply": "1000456170092775256196488452", + "p2pBorrow": "1000456170092775256196488452" + }, + "updatedIndexes": { + "poolSupply": "1002563380287150885073789902", + "poolBorrow": "1012643898635247363683993928", + "p2pSupply": "1000456170092775256196488452", + "p2pBorrow": "1000456170092775256196488452" + }, + "collateralFactor": "8000", + "liquidationBonus": "10500" + }, + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "price": "697822550000000", + "indexes": { + "poolSupply": "1138135528379349843962432318", + "poolBorrow": "1320695244400562822905641381", + "p2pSupply": "1003606450586825664422208148", + "p2pBorrow": "1003606450586825664422208148" + }, + "updatedIndexes": { + "poolSupply": "1138135528379349843962432318", + "poolBorrow": "1320695244400562822905641381", + "p2pSupply": "1003606450586825664422208148", + "p2pBorrow": "1003606450586825664422208148" + }, + "collateralFactor": "6100", + "liquidationBonus": "10800" + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "price": "762390000000000", + "indexes": { + "poolSupply": "1077604126712127622100583092", + "poolBorrow": "1112226122831647281818865032", + "p2pSupply": "1000625325932736342228348087", + "p2pBorrow": "1000625325932736342228348087" + }, + "updatedIndexes": { + "poolSupply": "1077604126712127622100583092", + "poolBorrow": "1112226122831647281818865032", + "p2pSupply": "1000625325932736342228348087", + "p2pBorrow": "1000625325932736342228348087" + }, + "collateralFactor": "8800", + "liquidationBonus": "10450" + }, + "0x1982b2f5814301d4e9a8b0201555376e62f82428": { + "price": "991732394702174600", + "indexes": { + "poolSupply": "1000010923895744435070620640", + "poolBorrow": "1000000000000000000000000000", + "p2pSupply": "1000000000000000000000000000", + "p2pBorrow": "1000000000000000000000000000" + }, + "updatedIndexes": { + "poolSupply": "1000010923895744435070620640", + "poolBorrow": "1000000000000000000000000000", + "p2pSupply": "1000000000000000000000000000", + "p2pBorrow": "1000000000000000000000000000" + }, + "collateralFactor": "8100", + "liquidationBonus": "10750" + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "price": "762577880000000", + "indexes": { + "poolSupply": "1075879881433764278089277855", + "poolBorrow": "1121670248361132030914020813", + "p2pSupply": "1001313522996424073374879766", + "p2pBorrow": "1001313522996424073374879766" + }, + "updatedIndexes": { + "poolSupply": "1075879881433764278089277855", + "poolBorrow": "1121670248361132030914020813", + "p2pSupply": "1001313522996424073374879766", + "p2pBorrow": "1001313522996424073374879766" + }, + "collateralFactor": "9000", + "liquidationBonus": "10400" + } + } +} diff --git a/test/upgrades/stEth.spec.ts b/test/upgrades/stEth.spec.ts new file mode 100644 index 000000000..b11289aca --- /dev/null +++ b/test/upgrades/stEth.spec.ts @@ -0,0 +1,79 @@ +import { expect } from "chai"; +import hre from "hardhat"; + +import { MorphoAaveV2__factory } from "@morpho-labs/morpho-ethers-contract"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; + +import "../../hardhat.config"; + +import WadRayMath from "./maths/WadRayMath"; +import { data, markets } from "./mocks/aave-v2.json"; + +const market = "0x1982b2F5814301d4e9a8b0201555376e62F82428".toLowerCase(); + +describe("Check ugprade", () => { + let snapshotId: number; + + const morpho = MorphoAaveV2__factory.connect("0x777777c9898d384f785ee44acfe945efdff5f3e0", hre.ethers.provider); + + const deployUpgrade = async () => { + const InterestRatesManagerUpgraded = await hre.ethers.getContractFactory("InterestRatesManagerUpgraded"); + + const interestRatesManagerUpgraded = await InterestRatesManagerUpgraded.deploy(); + await interestRatesManagerUpgraded.deployed(); + + const owner = await hre.ethers.provider.getSigner(await morpho.owner()); + await morpho.connect(owner).setInterestRatesManager(interestRatesManagerUpgraded.address); + }; + + beforeEach(async () => { + snapshotId = await hre.network.provider.send("evm_snapshot", []); + }); + + afterEach(async () => { + await hre.network.provider.send("evm_revert", [snapshotId]); + }); + + it("should withdraw reasonable amount", async () => { + loadFixture(deployUpgrade); + + for (const [user, userBalances] of Object.entries(data.users)) { + if (!userBalances.positions[market]) continue; + + console.log("Impersonating", user); + await hre.network.provider.request({ + method: "hardhat_setBalance", + params: [user, "0xffffffffffffffffffffffffffffffffffffff"], + }); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [user], + }); + + const amount = WadRayMath.rayMul(userBalances.positions[market].supply.onPool, markets[market].indexes.poolSupply).add( + WadRayMath.rayMul(userBalances.positions[market].supply.inP2P, markets[market].indexes.p2pSupply) + ); + if (amount.eq(0)) continue; + + const stEth = await hre.ethers.getContractAt( + ["function balanceOf(address) external view returns (uint256)"], + "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", + await hre.ethers.provider.getSigner(user) + ); + + const balanceBefore = await stEth.balanceOf(user); + + await morpho.connect(stEth.signer).withdraw(market, amount, { gasLimit: 3_000_000 }); + + const balanceAfter = await stEth.balanceOf(user); + + expect(balanceAfter.sub(balanceBefore).sub(amount).abs().lt(10)).to.be.true; + + await expect(morpho.connect(stEth.signer).withdraw(market, 1_000_000, { gasLimit: 3_000_000 })).to.be.reverted; + + const supplyBalance = await morpho.supplyBalanceInOf(user, market); + expect(supplyBalance.onPool.toString()).to.eq("0"); + expect(supplyBalance.inP2P.toString()).to.eq("0"); + } + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 95cb8ad42..b50df5f0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,6 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["./test"], - "files": ["./hardhat.config.ts"] + "include": ["test"], + "files": ["hardhat.config.ts"] } diff --git a/yarn.lock b/yarn.lock index 4320ea314..728205d60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,18 +2,159 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" +"@babel/compat-data@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" + integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg== + +"@babel/core@7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" + integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.8" + "@babel/parser" "^7.17.8" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + +"@babel/generator@7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.17.3", "@babel/generator@^7.17.7", "@babel/generator@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" + integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== + dependencies: + "@babel/types" "^7.19.0" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.17.7": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz#7f630911d83b408b76fe584831c98e5395d7a17c" + integrity sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg== + dependencies: + "@babel/compat-data" "^7.19.1" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.17.7": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.16.7": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.17.8": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -23,6 +164,74 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== + +"@babel/parser@^7.17.3", "@babel/parser@^7.17.8", "@babel/parser@^7.18.10", "@babel/parser@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c" + integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A== + +"@babel/template@^7.16.7", "@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.17.3", "@babel/traverse@^7.19.0": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.1.tgz#0fafe100a8c2a603b4718b1d9bf2568d1d193347" + integrity sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.1" + "@babel/types" "^7.19.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -587,11 +796,33 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -605,6 +836,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -616,6 +855,14 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@morpho-labs/ethers-multicall@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@morpho-labs/ethers-multicall/-/ethers-multicall-1.3.1.tgz#251fcedd537afe78a80416ec83d073dc4ad40bb7" + integrity sha512-VPXluNraMq4hjnYo1fIuGwnASF4B4UcQbLjzJwrChUf8iO7QPNeQAbO3XHtOjhxAm5jGfTVrvyzLCGnfVoZYCQ== + dependencies: + dataloader "^2.1.0" + ethers "^5.7.0" + "@morpho-labs/morpho-ethers-contract@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@morpho-labs/morpho-ethers-contract/-/morpho-ethers-contract-1.1.1.tgz#2f74639c35e070e29c85fcdd5190c4e74390ae17" @@ -786,6 +1033,18 @@ mcl-wasm "^0.7.1" rustbn.js "~0.2.0" +"@nomicfoundation/hardhat-chai-matchers@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.3.tgz#a48ed0a3a58de616e4f553368d79c13a8850ebd5" + integrity sha512-qEE7Drs2HSY+krH09TXm6P9LFogs0BqbUq6wPD7nQRhmJ+p5zoDaIZjM5WL1pHqU5MpGqya3y+BdwmTYBfU5UA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + chalk "^2.4.2" + deep-eql "^4.0.1" + ordinal "^1.0.3" + "@nomicfoundation/hardhat-network-helpers@1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz#5e2026ddde5ca539f70a2bf498528afd08bd0827" @@ -864,6 +1123,14 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== +"@nomiclabs/hardhat-waffle@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" + "@openzeppelin/contracts-upgradeable@4.5.2": version "4.5.2" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz#90d9e47bacfd8693bfad0ac8a394645575528d05" @@ -971,6 +1238,19 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@trivago/prettier-plugin-sort-imports@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-3.3.0.tgz#ee4e9ec1d8e3076b95fcb94311f42f7a61eecd37" + integrity sha512-1y44bVZuIN0RsS3oIiGd5k8Vm3IZXYZnp4VsP2Z/S5L9WAOw43HE2clso66M2S/dDeJ+8sKPqnHsEfh39Vjs3w== + dependencies: + "@babel/core" "7.17.8" + "@babel/generator" "7.17.7" + "@babel/parser" "7.17.8" + "@babel/traverse" "7.17.3" + "@babel/types" "7.17.0" + javascript-natural-sort "0.7.1" + lodash "4.17.21" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -996,6 +1276,13 @@ resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== +"@types/bn.js@*": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + "@types/bn.js@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -1010,7 +1297,14 @@ dependencies: "@types/node" "*" -"@types/chai@4.3.3": +"@types/chai-as-promised@^7.1.3": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" + integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.3": version "4.3.3" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== @@ -1025,12 +1319,17 @@ resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "@types/node@*": version "18.7.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.1.tgz#352bee64f93117d867d05f7406642a52685cbca6" integrity sha512-GKX1Qnqxo4S+Z/+Z8KKPLpH282LD7jLHWJcVryOflnsnH+BtSDfieR6ObwBMwpnNws0bUK8GI7z0unQf9bARNQ== -"@types/node@18.7.18": +"@types/node@^18.7.18": version "18.7.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== @@ -1049,7 +1348,40 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.38.0": +"@types/sinon-chai@^3.2.3": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.13" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.13.tgz#60a7a87a70d9372d0b7b38cc03e825f46981fb83" + integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + +"@types/underscore@*": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@typescript-eslint/eslint-plugin@^5.38.0": version "5.38.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz#ac919a199548861012e8c1fb2ec4899ac2bc22ae" integrity sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ== @@ -1063,7 +1395,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.38.0": +"@typescript-eslint/parser@^5.38.0": version "5.38.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.38.0.tgz#5a59a1ff41a7b43aacd1bb2db54f6bf1c02b2ff8" integrity sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA== @@ -1447,6 +1779,16 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1528,11 +1870,23 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-lite@^1.0.30001400: + version "1.0.30001407" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001407.tgz#92281a6ee67cb90bfd8a6a1201fcc2dc19b60a15" + integrity sha512-4ydV+t4P7X3zH83fQWNDX/mQEzYomossfpViCOx9zHBSMV+rIe3LFqglHHtVyvNl1FhTNxPxs3jei82iqOW04w== + catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + chai@4.3.6: version "4.3.6" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" @@ -1682,6 +2036,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" @@ -1755,7 +2116,12 @@ crypto-js@^3.1.9-1: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +dataloader@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" + integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== + +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1774,6 +2140,13 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" +deep-eql@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.1.tgz#b1154ea8c95012d9f23f37f4eecfd2ee8e5b9323" + integrity sha512-rc6HkZswtl+KMi/IODZ8k7C/P37clC2Rf1HYI11GqdbgvggIyHjsU5MdjlTlaP6eu24c0sR3mcW2SqsVZ1sXUw== + dependencies: + type-detect "^4.0.0" + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1813,6 +2186,11 @@ dotenv@16.0.2: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== +electron-to-chromium@^1.4.251: + version "1.4.255" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.255.tgz#dc52d1095b876ed8acf25865db10265b02b1d6e1" + integrity sha512-H+mFNKow6gi2P5Gi2d1Fvd3TUEJlB9CF7zYaIV9T83BE3wP1xZ0mRPbNTm0KUjyd1QiVy7iKXuIcjlDtBQMiAQ== + elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -1875,12 +2253,12 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -eslint-config-prettier@8.5.0: +eslint-config-prettier@^8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== -eslint-plugin-prettier@4.2.1: +eslint-plugin-prettier@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== @@ -2391,6 +2769,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2448,7 +2831,7 @@ glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.7.0: +globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -2776,6 +3159,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +javascript-natural-sort@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== + js-sdsl@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" @@ -2806,6 +3194,11 @@ js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2821,6 +3214,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -2908,7 +3306,7 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3130,6 +3528,11 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -3191,6 +3594,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3307,6 +3715,11 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -3528,6 +3941,11 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3656,7 +4074,7 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solhint-plugin-prettier@0.0.5: +solhint-plugin-prettier@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b" integrity sha512-7jmWcnVshIrO2FFinIvDQmhQpfpS2rRRn3RejiYgnjIE68xO2bvrYvjqVNfrio4xH9ghOqn83tKuTzLjEbmGIA== @@ -3698,6 +4116,11 @@ source-map-support@^0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -3839,6 +4262,11 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -3956,6 +4384,14 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +update-browserslist-db@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" + integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" From fbeb3ffb445397e0d2607416e045483c7ffaacf5 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 17:13:54 +0200 Subject: [PATCH 04/31] Update upgrade test --- test/upgrades/mocks/aave-v2.json | 70 ++++---------------------------- test/upgrades/stEth.spec.ts | 42 +++++++++++++++++-- 2 files changed, 45 insertions(+), 67 deletions(-) diff --git a/test/upgrades/mocks/aave-v2.json b/test/upgrades/mocks/aave-v2.json index 18e377668..0a60c506b 100644 --- a/test/upgrades/mocks/aave-v2.json +++ b/test/upgrades/mocks/aave-v2.json @@ -1556,15 +1556,7 @@ "poolBorrow": "1026328768739238775490686926", "p2pSupply": "1005235675644569488523606037", "p2pBorrow": "1005725804133153224630663681" - }, - "updatedIndexes": { - "poolSupply": "1015080158227754631363360587", - "poolBorrow": "1026328768739238775490686926", - "p2pSupply": "1005235675644569488523606037", - "p2pBorrow": "1005725804133153224630663681" - }, - "collateralFactor": "8500", - "liquidationBonus": "10500" + } }, "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "price": "761250653114884", @@ -1573,15 +1565,7 @@ "poolBorrow": "1140934475598407843714959281", "p2pSupply": "1001438237681221717953400286", "p2pBorrow": "1001438237681221717953400286" - }, - "updatedIndexes": { - "poolSupply": "1092896405915821311811953630", - "poolBorrow": "1140934475598407843714959281", - "p2pSupply": "1001438237681221717953400286", - "p2pBorrow": "1001438237681221717953400286" - }, - "collateralFactor": "0", - "liquidationBonus": "0" + } }, "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { "price": "14258745220000000000", @@ -1590,15 +1574,7 @@ "poolBorrow": "1012643898635247363683993928", "p2pSupply": "1000456170092775256196488452", "p2pBorrow": "1000456170092775256196488452" - }, - "updatedIndexes": { - "poolSupply": "1002563380287150885073789902", - "poolBorrow": "1012643898635247363683993928", - "p2pSupply": "1000456170092775256196488452", - "p2pBorrow": "1000456170092775256196488452" - }, - "collateralFactor": "8000", - "liquidationBonus": "10500" + } }, "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { "price": "697822550000000", @@ -1607,15 +1583,7 @@ "poolBorrow": "1320695244400562822905641381", "p2pSupply": "1003606450586825664422208148", "p2pBorrow": "1003606450586825664422208148" - }, - "updatedIndexes": { - "poolSupply": "1138135528379349843962432318", - "poolBorrow": "1320695244400562822905641381", - "p2pSupply": "1003606450586825664422208148", - "p2pBorrow": "1003606450586825664422208148" - }, - "collateralFactor": "6100", - "liquidationBonus": "10800" + } }, "0xbcca60bb61934080951369a648fb03df4f96263c": { "price": "762390000000000", @@ -1624,15 +1592,7 @@ "poolBorrow": "1112226122831647281818865032", "p2pSupply": "1000625325932736342228348087", "p2pBorrow": "1000625325932736342228348087" - }, - "updatedIndexes": { - "poolSupply": "1077604126712127622100583092", - "poolBorrow": "1112226122831647281818865032", - "p2pSupply": "1000625325932736342228348087", - "p2pBorrow": "1000625325932736342228348087" - }, - "collateralFactor": "8800", - "liquidationBonus": "10450" + } }, "0x1982b2f5814301d4e9a8b0201555376e62f82428": { "price": "991732394702174600", @@ -1641,15 +1601,7 @@ "poolBorrow": "1000000000000000000000000000", "p2pSupply": "1000000000000000000000000000", "p2pBorrow": "1000000000000000000000000000" - }, - "updatedIndexes": { - "poolSupply": "1000010923895744435070620640", - "poolBorrow": "1000000000000000000000000000", - "p2pSupply": "1000000000000000000000000000", - "p2pBorrow": "1000000000000000000000000000" - }, - "collateralFactor": "8100", - "liquidationBonus": "10750" + } }, "0x028171bca77440897b824ca71d1c56cac55b68a3": { "price": "762577880000000", @@ -1658,15 +1610,7 @@ "poolBorrow": "1121670248361132030914020813", "p2pSupply": "1001313522996424073374879766", "p2pBorrow": "1001313522996424073374879766" - }, - "updatedIndexes": { - "poolSupply": "1075879881433764278089277855", - "poolBorrow": "1121670248361132030914020813", - "p2pSupply": "1001313522996424073374879766", - "p2pBorrow": "1001313522996424073374879766" - }, - "collateralFactor": "9000", - "liquidationBonus": "10400" + } } } } diff --git a/test/upgrades/stEth.spec.ts b/test/upgrades/stEth.spec.ts index b11289aca..9925998aa 100644 --- a/test/upgrades/stEth.spec.ts +++ b/test/upgrades/stEth.spec.ts @@ -7,7 +7,40 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import "../../hardhat.config"; import WadRayMath from "./maths/WadRayMath"; -import { data, markets } from "./mocks/aave-v2.json"; +import mock from "./mocks/aave-v2.json"; + +interface UserMarketBalance { + onPool: string; + inP2P: string; + since: { + blockNumber: number; + transactionIndex: number; + }; +} + +const data: { + users: { + [user: string]: { + positions: { + [market: string]: { + supply?: UserMarketBalance; + borrow?: UserMarketBalance; + }; + }; + }; + }; +} = mock.data; +const markets: { + [market: string]: { + price: string; + indexes: { + poolSupply: string; + p2pSupply: string; + poolBorrow: string; + p2pBorrow: string; + }; + }; +} = mock.markets; const market = "0x1982b2F5814301d4e9a8b0201555376e62F82428".toLowerCase(); @@ -38,7 +71,8 @@ describe("Check ugprade", () => { loadFixture(deployUpgrade); for (const [user, userBalances] of Object.entries(data.users)) { - if (!userBalances.positions[market]) continue; + const userMarketBalances = userBalances.positions[market]; + if (!userMarketBalances || !userMarketBalances.supply || !userMarketBalances.borrow) continue; console.log("Impersonating", user); await hre.network.provider.request({ @@ -50,8 +84,8 @@ describe("Check ugprade", () => { params: [user], }); - const amount = WadRayMath.rayMul(userBalances.positions[market].supply.onPool, markets[market].indexes.poolSupply).add( - WadRayMath.rayMul(userBalances.positions[market].supply.inP2P, markets[market].indexes.p2pSupply) + const amount = WadRayMath.rayMul(userMarketBalances.supply.onPool, markets[market].indexes.poolSupply).add( + WadRayMath.rayMul(userMarketBalances.supply.inP2P, markets[market].indexes.p2pSupply) ); if (amount.eq(0)) continue; From cbf77e0b58a94a84991e28739d2b4962800ff87e Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 17:17:15 +0200 Subject: [PATCH 05/31] Added hardhat CI --- .github/workflows/ci-hardhat-common.yml | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/ci-hardhat-common.yml diff --git a/.github/workflows/ci-hardhat-common.yml b/.github/workflows/ci-hardhat-common.yml new file mode 100644 index 000000000..eb2f26a7b --- /dev/null +++ b/.github/workflows/ci-hardhat-common.yml @@ -0,0 +1,41 @@ +name: Hardhat tests (Common contracts) + +on: + push: + branches: + - main + - dev + pull_request: + paths: + - lib/** + - contracts/common/** + - test/** + - "*.lock" + - Makefile + - foundry.toml + - remappings.txt + - .github/workflows/ci-hardhat-common.yml + paths-ignore: + - test/upgrades/** + +jobs: + morpho-compound-eth-mainnet: + name: eth-mainnet + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: yarn + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run tests + run: yarn test + env: + ALCHEMY_KEY: ${{ secrets.alchemyKey }} From 33b823e0ed9cb7a225b31e1069c61a94f496d05f Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 20 Sep 2022 18:42:16 +0200 Subject: [PATCH 06/31] Revert formatting --- contracts/aave-v2/ExitPositionsManager.sol | 16 ++--- contracts/aave-v2/InterestRatesManager.sol | 12 ++-- contracts/aave-v2/MatchingEngine.sol | 4 +- contracts/aave-v2/MorphoUtils.sol | 4 +- contracts/aave-v2/lens/IndexesLens.sol | 42 ++++++------- contracts/aave-v2/lens/Lens.sol | 8 +-- contracts/aave-v2/lens/MarketsLens.sol | 4 +- contracts/aave-v2/lens/RatesLens.sol | 22 +++---- contracts/aave-v2/lens/UsersLens.sol | 11 ++-- contracts/aave-v3/ExitPositionsManager.sol | 15 +++-- contracts/aave-v3/InterestRatesManager.sol | 12 ++-- contracts/aave-v3/Lens.sol | 54 ++++++++-------- contracts/aave-v3/MatchingEngine.sol | 4 +- contracts/aave-v3/MorphoUtils.sol | 4 +- contracts/aave-v3/RewardsManager.sol | 16 ++--- contracts/compound/lens/IndexesLens.sol | 42 ++++++------- contracts/compound/lens/RatesLens.sol | 24 ++++--- contracts/compound/lens/RewardsLens.sol | 4 +- package.json | 2 +- test-foundry/aave-v2/TestGovernance.t.sol | 4 +- test-foundry/aave-v2/TestLens.t.sol | 62 +++++++++---------- test-foundry/aave-v2/TestLiquidate.t.sol | 15 ++--- test-foundry/aave-v2/TestRatesLens.t.sol | 12 ++-- test-foundry/aave-v2/TestRepay.t.sol | 18 +++--- test-foundry/aave-v2/TestWithdraw.t.sol | 14 ++--- test-foundry/aave-v3/TestGovernance.t.sol | 4 +- test-foundry/aave-v3/TestLens.t.sol | 28 ++++----- test-foundry/aave-v3/TestLiquidate.t.sol | 15 ++--- test-foundry/aave-v3/TestRepay.t.sol | 18 +++--- test-foundry/aave-v3/TestRewards.t.sol | 4 +- test-foundry/aave-v3/TestWithdraw.t.sol | 14 ++--- test-foundry/compound/TestBorrow.t.sol | 3 +- test-foundry/compound/TestEth.t.sol | 12 ++-- test-foundry/compound/TestGovernance.t.sol | 2 +- test-foundry/compound/TestLens.t.sol | 34 +++++----- test-foundry/compound/TestLiquidate.t.sol | 18 +++--- test-foundry/compound/TestRatesLens.t.sol | 12 ++-- test-foundry/compound/TestRepay.t.sol | 4 +- test-foundry/compound/TestWithdraw.t.sol | 7 +-- test-foundry/prod/aave-v2/TestBorrow.t.sol | 8 +-- test-foundry/prod/aave-v2/TestRepay.t.sol | 10 +-- test-foundry/prod/aave-v2/TestSupply.t.sol | 8 +-- test-foundry/prod/aave-v2/TestWithdraw.t.sol | 2 +- test-foundry/prod/compound/TestBorrow.t.sol | 2 +- test-foundry/prod/compound/TestRepay.t.sol | 4 +- test-foundry/prod/compound/TestSupply.t.sol | 2 +- test-foundry/prod/compound/TestWithdraw.t.sol | 2 +- yarn.lock | 39 +++++++----- 48 files changed, 339 insertions(+), 338 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index dfa2d27c4..7520c0b3e 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -241,11 +241,11 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { { ILendingPool poolMem = pool; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem - .getConfiguration(tokenCollateralAddress) - .getParamsMemory(); + .getConfiguration(tokenCollateralAddress) + .getParamsMemory(); (, , , vars.borrowedReserveDecimals, ) = poolMem - .getConfiguration(tokenBorrowedAddress) - .getParamsMemory(); + .getConfiguration(tokenBorrowedAddress) + .getParamsMemory(); } unchecked { @@ -257,16 +257,16 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { uint256 collateralPrice = oracle.getAssetPrice(tokenCollateralAddress); uint256 amountToSeize = ((amountToLiquidate * borrowedTokenPrice * - vars.collateralTokenUnit) / (vars.borrowedTokenUnit * collateralPrice)).percentMul( - vars.liquidationBonus - ); + vars.collateralTokenUnit) / (vars.borrowedTokenUnit * collateralPrice)) + .percentMul(vars.liquidationBonus); uint256 collateralBalance = _getUserSupplyBalanceInOf(_poolTokenCollateral, _borrower); if (amountToSeize > collateralBalance) { amountToSeize = collateralBalance; amountToLiquidate = ((collateralBalance * collateralPrice * vars.borrowedTokenUnit) / - (borrowedTokenPrice * vars.collateralTokenUnit)).percentDiv(vars.liquidationBonus); + (borrowedTokenPrice * vars.collateralTokenUnit)) + .percentDiv(vars.liquidationBonus); } _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, amountToLiquidate, 0); diff --git a/contracts/aave-v2/InterestRatesManager.sol b/contracts/aave-v2/InterestRatesManager.sol index 58f21c726..6ec2cc602 100644 --- a/contracts/aave-v2/InterestRatesManager.sol +++ b/contracts/aave-v2/InterestRatesManager.sol @@ -163,9 +163,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -182,9 +182,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v2/MatchingEngine.sol b/contracts/aave-v2/MatchingEngine.sol index e25131bc4..244c46ada 100644 --- a/contracts/aave-v2/MatchingEngine.sol +++ b/contracts/aave-v2/MatchingEngine.sol @@ -339,8 +339,8 @@ abstract contract MatchingEngine is MorphoUtils { if (formerValueOnPool != onPool && address(rewardsManager) != address(0)) { address variableDebtTokenAddress = pool - .getReserveData(market[_poolToken].underlyingToken) - .variableDebtTokenAddress; + .getReserveData(market[_poolToken].underlyingToken) + .variableDebtTokenAddress; rewardsManager.updateUserAssetAndAccruedRewards( aaveIncentivesController, _user, diff --git a/contracts/aave-v2/MorphoUtils.sol b/contracts/aave-v2/MorphoUtils.sol index f20c7851a..1a730d019 100644 --- a/contracts/aave-v2/MorphoUtils.sol +++ b/contracts/aave-v2/MorphoUtils.sol @@ -277,8 +277,8 @@ abstract contract MorphoUtils is MorphoStorage { if (vars.poolToken != _poolToken) _updateIndexes(vars.poolToken); (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, ) = pool - .getConfiguration(vars.underlyingToken) - .getParamsMemory(); + .getConfiguration(vars.underlyingToken) + .getParamsMemory(); unchecked { assetData.tokenUnit = 10**assetData.decimals; diff --git a/contracts/aave-v2/lens/IndexesLens.sol b/contracts/aave-v2/lens/IndexesLens.sol index 4d86f352a..0436bd3e2 100644 --- a/contracts/aave-v2/lens/IndexesLens.sol +++ b/contracts/aave-v2/lens/IndexesLens.sol @@ -86,13 +86,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); p2pSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PIndexComputeParams({ @@ -139,13 +139,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); currentP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PIndexComputeParams({ @@ -182,13 +182,13 @@ abstract contract IndexesLens is LensStorage { (poolSupplyIndex, poolBorrowIndex) = _getPoolIndexes(market.underlyingToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - poolSupplyIndex, - poolBorrowIndex, - lastPoolIndexes, - market.p2pIndexCursor, - market.reserveFactor - ); + .computeGrowthFactors( + poolSupplyIndex, + poolBorrowIndex, + lastPoolIndexes, + market.p2pIndexCursor, + market.reserveFactor + ); currentP2PBorrowIndex = InterestRatesModel.computeP2PBorrowIndex( InterestRatesModel.P2PIndexComputeParams({ diff --git a/contracts/aave-v2/lens/Lens.sol b/contracts/aave-v2/lens/Lens.sol index 41fbde113..9c22fcf93 100644 --- a/contracts/aave-v2/lens/Lens.sol +++ b/contracts/aave-v2/lens/Lens.sol @@ -47,8 +47,8 @@ contract Lens is MarketsLens { uint256 underlyingPrice = oracle.getAssetPrice(underlyingToken); (, , , uint256 reserveDecimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); uint256 tokenUnit = 10**reserveDecimals; p2pSupplyAmount += (marketP2PSupplyAmount * underlyingPrice) / tokenUnit; @@ -90,8 +90,8 @@ contract Lens is MarketsLens { uint256 underlyingPrice = oracle.getAssetPrice(underlyingToken); (, , , uint256 reserveDecimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); uint256 tokenUnit = 10**reserveDecimals; p2pBorrowAmount += (marketP2PBorrowAmount * underlyingPrice) / tokenUnit; diff --git a/contracts/aave-v2/lens/MarketsLens.sol b/contracts/aave-v2/lens/MarketsLens.sol index 9bcf9f5ec..c2705c88b 100644 --- a/contracts/aave-v2/lens/MarketsLens.sol +++ b/contracts/aave-v2/lens/MarketsLens.sol @@ -157,8 +157,8 @@ abstract contract MarketsLens is RatesLens { p2pIndexCursor = market.p2pIndexCursor; (loanToValue, liquidationThreshold, liquidationBonus, decimals, ) = pool - .getConfiguration(underlying) - .getParamsMemory(); + .getConfiguration(underlying) + .getParamsMemory(); } /// PUBLIC /// diff --git a/contracts/aave-v2/lens/RatesLens.sol b/contracts/aave-v2/lens/RatesLens.sol index 5e6669fd3..f33a7634b 100644 --- a/contracts/aave-v2/lens/RatesLens.sol +++ b/contracts/aave-v2/lens/RatesLens.sol @@ -73,11 +73,10 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !market.isP2PDisabled) { uint256 firstPoolBorrowerBalance = morpho - .borrowBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) - ) - .onPool; + .borrowBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) + ).onPool; if (firstPoolBorrowerBalance > 0) { uint256 matchedP2P = Math.min( @@ -154,11 +153,10 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !market.isP2PDisabled) { uint256 firstPoolSupplierBalance = morpho - .supplyBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) - ) - .onPool; + .supplyBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) + ).onPool; if (firstPoolSupplierBalance > 0) { uint256 matchedP2P = Math.min( @@ -436,8 +434,8 @@ abstract contract RatesLens is UsersLens { delta.p2pBorrowAmount.rayMul(_p2pBorrowIndex) - delta.p2pBorrowDelta.rayMul(_poolBorrowIndex); poolBorrowAmount = IVariableDebtToken(reserve.variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)) - .rayMul(_poolBorrowIndex); + .scaledBalanceOf(address(morpho)) + .rayMul(_poolBorrowIndex); } /// @dev Returns the supply rate per year experienced on a market based on a given position distribution. diff --git a/contracts/aave-v2/lens/UsersLens.sol b/contracts/aave-v2/lens/UsersLens.sol index b56d1a51d..77d6322a4 100644 --- a/contracts/aave-v2/lens/UsersLens.sol +++ b/contracts/aave-v2/lens/UsersLens.sol @@ -128,8 +128,8 @@ abstract contract UsersLens is IndexesLens { ); (, , uint256 liquidationBonus, uint256 collateralReserveDecimals, ) = pool - .getConfiguration(collateralToken) - .getParamsMemory(); + .getConfiguration(collateralToken) + .getParamsMemory(); IPriceOracleGetter oracle = IPriceOracleGetter(addressesProvider.getPriceOracle()); uint256 borrowedPrice = oracle.getAssetPrice(borrowedToken); @@ -138,7 +138,8 @@ abstract contract UsersLens is IndexesLens { return Math.min( ((totalCollateralBalance * collateralPrice * 10**ERC20(borrowedToken).decimals()) / - (borrowedPrice * 10**collateralReserveDecimals)).percentDiv(liquidationBonus), + (borrowedPrice * 10**collateralReserveDecimals)) + .percentDiv(liquidationBonus), totalBorrowBalance.percentMul(DEFAULT_LIQUIDATION_CLOSE_FACTOR) ); } @@ -273,8 +274,8 @@ abstract contract UsersLens is IndexesLens { assetData.underlyingPrice = _oracle.getAssetPrice(underlyingToken); // In ETH. (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, ) = pool - .getConfiguration(underlyingToken) - .getParamsMemory(); + .getConfiguration(underlyingToken) + .getParamsMemory(); (, , uint256 totalCollateralBalance) = _getSupplyBalanceInOf( _poolToken, diff --git a/contracts/aave-v3/ExitPositionsManager.sol b/contracts/aave-v3/ExitPositionsManager.sol index a5339b9b5..0b78bd29c 100644 --- a/contracts/aave-v3/ExitPositionsManager.sol +++ b/contracts/aave-v3/ExitPositionsManager.sol @@ -243,11 +243,11 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { IPool poolMem = pool; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = poolMem - .getConfiguration(collateralMarket.underlyingToken) - .getParams(); + .getConfiguration(collateralMarket.underlyingToken) + .getParams(); (, , , vars.borrowedReserveDecimals, , ) = poolMem - .getConfiguration(borrowedMarket.underlyingToken) - .getParams(); + .getConfiguration(borrowedMarket.underlyingToken) + .getParams(); unchecked { vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -258,9 +258,8 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { vars.collateralPrice = oracle.getAssetPrice(collateralMarket.underlyingToken); vars.amountToSeize = ((vars.amountToLiquidate * vars.borrowedTokenPrice * - vars.collateralTokenUnit) / (vars.borrowedTokenUnit * vars.collateralPrice)).percentMul( - vars.liquidationBonus - ); + vars.collateralTokenUnit) / (vars.borrowedTokenUnit * vars.collateralPrice)) + .percentMul(vars.liquidationBonus); vars.collateralBalance = _getUserSupplyBalanceInOf(_poolTokenCollateral, _borrower); @@ -269,7 +268,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { vars.amountToLiquidate = ((vars.collateralBalance * vars.collateralPrice * vars.borrowedTokenUnit) / (vars.borrowedTokenPrice * vars.collateralTokenUnit)) - .percentDiv(vars.liquidationBonus); + .percentDiv(vars.liquidationBonus); } _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, vars.amountToLiquidate, 0); diff --git a/contracts/aave-v3/InterestRatesManager.sol b/contracts/aave-v3/InterestRatesManager.sol index 109d5152d..4b070649a 100644 --- a/contracts/aave-v3/InterestRatesManager.sol +++ b/contracts/aave-v3/InterestRatesManager.sol @@ -141,9 +141,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -160,9 +160,9 @@ contract InterestRatesManager is IInterestRatesManager, MorphoStorage { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v3/Lens.sol b/contracts/aave-v3/Lens.sol index cc1d978a9..f403cced9 100644 --- a/contracts/aave-v3/Lens.sol +++ b/contracts/aave-v3/Lens.sol @@ -148,8 +148,8 @@ contract Lens { assetData.underlyingPrice = _oracle.getAssetPrice(underlyingToken); // In base currency in wad. (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, , ) = pool - .getConfiguration(underlyingToken) - .getParams(); + .getConfiguration(underlyingToken) + .getParams(); assetData.tokenUnit = 10**assetData.decimals; assetData.debt = @@ -204,11 +204,11 @@ contract Lens { (_withdrawnAmount * assetData.underlyingPrice) / assetData.tokenUnit; liquidityData.maxDebt -= ((_withdrawnAmount * assetData.underlyingPrice) / - assetData.tokenUnit).percentMul(assetData.ltv); + assetData.tokenUnit) + .percentMul(assetData.ltv); liquidityData.liquidationThreshold -= ((_withdrawnAmount * - assetData.underlyingPrice) / assetData.tokenUnit).percentMul( - assetData.liquidationThreshold - ); + assetData.underlyingPrice) / assetData.tokenUnit) + .percentMul(assetData.liquidationThreshold); } } } @@ -431,13 +431,13 @@ contract Lens { uint256 p2pBorrowGrowthFactor, uint256 poolBorrowGrowthFactor ) = _computeGrowthFactors( - _params.poolSupplyIndex, - _params.poolBorrowIndex, - _params.lastPoolSupplyIndex, - _params.lastPoolBorrowIndex, - _params.reserveFactor, - _params.p2pIndexCursor - ); + _params.poolSupplyIndex, + _params.poolBorrowIndex, + _params.lastPoolSupplyIndex, + _params.lastPoolBorrowIndex, + _params.reserveFactor, + _params.p2pIndexCursor + ); // Compute new peer-to-peer supply index. @@ -446,11 +446,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - (_params.delta.p2pSupplyAmount.wadToRay()).rayMul( - _params.lastP2PSupplyIndex - ) - ), + .rayDiv( + (_params.delta.p2pSupplyAmount.wadToRay()).rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); @@ -467,11 +465,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - (_params.delta.p2pBorrowAmount.wadToRay()).rayMul( - _params.lastP2PBorrowIndex - ) - ), + .rayDiv( + (_params.delta.p2pBorrowAmount.wadToRay()).rayMul(_params.lastP2PBorrowIndex) + ), RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); @@ -504,9 +500,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pSupplyDelta.wadToRay().rayMul(_params.lastPoolSupplyIndex)) - .rayDiv( - _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) - ), + .rayDiv( + _params.delta.p2pSupplyAmount.wadToRay().rayMul(_params.lastP2PSupplyIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. @@ -539,9 +535,9 @@ contract Lens { } else { uint256 shareOfTheDelta = Math.min( (_params.delta.p2pBorrowDelta.wadToRay().rayMul(_params.lastPoolBorrowIndex)) - .rayDiv( - _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) - ), + .rayDiv( + _params.delta.p2pBorrowAmount.wadToRay().rayMul(_params.lastP2PBorrowIndex) + ), WadRayMath.RAY // To avoid shareOfTheDelta > 1 with rounding errors. ); // In ray. diff --git a/contracts/aave-v3/MatchingEngine.sol b/contracts/aave-v3/MatchingEngine.sol index a622e268e..bc24cd07f 100644 --- a/contracts/aave-v3/MatchingEngine.sol +++ b/contracts/aave-v3/MatchingEngine.sol @@ -339,8 +339,8 @@ abstract contract MatchingEngine is MorphoUtils { if (formerValueOnPool != onPool && address(rewardsManager) != address(0)) { address variableDebtTokenAddress = pool - .getReserveData(market[_poolToken].underlyingToken) - .variableDebtTokenAddress; + .getReserveData(market[_poolToken].underlyingToken) + .variableDebtTokenAddress; rewardsManager.updateUserAssetAndAccruedRewards( rewardsController, _user, diff --git a/contracts/aave-v3/MorphoUtils.sol b/contracts/aave-v3/MorphoUtils.sol index c5b987f31..d2162c5ae 100644 --- a/contracts/aave-v3/MorphoUtils.sol +++ b/contracts/aave-v3/MorphoUtils.sol @@ -275,8 +275,8 @@ abstract contract MorphoUtils is MorphoStorage { if (vars.poolToken != _poolToken) _updateIndexes(vars.poolToken); (assetData.ltv, assetData.liquidationThreshold, , assetData.decimals, , ) = pool - .getConfiguration(vars.underlyingToken) - .getParams(); + .getConfiguration(vars.underlyingToken) + .getParams(); // LTV should be zero if Morpho has not enabled this asset as collateral if (!morphoUserConfig.isUsingAsCollateral(pool.getReserveData(vars.underlyingToken).id)) diff --git a/contracts/aave-v3/RewardsManager.sol b/contracts/aave-v3/RewardsManager.sol index de6ea52f4..3e99cfe91 100644 --- a/contracts/aave-v3/RewardsManager.sol +++ b/contracts/aave-v3/RewardsManager.sol @@ -112,8 +112,8 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { for (uint256 j; j < rewardsList.length; ) { uint256 rewardAmount = localAssetData[asset][rewardsList[j]] - .usersData[_user] - .accrued; + .usersData[_user] + .accrued; if (rewardAmount != 0) { claimedAmounts[j] += rewardAmount; @@ -187,8 +187,8 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { for (uint256 i; i < userAssetBalances.length; ) { for (uint256 j; j < rewardsListLength; ) { unclaimedAmounts[j] += localAssetData[userAssetBalances[i].asset][rewardsList[j]] - .usersData[_user] - .accrued; + .usersData[_user] + .accrued; if (userAssetBalances[i].balance == 0) continue; @@ -515,12 +515,12 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { if (asset == reserve.aTokenAddress) userAssetBalances[i].balance = morpho - .supplyBalanceInOf(reserve.aTokenAddress, _user) - .onPool; + .supplyBalanceInOf(reserve.aTokenAddress, _user) + .onPool; else if (asset == reserve.variableDebtTokenAddress) userAssetBalances[i].balance = morpho - .borrowBalanceInOf(reserve.aTokenAddress, _user) - .onPool; + .borrowBalanceInOf(reserve.aTokenAddress, _user) + .onPool; else revert InvalidAsset(); userAssetBalances[i].totalSupply = IScaledBalanceToken(asset).scaledTotalSupply(); diff --git a/contracts/compound/lens/IndexesLens.sol b/contracts/compound/lens/IndexesLens.sol index 5f9bf38f8..547ea8740 100644 --- a/contracts/compound/lens/IndexesLens.sol +++ b/contracts/compound/lens/IndexesLens.sol @@ -71,13 +71,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - newPoolSupplyIndex, - newPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + newPoolSupplyIndex, + newPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); newP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PSupplyIndexComputeParams({ @@ -169,13 +169,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - currentPoolSupplyIndex, - currentPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + currentPoolSupplyIndex, + currentPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); currentP2PSupplyIndex = InterestRatesModel.computeP2PSupplyIndex( InterestRatesModel.P2PSupplyIndexComputeParams({ @@ -214,13 +214,13 @@ abstract contract IndexesLens is LensStorage { Types.MarketParameters memory marketParams = morpho.marketParameters(_poolToken); InterestRatesModel.GrowthFactors memory growthFactors = InterestRatesModel - .computeGrowthFactors( - currentPoolSupplyIndex, - currentPoolBorrowIndex, - lastPoolIndexes, - marketParams.p2pIndexCursor, - marketParams.reserveFactor - ); + .computeGrowthFactors( + currentPoolSupplyIndex, + currentPoolBorrowIndex, + lastPoolIndexes, + marketParams.p2pIndexCursor, + marketParams.reserveFactor + ); currentP2PBorrowIndex = InterestRatesModel.computeP2PBorrowIndex( InterestRatesModel.P2PBorrowIndexComputeParams({ diff --git a/contracts/compound/lens/RatesLens.sol b/contracts/compound/lens/RatesLens.sol index 2338196ad..984fad6ae 100644 --- a/contracts/compound/lens/RatesLens.sol +++ b/contracts/compound/lens/RatesLens.sol @@ -67,11 +67,10 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !morpho.p2pDisabled(_poolToken)) { uint256 firstPoolBorrowerBalance = morpho - .borrowBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) - ) - .onPool; + .borrowBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.BORROWERS_ON_POOL) + ).onPool; if (firstPoolBorrowerBalance > 0) { uint256 borrowerBalanceInUnderlying = firstPoolBorrowerBalance.mul( @@ -144,11 +143,10 @@ abstract contract RatesLens is UsersLens { if (_amount > 0 && !morpho.p2pDisabled(_poolToken)) { uint256 firstPoolSupplierBalance = morpho - .supplyBalanceInOf( - _poolToken, - morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) - ) - .onPool; + .supplyBalanceInOf( + _poolToken, + morpho.getHead(_poolToken, Types.PositionType.SUPPLIERS_ON_POOL) + ).onPool; if (firstPoolSupplierBalance > 0) { uint256 supplierBalanceInUnderlying = firstPoolSupplierBalance.mul( @@ -416,9 +414,9 @@ abstract contract RatesLens is UsersLens { delta.p2pBorrowAmount.mul(_p2pBorrowIndex) - delta.p2pBorrowDelta.mul(_poolBorrowIndex); poolBorrowAmount = ICToken(_poolToken) - .borrowBalanceStored(address(morpho)) - .div(ICToken(_poolToken).borrowIndex()) - .mul(_poolBorrowIndex); + .borrowBalanceStored(address(morpho)) + .div(ICToken(_poolToken).borrowIndex()) + .mul(_poolBorrowIndex); } /// @dev Returns the supply rate per block experienced on a market based on a given position distribution. diff --git a/contracts/compound/lens/RewardsLens.sol b/contracts/compound/lens/RewardsLens.sol index f0d867773..d6443460f 100644 --- a/contracts/compound/lens/RewardsLens.sol +++ b/contracts/compound/lens/RewardsLens.sol @@ -91,7 +91,7 @@ abstract contract RewardsLens is MarketsLens { /// @return The updated COMP supply index. function getCurrentCompSupplyIndex(address _poolToken) public view returns (uint256) { IComptroller.CompMarketState memory localSupplyState = rewardsManager - .getLocalCompSupplyState(_poolToken); + .getLocalCompSupplyState(_poolToken); if (localSupplyState.block == block.number) return localSupplyState.index; else { @@ -119,7 +119,7 @@ abstract contract RewardsLens is MarketsLens { /// @return The updated COMP borrow index. function getCurrentCompBorrowIndex(address _poolToken) public view returns (uint256) { IComptroller.CompMarketState memory localBorrowState = rewardsManager - .getLocalCompBorrowState(_poolToken); + .getLocalCompBorrowState(_poolToken); if (localBorrowState.block == block.number) return localBorrowState.index; else { diff --git a/package.json b/package.json index a0bb1e1ec..e9d85433e 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "husky": "^8.0.1", "merkletreejs": "^0.2.32", "prettier": "^2.7.1", - "prettier-plugin-solidity": "^1.0.0-beta.24", + "prettier-plugin-solidity": "1.0.0-beta.13", "solhint": "^3.3.7", "solhint-plugin-prettier": "^0.0.5", "ts-node": "^10.9.1", diff --git a/test-foundry/aave-v2/TestGovernance.t.sol b/test-foundry/aave-v2/TestGovernance.t.sol index 689f211b2..5ec2dd13a 100644 --- a/test-foundry/aave-v2/TestGovernance.t.sol +++ b/test-foundry/aave-v2/TestGovernance.t.sol @@ -15,7 +15,7 @@ contract TestGovernance is TestSetup { assertEq(morpho.maxSortedUsers(), 20); (uint256 supply, uint256 borrow, uint256 withdraw, uint256 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, 3e6); assertEq(borrow, 3e6); assertEq(withdraw, 3e6); @@ -94,7 +94,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/aave-v2/TestLens.t.sol b/test-foundry/aave-v2/TestLens.t.sol index 7d1bb7dba..1decd8bc7 100644 --- a/test-foundry/aave-v2/TestLens.t.sol +++ b/test-foundry/aave-v2/TestLens.t.sol @@ -31,8 +31,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; @@ -58,8 +58,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -87,8 +87,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -127,8 +127,8 @@ contract TestLens is TestSetup { uint256 decimalsUsdc; (expectedDataUsdc.ltv, expectedDataUsdc.liquidationThreshold, , decimalsUsdc, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); expectedDataUsdc.underlyingPrice = oracle.getAssetPrice(usdc); expectedDataUsdc.tokenUnit = 10**decimalsUsdc; expectedDataUsdc.debt = @@ -154,8 +154,8 @@ contract TestLens is TestSetup { uint256 decimalsDai; (expectedDataDai.ltv, expectedDataDai.liquidationThreshold, , decimalsDai, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); expectedDataDai.underlyingPrice = oracle.getAssetPrice(dai); expectedDataDai.tokenUnit = 10**decimalsDai; expectedDataDai.collateral = @@ -232,21 +232,21 @@ contract TestLens is TestSetup { borrower1.supply(aAave, amount); (uint256 withdrawableAaveBefore, uint256 borrowableAaveBefore) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aAave); + .getUserMaxCapacitiesForAsset(address(borrower1), aAave); (uint256 withdrawableDaiBefore, uint256 borrowableDaiBefore) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aDai); + .getUserMaxCapacitiesForAsset(address(borrower1), aDai); borrower1.borrow(aDai, borrowableDaiBefore / 2); (uint256 withdrawableAaveAfter, uint256 borrowableAaveAfter) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aAave); + .getUserMaxCapacitiesForAsset(address(borrower1), aAave); (uint256 withdrawableDaiAfter, uint256 borrowableDaiAfter) = lens - .getUserMaxCapacitiesForAsset(address(borrower1), aDai); + .getUserMaxCapacitiesForAsset(address(borrower1), aDai); Types.AssetLiquidityData memory aaveAssetData; (aaveAssetData.ltv, aaveAssetData.liquidationThreshold, , , ) = pool - .getConfiguration(aave) - .getParamsMemory(); + .getConfiguration(aave) + .getParamsMemory(); assertEq(withdrawableAaveBefore, amount, "cannot withdraw all AAVE"); assertEq( @@ -282,7 +282,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.inP2P, userSupplyBalance.onPool, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( aDai, @@ -307,7 +307,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.inP2P, userBorrowBalance.onPool, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( aUsdc, @@ -348,7 +348,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.inP2P, userSupplyBalance.onPool, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(aDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( aDai, @@ -372,7 +372,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.inP2P, userBorrowBalance.onPool, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(aUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( aUsdc, @@ -499,8 +499,8 @@ contract TestLens is TestSetup { // DAI data (uint256 ltvDai, uint256 liquidationThresholdDai, , uint256 decimalsDai, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 underlyingPriceDai = oracle.getAssetPrice(dai); uint256 tokenUnitDai = 10**decimalsDai; @@ -545,8 +545,8 @@ contract TestLens is TestSetup { // USDC data (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); uint256 collateralValueToAdd = (to6Decimals(amount) * oracle.getAssetPrice(usdc)) / 10**decimals; expectedStates.collateral += collateralValueToAdd; @@ -734,7 +734,7 @@ contract TestLens is TestSetup { } { (address underlying, , , bool isPaused, bool isPartiallyPaused, , , , , , ) = lens - .getMarketConfiguration(aDai); + .getMarketConfiguration(aDai); assertEq(underlying, dai); Types.Market memory expectedConfig; @@ -1134,8 +1134,8 @@ contract TestLens is TestSetup { uint256 healthFactor = lens.getUserHealthFactor(address(borrower1)); (uint256 ltv, uint256 liquidationThreshold, , , ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); assertEq(healthFactor, uint256(1 ether).percentMul(liquidationThreshold).percentDiv(ltv)); } @@ -1337,9 +1337,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(aDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(aDai); @@ -1425,9 +1425,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(aDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(aDai); diff --git a/test-foundry/aave-v2/TestLiquidate.t.sol b/test-foundry/aave-v2/TestLiquidate.t.sol index 13681798c..11e80115d 100644 --- a/test-foundry/aave-v2/TestLiquidate.t.sol +++ b/test-foundry/aave-v2/TestLiquidate.t.sol @@ -92,8 +92,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(usdc) - .getParamsMemory(); + .getConfiguration(usdc) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(usdc); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -175,8 +175,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -185,7 +185,8 @@ contract TestLiquidate is TestSetup { vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; uint256 amountToSeize = ((toRepay * borrowedPrice * vars.collateralTokenUnit) / - (vars.borrowedTokenUnit * collateralPrice)).percentMul(vars.liquidationBonus); + (vars.borrowedTokenUnit * collateralPrice)) + .percentMul(vars.liquidationBonus); assertApproxEqAbs( onPoolBorrower, @@ -254,8 +255,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool - .getConfiguration(dai) - .getParamsMemory(); + .getConfiguration(dai) + .getParamsMemory(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; diff --git a/test-foundry/aave-v2/TestRatesLens.t.sol b/test-foundry/aave-v2/TestRatesLens.t.sol index f996334f8..669a3ec4c 100644 --- a/test-foundry/aave-v2/TestRatesLens.t.sol +++ b/test-foundry/aave-v2/TestRatesLens.t.sol @@ -839,7 +839,7 @@ contract TestRatesLens is TestSetup { function testAverageSupplyRateShouldEqual0WhenNoSupply() public { (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); assertEq(supplyRatePerYear, 0); assertEq(p2pSupplyAmount, 0); @@ -848,7 +848,7 @@ contract TestRatesLens is TestSetup { function testAverageBorrowRateShouldEqual0WhenNoBorrow() public { (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); assertEq(borrowRatePerYear, 0); assertEq(p2pBorrowAmount, 0); @@ -889,7 +889,7 @@ contract TestRatesLens is TestSetup { supplier1.supply(aDai, amount); (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); DataTypes.ReserveData memory reserve = pool.getReserveData(dai); @@ -906,7 +906,7 @@ contract TestRatesLens is TestSetup { borrower1.borrow(aDai, amount); (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); DataTypes.ReserveData memory reserve = pool.getReserveData(dai); @@ -929,9 +929,9 @@ contract TestRatesLens is TestSetup { borrower1.borrow(aDai, amount); (uint256 supplyRatePerYear, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerYear(aDai); + .getAverageSupplyRatePerYear(aDai); (uint256 borrowRatePerYear, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerYear(aDai); + .getAverageBorrowRatePerYear(aDai); (uint256 p2pSupplyRate, uint256 p2pBorrowRate, , ) = lens.getRatesPerYear(aDai); assertApproxEqAbs(supplyRatePerYear, p2pSupplyRate, 1, "unexpected supply rate"); diff --git a/test-foundry/aave-v2/TestRepay.t.sol b/test-foundry/aave-v2/TestRepay.t.sol index 566167573..08d6111b5 100644 --- a/test-foundry/aave-v2/TestRepay.t.sol +++ b/test-foundry/aave-v2/TestRepay.t.sol @@ -92,7 +92,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(aDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(aDai, address(borrower2)); + .borrowBalanceInOf(aDai, address(borrower2)); uint256 p2pBorrowIndex = morpho.p2pBorrowIndex(aDai); uint256 expectedBorrowBalanceInP2P = underlyingToP2PUnit( (25 * borrowedAmount) / 100, @@ -490,11 +490,11 @@ contract TestRepay is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .SP2PD - .wadToRay() - .rayMul(newVars.NI) - .rayDiv(oldVars.SP2PER) - .rayDiv(newVars.SP2PA.wadToRay()); + .SP2PD + .wadToRay() + .rayMul(newVars.NI) + .rayDiv(oldVars.SP2PER) + .rayDiv(newVars.SP2PA.wadToRay()); uint256 expectedSP2PER = oldVars.SP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul( @@ -510,8 +510,8 @@ contract TestRepay is TestSetup { ); uint256 expectedSupplyBalanceInUnderlying = suppliedAmount - .rayDiv(oldVars.SP2PER) - .rayMul(expectedSP2PER); + .rayDiv(oldVars.SP2PER) + .rayMul(expectedSP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PSupplier, uint256 onPoolSupplier) = morpho.supplyBalanceInOf( @@ -610,7 +610,7 @@ contract TestRepay is TestSetup { borrower1.borrow(aUsdt, amount); uint256 initialDebt = IVariableDebtToken(pool.getReserveData(usdt).variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)); + .scaledBalanceOf(address(morpho)); // Repay on-behalf of Morpho deal(usdt, address(this), amount / 2); diff --git a/test-foundry/aave-v2/TestWithdraw.t.sol b/test-foundry/aave-v2/TestWithdraw.t.sol index 9459fe49b..9d290b577 100644 --- a/test-foundry/aave-v2/TestWithdraw.t.sol +++ b/test-foundry/aave-v2/TestWithdraw.t.sol @@ -502,11 +502,11 @@ contract TestWithdraw is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .BP2PD - .wadToRay() - .rayMul(newVars.NVD) - .rayDiv(oldVars.BP2PER) - .rayDiv(newVars.BP2PA.wadToRay()); + .BP2PD + .wadToRay() + .rayMul(newVars.NVD) + .rayDiv(oldVars.BP2PER) + .rayDiv(newVars.BP2PA.wadToRay()); uint256 expectedBP2PER = oldVars.BP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul(RAY - shareOfTheDelta) + @@ -521,8 +521,8 @@ contract TestWithdraw is TestSetup { ); uint256 expectedBorrowBalanceInUnderlying = borrowedAmount - .rayDiv(oldVars.BP2PER) - .rayMul(expectedBP2PER); + .rayDiv(oldVars.BP2PER) + .rayMul(expectedBP2PER); for (uint256 i = 1; i <= 10; i++) { (uint256 inP2PBorrower, uint256 onPoolBorrower) = morpho.borrowBalanceInOf( diff --git a/test-foundry/aave-v3/TestGovernance.t.sol b/test-foundry/aave-v3/TestGovernance.t.sol index 4a56eb331..1cecc315f 100644 --- a/test-foundry/aave-v3/TestGovernance.t.sol +++ b/test-foundry/aave-v3/TestGovernance.t.sol @@ -15,7 +15,7 @@ contract TestGovernance is TestSetup { assertEq(morpho.maxSortedUsers(), 20); (uint256 supply, uint256 borrow, uint256 withdraw, uint256 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, 3e6); assertEq(borrow, 3e6); assertEq(withdraw, 3e6); @@ -94,7 +94,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/aave-v3/TestLens.t.sol b/test-foundry/aave-v3/TestLens.t.sol index 4c4c1701e..f078ab9c2 100644 --- a/test-foundry/aave-v3/TestLens.t.sol +++ b/test-foundry/aave-v3/TestLens.t.sol @@ -44,8 +44,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; @@ -71,8 +71,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -100,8 +100,8 @@ contract TestLens is TestSetup { ); (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPrice = oracle.getAssetPrice(dai); uint256 tokenUnit = 10**decimals; uint256 collateral = (amount * underlyingPrice) / tokenUnit; @@ -140,8 +140,8 @@ contract TestLens is TestSetup { uint256 decimalsUsdc; (expectedDataUsdc.ltv, expectedDataUsdc.liquidationThreshold, , decimalsUsdc, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); expectedDataUsdc.underlyingPrice = oracle.getAssetPrice(usdc); expectedDataUsdc.tokenUnit = 10**decimalsUsdc; expectedDataUsdc.debt = @@ -167,8 +167,8 @@ contract TestLens is TestSetup { uint256 decimalsDai; (expectedDataDai.ltv, expectedDataDai.liquidationThreshold, , decimalsDai, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); expectedDataDai.underlyingPrice = oracle.getAssetPrice(dai); expectedDataDai.tokenUnit = 10**decimalsDai; expectedDataDai.collateral = @@ -307,8 +307,8 @@ contract TestLens is TestSetup { // DAI data (uint256 ltvDai, uint256 liquidationThresholdDai, , uint256 decimalsDai, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 underlyingPriceDai = oracle.getAssetPrice(dai); uint256 tokenUnitDai = 10**decimalsDai; @@ -353,8 +353,8 @@ contract TestLens is TestSetup { // USDC data (uint256 ltv, uint256 liquidationThreshold, , uint256 decimals, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); uint256 collateralValueToAdd = (to6Decimals(amount) * oracle.getAssetPrice(usdc)) / 10**decimals; expectedStates.collateral += collateralValueToAdd; diff --git a/test-foundry/aave-v3/TestLiquidate.t.sol b/test-foundry/aave-v3/TestLiquidate.t.sol index 4e42e3db0..2bc4ab420 100644 --- a/test-foundry/aave-v3/TestLiquidate.t.sol +++ b/test-foundry/aave-v3/TestLiquidate.t.sol @@ -91,8 +91,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(usdc) - .getParams(); + .getConfiguration(usdc) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(usdc); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -173,8 +173,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -183,7 +183,8 @@ contract TestLiquidate is TestSetup { vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; uint256 amountToSeize = ((toRepay * borrowedPrice * vars.collateralTokenUnit) / - (vars.borrowedTokenUnit * collateralPrice)).percentMul(vars.liquidationBonus); + (vars.borrowedTokenUnit * collateralPrice)) + .percentMul(vars.liquidationBonus); testEqualityLarge( onPoolBorrower, @@ -250,8 +251,8 @@ contract TestLiquidate is TestSetup { ExitPositionsManager.LiquidateVars memory vars; (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool - .getConfiguration(dai) - .getParams(); + .getConfiguration(dai) + .getParams(); uint256 collateralPrice = customOracle.getAssetPrice(dai); vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; diff --git a/test-foundry/aave-v3/TestRepay.t.sol b/test-foundry/aave-v3/TestRepay.t.sol index 99c7b39e0..60e4671ef 100644 --- a/test-foundry/aave-v3/TestRepay.t.sol +++ b/test-foundry/aave-v3/TestRepay.t.sol @@ -92,7 +92,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(aDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(aDai, address(borrower2)); + .borrowBalanceInOf(aDai, address(borrower2)); uint256 p2pBorrowIndex = morpho.p2pBorrowIndex(aDai); uint256 expectedBorrowBalanceInP2P = underlyingToP2PUnit( (25 * borrowedAmount) / 100, @@ -495,11 +495,11 @@ contract TestRepay is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .SP2PD - .wadToRay() - .rayMul(newVars.NI) - .rayDiv(oldVars.SP2PER) - .rayDiv(newVars.SP2PA.wadToRay()); + .SP2PD + .wadToRay() + .rayMul(newVars.NI) + .rayDiv(oldVars.SP2PER) + .rayDiv(newVars.SP2PA.wadToRay()); uint256 expectedSP2PER = oldVars.SP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul( @@ -515,8 +515,8 @@ contract TestRepay is TestSetup { ); uint256 expectedSupplyBalanceInUnderlying = suppliedAmount - .rayDiv(oldVars.SP2PER) - .rayMul(expectedSP2PER); + .rayDiv(oldVars.SP2PER) + .rayMul(expectedSP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PSupplier, uint256 onPoolSupplier) = morpho.supplyBalanceInOf( @@ -620,7 +620,7 @@ contract TestRepay is TestSetup { borrower1.borrow(aUsdt, amount); uint256 initialDebt = IVariableDebtToken(pool.getReserveData(usdt).variableDebtTokenAddress) - .scaledBalanceOf(address(morpho)); + .scaledBalanceOf(address(morpho)); // Repay on-behalf of Morpho deal(usdt, address(this), amount / 2); diff --git a/test-foundry/aave-v3/TestRewards.t.sol b/test-foundry/aave-v3/TestRewards.t.sol index f48227848..f327c02d7 100644 --- a/test-foundry/aave-v3/TestRewards.t.sol +++ b/test-foundry/aave-v3/TestRewards.t.sol @@ -266,7 +266,7 @@ contract TestRewards is TestSetup { assertGt(rewardBalanceAfter, rewardBalanceBefore); uint256 protocolUnclaimedRewards = IRewardsController(rewardsControllerAddress) - .getUserRewards(tokensInArray, address(morpho), rewardToken); + .getUserRewards(tokensInArray, address(morpho), rewardToken); assertEq(protocolUnclaimedRewards, 0); } @@ -341,7 +341,7 @@ contract TestRewards is TestSetup { assertEq(unclaimedRewards3, 0); uint256 protocolUnclaimedRewards = IRewardsController(rewardsControllerAddress) - .getUserRewards(tokensInArray, address(morpho), rewardToken); + .getUserRewards(tokensInArray, address(morpho), rewardToken); assertApproxEqAbs(protocolUnclaimedRewards, 0, 2); } diff --git a/test-foundry/aave-v3/TestWithdraw.t.sol b/test-foundry/aave-v3/TestWithdraw.t.sol index 4883488db..150a3a31c 100644 --- a/test-foundry/aave-v3/TestWithdraw.t.sol +++ b/test-foundry/aave-v3/TestWithdraw.t.sol @@ -509,11 +509,11 @@ contract TestWithdraw is TestSetup { newVars.VBR = pool.getReserveData(dai).currentVariableBorrowRate; uint256 shareOfTheDelta = newVars - .BP2PD - .wadToRay() - .rayMul(newVars.NVD) - .rayDiv(oldVars.BP2PER) - .rayDiv(newVars.BP2PA.wadToRay()); + .BP2PD + .wadToRay() + .rayMul(newVars.NVD) + .rayDiv(oldVars.BP2PER) + .rayDiv(newVars.BP2PA.wadToRay()); uint256 expectedBP2PER = oldVars.BP2PER.rayMul( computeCompoundedInterest(oldVars.APR, 365 days).rayMul(RAY - shareOfTheDelta) + @@ -528,8 +528,8 @@ contract TestWithdraw is TestSetup { ); uint256 expectedBorrowBalanceInUnderlying = borrowedAmount - .rayDiv(oldVars.BP2PER) - .rayMul(expectedBP2PER); + .rayDiv(oldVars.BP2PER) + .rayMul(expectedBP2PER); for (uint256 i = 10; i < 20; i++) { (uint256 inP2PBorrower, uint256 onPoolBorrower) = morpho.borrowBalanceInOf( diff --git a/test-foundry/compound/TestBorrow.t.sol b/test-foundry/compound/TestBorrow.t.sol index 02f96b886..5f5ec274b 100644 --- a/test-foundry/compound/TestBorrow.t.sol +++ b/test-foundry/compound/TestBorrow.t.sol @@ -89,7 +89,8 @@ contract TestBorrow is TestSetup { morpho.p2pBorrowIndex(cDai) ); uint256 expectedBorrowOnPool = (borrowAmount - - getBalanceOnCompound(amount, cDaiSupplyIndex)).div(ICToken(cDai).borrowIndex()); + getBalanceOnCompound(amount, cDaiSupplyIndex)) + .div(ICToken(cDai).borrowIndex()); testEquality(inP2P, expectedBorrowInP2P, "Borrower1 in peer-to-peer"); testEquality(onPool, expectedBorrowOnPool, "Borrower1 on pool"); diff --git a/test-foundry/compound/TestEth.t.sol b/test-foundry/compound/TestEth.t.sol index a26f4d64e..71c79b1a1 100644 --- a/test-foundry/compound/TestEth.t.sol +++ b/test-foundry/compound/TestEth.t.sol @@ -231,9 +231,9 @@ contract TestEth is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cEth); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cUsdc).exchangeRateCurrent()); @@ -289,9 +289,9 @@ contract TestEth is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cDai); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cEth).exchangeRateCurrent()); diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index ec5d44aa4..1f0ad9f46 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -100,7 +100,7 @@ contract TestGovernance is TestSetup { morpho.setDefaultMaxGasForMatching(newMaxGas); (uint64 supply, uint64 borrow, uint64 withdraw, uint64 repay) = morpho - .defaultMaxGasForMatching(); + .defaultMaxGasForMatching(); assertEq(supply, newMaxGas.supply); assertEq(borrow, newMaxGas.borrow); assertEq(withdraw, newMaxGas.withdraw); diff --git a/test-foundry/compound/TestLens.t.sol b/test-foundry/compound/TestLens.t.sol index 1514d37fc..dd55bd3af 100644 --- a/test-foundry/compound/TestLens.t.sol +++ b/test-foundry/compound/TestLens.t.sol @@ -54,7 +54,7 @@ contract TestLens is TestSetup { uint256 underlyingPrice = oracle.getUnderlyingPrice(cDai); uint256 collateralValue = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateStored()) - .mul(underlyingPrice); + .mul(underlyingPrice); uint256 maxDebtValue = collateralValue.mul(collateralFactor); assertEq(assetData.collateralFactor, collateralFactor, "collateralFactor"); @@ -140,7 +140,7 @@ contract TestLens is TestSetup { expectedDataCUsdc.underlyingPrice = oracle.getUnderlyingPrice(cUsdc); expectedDataCUsdc.debtValue = getBalanceOnCompound(toBorrow, ICToken(cUsdc).borrowIndex()) - .mul(expectedDataCUsdc.underlyingPrice); + .mul(expectedDataCUsdc.underlyingPrice); assertEq( assetDataCUsdc.underlyingPrice, @@ -248,7 +248,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.onPool, userSupplyBalance.inP2P, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( cDai, @@ -273,7 +273,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.onPool, userBorrowBalance.inP2P, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( cUsdc, @@ -310,7 +310,7 @@ contract TestLens is TestSetup { UserBalance memory userSupplyBalance; (userSupplyBalance.onPool, userSupplyBalance.inP2P, userSupplyBalance.totalBalance) = lens - .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); + .getCurrentSupplyBalanceInOf(cDai, address(borrower1)); (uint256 supplyBalanceInP2P, uint256 supplyBalanceOnPool) = morpho.supplyBalanceInOf( cDai, @@ -334,7 +334,7 @@ contract TestLens is TestSetup { UserBalance memory userBorrowBalance; (userBorrowBalance.onPool, userBorrowBalance.inP2P, userBorrowBalance.totalBalance) = lens - .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); + .getCurrentBorrowBalanceInOf(cUsdc, address(borrower1)); (uint256 borrowBalanceInP2P, uint256 borrowBalanceOnPool) = morpho.borrowBalanceInOf( cUsdc, @@ -420,7 +420,7 @@ contract TestLens is TestSetup { (, uint256 borrowableUsdt) = lens.getUserMaxCapacitiesForAsset(address(borrower1), cUsdt); uint256 expectedBorrowableUsdt = (assetDataCDai.maxDebtValue + assetDataCUsdc.maxDebtValue) - .div(assetDataCUsdt.underlyingPrice); + .div(assetDataCUsdt.underlyingPrice); assertEq( withdrawableUsdc, @@ -511,8 +511,8 @@ contract TestLens is TestSetup { // DAI data collateralValueToAdd = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateStored()).mul( - oracle.getUnderlyingPrice(cDai) - ); + oracle.getUnderlyingPrice(cDai) + ); expectedStates.collateralValue += collateralValueToAdd; (, collateralFactor, ) = comptroller.markets(cDai); expectedStates.maxDebtValue += collateralValueToAdd.mul(collateralFactor); @@ -628,17 +628,17 @@ contract TestLens is TestSetup { // DAI data (, collateralFactor, ) = comptroller.markets(cDai); collateralValueToAdd = getBalanceOnCompound(amount, ICToken(cDai).exchangeRateCurrent()) - .mul(oracle.getUnderlyingPrice(cDai)); + .mul(oracle.getUnderlyingPrice(cDai)); expectedStates.collateralValue += collateralValueToAdd; expectedStates.maxDebtValue += collateralValueToAdd.mul(collateralFactor); // USDC data expectedStates.debtValue += getBalanceOnCompound(toBorrow, ICToken(cUsdc).borrowIndex()) - .mul(oracle.getUnderlyingPrice(cUsdc)); + .mul(oracle.getUnderlyingPrice(cUsdc)); // USDT data expectedStates.debtValue += getBalanceOnCompound(toBorrow, ICToken(cUsdt).borrowIndex()) - .mul(oracle.getUnderlyingPrice(cUsdt)); + .mul(oracle.getUnderlyingPrice(cUsdt)); assertEq(states.collateralValue, expectedStates.collateralValue, "Collateral Value"); assertEq(states.debtValue, expectedStates.debtValue, "Debt Value"); @@ -1178,7 +1178,7 @@ contract TestLens is TestSetup { createAndSetCustomPriceOracle().setDirectPrice(dai, collateralPrice); (uint256 collateralValue, uint256 debtValue, uint256 maxDebtValue) = lens - .getUserBalanceStates(address(borrower1), new address[](0)); + .getUserBalanceStates(address(borrower1), new address[](0)); uint256 borrowedPrice = oracle.getUnderlyingPrice(cUsdc); uint256 toRepay = lens.computeLiquidationRepayAmount( @@ -1328,9 +1328,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(cDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(cDai); @@ -1416,9 +1416,9 @@ contract TestLens is TestSetup { Amounts memory amounts; (amounts.totalP2PSupply, amounts.totalPoolSupply, amounts.totalSupply) = lens - .getTotalSupply(); + .getTotalSupply(); (amounts.totalP2PBorrow, amounts.totalPoolBorrow, amounts.totalBorrow) = lens - .getTotalBorrow(); + .getTotalBorrow(); (amounts.daiP2PSupply, amounts.daiPoolSupply) = lens.getTotalMarketSupply(cDai); (amounts.daiP2PBorrow, amounts.daiPoolBorrow) = lens.getTotalMarketBorrow(cDai); diff --git a/test-foundry/compound/TestLiquidate.t.sol b/test-foundry/compound/TestLiquidate.t.sol index a3fdbac94..358ef639a 100644 --- a/test-foundry/compound/TestLiquidate.t.sol +++ b/test-foundry/compound/TestLiquidate.t.sol @@ -93,9 +93,9 @@ contract TestLiquidate is TestSetup { uint256 borrowedPrice = customOracle.getUnderlyingPrice(cDai); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(borrowedPrice) - .div(collateralPrice); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); uint256 expectedOnPool = collateralOnPool - amountToSeize.div(ICToken(cUsdc).exchangeRateCurrent()); @@ -159,9 +159,9 @@ contract TestLiquidate is TestSetup { (inP2PBorrower, onPoolBorrower) = morpho.supplyBalanceInOf(cDai, address(borrower1)); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(customOracle.getUnderlyingPrice(cUsdc)) - .div(customOracle.getUnderlyingPrice(cDai)); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(customOracle.getUnderlyingPrice(cUsdc)) + .div(customOracle.getUnderlyingPrice(cDai)); testEquality( onPoolBorrower, @@ -225,9 +225,9 @@ contract TestLiquidate is TestSetup { (inP2PBorrower, onPoolBorrower) = morpho.supplyBalanceInOf(cDai, address(borrower1)); uint256 amountToSeize = toRepay - .mul(comptroller.liquidationIncentiveMantissa()) - .mul(customOracle.getUnderlyingPrice(cUsdc)) - .div(customOracle.getUnderlyingPrice(cDai)); + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(customOracle.getUnderlyingPrice(cUsdc)) + .div(customOracle.getUnderlyingPrice(cDai)); testEquality( onPoolBorrower, diff --git a/test-foundry/compound/TestRatesLens.t.sol b/test-foundry/compound/TestRatesLens.t.sol index 0fb4c24d9..565988dad 100644 --- a/test-foundry/compound/TestRatesLens.t.sol +++ b/test-foundry/compound/TestRatesLens.t.sol @@ -872,7 +872,7 @@ contract TestRatesLens is TestSetup { function testAverageSupplyRateShouldEqual0WhenNoSupply() public { (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); assertEq(supplyRatePerBlock, 0); assertEq(p2pSupplyAmount, 0); @@ -881,7 +881,7 @@ contract TestRatesLens is TestSetup { function testAverageBorrowRateShouldEqual0WhenNoBorrow() public { (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); assertEq(borrowRatePerBlock, 0); assertEq(p2pBorrowAmount, 0); @@ -929,7 +929,7 @@ contract TestRatesLens is TestSetup { supplier1.supply(cDai, amount); (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); assertApproxEqAbs(supplyRatePerBlock, ICToken(cDai).supplyRatePerBlock(), 1); assertApproxEqAbs(poolSupplyAmount, amount, 1e7); @@ -944,7 +944,7 @@ contract TestRatesLens is TestSetup { borrower1.borrow(cDai, amount); (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); assertApproxEqAbs(borrowRatePerBlock, ICToken(cDai).borrowRatePerBlock(), 1); assertApproxEqAbs(poolBorrowAmount, amount, 1); @@ -965,9 +965,9 @@ contract TestRatesLens is TestSetup { borrower1.borrow(cDai, amount); (uint256 supplyRatePerBlock, uint256 p2pSupplyAmount, uint256 poolSupplyAmount) = lens - .getAverageSupplyRatePerBlock(cDai); + .getAverageSupplyRatePerBlock(cDai); (uint256 borrowRatePerBlock, uint256 p2pBorrowAmount, uint256 poolBorrowAmount) = lens - .getAverageBorrowRatePerBlock(cDai); + .getAverageBorrowRatePerBlock(cDai); (uint256 p2pSupplyRate, uint256 p2pBorrowRate, , ) = lens.getRatesPerBlock(cDai); assertApproxEqAbs(supplyRatePerBlock, p2pSupplyRate, 1, "unexpected supply rate"); diff --git a/test-foundry/compound/TestRepay.t.sol b/test-foundry/compound/TestRepay.t.sol index 0cef74076..09569ddc0 100644 --- a/test-foundry/compound/TestRepay.t.sol +++ b/test-foundry/compound/TestRepay.t.sol @@ -106,7 +106,7 @@ contract TestRepay is TestSetup { (inP2PBorrower1, onPoolBorrower1) = morpho.borrowBalanceInOf(cDai, address(borrower1)); (uint256 inP2PAvailableBorrower, uint256 onPoolAvailableBorrower) = morpho - .borrowBalanceInOf(cDai, address(borrower2)); + .borrowBalanceInOf(cDai, address(borrower2)); uint256 expectedBorrowBalanceInP2P = ((25 * borrowedAmount) / 100).div( morpho.p2pBorrowIndex(cDai) ); @@ -497,7 +497,7 @@ contract TestRepay is TestSetup { uint256 expectedp2pSupplyDeltaInUnderlying = (matched.mul(morpho.p2pSupplyIndex(cDai)) - unmatched); uint256 expectedp2pSupplyDelta = (matched.mul(morpho.p2pSupplyIndex(cDai)) - unmatched) - .div(ICToken(cDai).exchangeRateCurrent()); + .div(ICToken(cDai).exchangeRateCurrent()); (uint256 p2pSupplyDelta, , , ) = morpho.deltas(cDai); assertApproxEqAbs(p2pSupplyDelta, expectedp2pSupplyDelta, 10, "supply delta 1"); diff --git a/test-foundry/compound/TestWithdraw.t.sol b/test-foundry/compound/TestWithdraw.t.sol index a7128481a..579d2be1a 100644 --- a/test-foundry/compound/TestWithdraw.t.sol +++ b/test-foundry/compound/TestWithdraw.t.sol @@ -247,9 +247,8 @@ contract TestWithdraw is TestSetup { // The amount withdrawn from supplier1 minus what is on pool will be removed from the borrower peer-to-peer's position. uint256 expectedBorrowBalanceOnPool = (toWithdraw - - onPoolSupplier.mul(ICToken(cDai).exchangeRateCurrent())).div( - ICToken(cDai).borrowIndex() - ); + onPoolSupplier.mul(ICToken(cDai).exchangeRateCurrent())) + .div(ICToken(cDai).borrowIndex()); assertApproxEqAbs(inP2PBorrower, expectedBorrowBalanceInP2P, 1, "borrower in peer-to-peer"); assertApproxEqAbs(onPoolBorrower, expectedBorrowBalanceOnPool, 1e3, "borrower on Pool"); @@ -455,7 +454,7 @@ contract TestWithdraw is TestSetup { uint256 expectedP2PBorrowDeltaInUnderlying = (matched.mul(morpho.p2pBorrowIndex(cDai)) - unmatched); uint256 expectedP2PBorrowDelta = (matched.mul(morpho.p2pBorrowIndex(cDai)) - unmatched) - .div(ICToken(cDai).borrowIndex()); + .div(ICToken(cDai).borrowIndex()); (, uint256 p2pBorrowDelta, , ) = morpho.deltas(cDai); assertEq(p2pBorrowDelta, expectedP2PBorrowDelta, "borrow delta not expected 1"); diff --git a/test-foundry/prod/aave-v2/TestBorrow.t.sol b/test-foundry/prod/aave-v2/TestBorrow.t.sol index f38b62e27..6ca633d57 100644 --- a/test-foundry/prod/aave-v2/TestBorrow.t.sol +++ b/test-foundry/prod/aave-v2/TestBorrow.t.sol @@ -63,9 +63,9 @@ contract TestBorrow is TestSetup { test.borrowedPrice = oracle.getAssetPrice(address(test.borrowed)); (test.collateralLtv, , , test.collateralDecimals, ) = morpho - .pool() - .getConfiguration(address(test.collateral)) - .getParamsMemory(); + .pool() + .getConfiguration(address(test.collateral)) + .getParamsMemory(); (test.p2pSupplyDelta, , , ) = morpho.deltas(address(test.borrowedPoolToken)); (, , , , , , test.p2pDisabled) = morpho.market(address(test.borrowedPoolToken)); @@ -198,7 +198,7 @@ contract TestBorrow is TestSetup { vm.warp(block.timestamp + 60 * 60 * 24); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); uint256 expectedBorrowedOnPoolAfter = test.borrowedOnPoolBefore.rayMul( 1e27 + (test.poolBorrowRatePerYear * 60 * 60 * 48) / 365 days diff --git a/test-foundry/prod/aave-v2/TestRepay.t.sol b/test-foundry/prod/aave-v2/TestRepay.t.sol index d926eb770..dcbd54c41 100644 --- a/test-foundry/prod/aave-v2/TestRepay.t.sol +++ b/test-foundry/prod/aave-v2/TestRepay.t.sol @@ -59,9 +59,9 @@ contract TestRepay is TestSetup { test.borrowedPrice = oracle.getAssetPrice(address(test.borrowed)); (test.collateralLtv, , , test.collateralDecimals, ) = morpho - .pool() - .getConfiguration(address(test.collateral)) - .getParamsMemory(); + .pool() + .getConfiguration(address(test.collateral)) + .getParamsMemory(); test.borrowedBalanceBefore = test.borrowed.balanceOf(address(borrower1)); test.morphoBalanceOnPoolBefore = test.borrowedPoolToken.balanceOf(address(morpho)); @@ -132,7 +132,7 @@ contract TestRepay is TestSetup { ); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertGe( test.totalBorrowedAfter, @@ -156,7 +156,7 @@ contract TestRepay is TestSetup { ); (test.borrowedInP2PAfter, test.borrowedOnPoolAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertEq(test.borrowedOnPoolAfter, 0, "unexpected pool borrowed amount after repay"); assertEq(test.borrowedInP2PAfter, 0, "unexpected p2p borrowed amount after repay"); diff --git a/test-foundry/prod/aave-v2/TestSupply.t.sol b/test-foundry/prod/aave-v2/TestSupply.t.sol index c00860376..6f54c960a 100644 --- a/test-foundry/prod/aave-v2/TestSupply.t.sol +++ b/test-foundry/prod/aave-v2/TestSupply.t.sol @@ -46,9 +46,9 @@ contract TestSupply is TestSetup { (, , , , , , test.p2pDisabled) = morpho.market(address(test.poolToken)); test.morphoBalanceOnPoolBefore = test.poolToken.scaledBalanceOf(address(morpho)); test.morphoBorrowOnPoolBefore = test - .variablePoolToken - .scaledBalanceOf(address(morpho)) - .rayMul(pool.getReserveNormalizedVariableDebt(address(test.underlying))); + .variablePoolToken + .scaledBalanceOf(address(morpho)) + .rayMul(pool.getReserveNormalizedVariableDebt(address(test.underlying))); test.morphoUnderlyingBalanceBefore = test.underlying.balanceOf(address(morpho)); uint256 amount = bound( @@ -150,7 +150,7 @@ contract TestSupply is TestSetup { vm.warp(block.timestamp + 60 * 60 * 24); (test.underlyingInP2PAfter, test.underlyingOnPoolAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); uint256 expectedUnderlyingOnPoolAfter = test.underlyingOnPoolBefore.rayMul( 1e27 + (test.poolSupplyRatePerYear * 60 * 60 * 48) / 365 days diff --git a/test-foundry/prod/aave-v2/TestWithdraw.t.sol b/test-foundry/prod/aave-v2/TestWithdraw.t.sol index d8a7bf189..83e26a38d 100644 --- a/test-foundry/prod/aave-v2/TestWithdraw.t.sol +++ b/test-foundry/prod/aave-v2/TestWithdraw.t.sol @@ -73,7 +73,7 @@ contract TestWithdraw is TestSetup { supplier1.withdraw(address(test.poolToken), test.totalUnderlyingBefore); (test.underlyingInP2PAfter, test.underlyingOnPoolAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); assertApproxEqAbs( test.underlying.balanceOf(address(supplier1)), diff --git a/test-foundry/prod/compound/TestBorrow.t.sol b/test-foundry/prod/compound/TestBorrow.t.sol index 250ab85c3..828c03046 100644 --- a/test-foundry/prod/compound/TestBorrow.t.sol +++ b/test-foundry/prod/compound/TestBorrow.t.sol @@ -188,7 +188,7 @@ contract TestBorrow is TestSetup { vm.roll(block.number + 500); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); uint256 expectedBorrowedOnPoolAfter = test.borrowedOnPoolBefore.mul( 1e18 + test.poolBorrowRatePerBlock * 1_000 diff --git a/test-foundry/prod/compound/TestRepay.t.sol b/test-foundry/prod/compound/TestRepay.t.sol index fffd043fd..ee4a9a691 100644 --- a/test-foundry/prod/compound/TestRepay.t.sol +++ b/test-foundry/prod/compound/TestRepay.t.sol @@ -124,7 +124,7 @@ contract TestRepay is TestSetup { ); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertGe( test.totalBorrowedAfter, @@ -148,7 +148,7 @@ contract TestRepay is TestSetup { ); (test.borrowedOnPoolAfter, test.borrowedInP2PAfter, test.totalBorrowedAfter) = lens - .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); + .getCurrentBorrowBalanceInOf(address(test.borrowedPoolToken), address(borrower1)); assertEq(test.borrowedOnPoolAfter, 0, "unexpected pool borrowed amount after repay"); assertEq(test.borrowedInP2PAfter, 0, "unexpected p2p borrowed amount after repay"); diff --git a/test-foundry/prod/compound/TestSupply.t.sol b/test-foundry/prod/compound/TestSupply.t.sol index f1519cfb1..6320c0841 100644 --- a/test-foundry/prod/compound/TestSupply.t.sol +++ b/test-foundry/prod/compound/TestSupply.t.sol @@ -133,7 +133,7 @@ contract TestSupply is TestSetup { vm.roll(block.number + 500); (test.underlyingOnPoolAfter, test.underlyingInP2PAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); uint256 expectedUnderlyingOnPoolAfter = test.underlyingOnPoolBefore.mul( 1e18 + test.poolSupplyRatePerBlock * 1_000 diff --git a/test-foundry/prod/compound/TestWithdraw.t.sol b/test-foundry/prod/compound/TestWithdraw.t.sol index d8a546817..d1aab59a4 100644 --- a/test-foundry/prod/compound/TestWithdraw.t.sol +++ b/test-foundry/prod/compound/TestWithdraw.t.sol @@ -66,7 +66,7 @@ contract TestWithdraw is TestSetup { supplier1.withdraw(address(test.poolToken), test.totalUnderlyingBefore); (test.underlyingOnPoolAfter, test.underlyingInP2PAfter, test.totalUnderlyingAfter) = lens - .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); + .getCurrentSupplyBalanceInOf(address(test.poolToken), address(supplier1)); assertEq( test.underlying.balanceOf(address(supplier1)), diff --git a/yarn.lock b/yarn.lock index 728205d60..a163d95d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1231,7 +1231,14 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@solidity-parser/parser@^0.14.1", "@solidity-parser/parser@^0.14.3": +"@solidity-parser/parser@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" + integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.14.1": version "0.14.3" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== @@ -2204,11 +2211,6 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" - integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2219,6 +2221,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + enquirer@^2.3.0: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -3742,17 +3749,17 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier-plugin-solidity@^1.0.0-beta.24: - version "1.0.0-beta.24" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.24.tgz#67573ca87098c14f7ccff3639ddd8a4cab2a87eb" - integrity sha512-6JlV5BBTWzmDSq4kZ9PTXc3eLOX7DF5HpbqmmaF+kloyUwOZbJ12hIYsUaZh2fVgZdV2t0vWcvY6qhILhlzgqg== +prettier-plugin-solidity@1.0.0-beta.13: + version "1.0.0-beta.13" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.13.tgz#2e31c5a5e2df3239e5e93704f9bcafe09a5f8190" + integrity sha512-AWMDRSabpNQMX7EqdDKgx/UVtQY6e3/Iu4gSPYDGvgiWl+OY8kYhAMll2NZHK/X+F0YYpPHYpebkDh7MGxbB1g== dependencies: - "@solidity-parser/parser" "^0.14.3" - emoji-regex "^10.1.0" + "@solidity-parser/parser" "^0.13.2" + emoji-regex "^9.2.2" escape-string-regexp "^4.0.0" - semver "^7.3.7" + semver "^7.3.5" solidity-comments-extractor "^0.0.7" - string-width "^4.2.3" + string-width "^4.2.2" prettier@^1.14.3: version "1.19.1" @@ -3975,7 +3982,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.7: +semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -4160,7 +4167,7 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== From c54113a59c79460ce81f10abd0c08fa675ee1ede Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Wed, 21 Sep 2022 10:47:26 +0200 Subject: [PATCH 07/31] Update test --- .gitignore | 2 +- Makefile | 1 + hardhat.config.ts | 2 +- package.json | 2 +- .../{aave-v2.json => aave-v2.15580517.json} | 954 +++++++++++++----- test/upgrades/stEth.spec.ts | 41 +- 6 files changed, 731 insertions(+), 271 deletions(-) rename test/upgrades/mocks/{aave-v2.json => aave-v2.15580517.json} (72%) diff --git a/.gitignore b/.gitignore index 7a6f4167d..c34c79fb6 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,7 @@ /artifacts /cache /coverage.json -test/contracts/upgrades +test/contracts/flattened # misc .DS_Store diff --git a/Makefile b/Makefile index 6f51762ba..7ff4fc6cf 100644 --- a/Makefile +++ b/Makefile @@ -130,6 +130,7 @@ config: flatten-tests: @mkdir -p test/contracts/upgrades/ @FOUNDRY_SRC=contracts forge flatten contracts/common/rewards-distribution/RewardsDistributor.sol > test/contracts/upgrades/RewardsDistributor.flattened.sol + @FOUNDRY_SRC=contracts forge flatten contracts/aave-v2/InterestRatesManager.sol > test/contracts/upgrades/InterestRatesManager.flattened.sol .PHONY: test config test-common foundry diff --git a/hardhat.config.ts b/hardhat.config.ts index 854aa7a33..2787349e7 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -14,7 +14,7 @@ const config: HardhatUserConfig = { forking: { enabled: true, url: `https://${process.env.NETWORK}.g.alchemy.com/v2/${process.env.ALCHEMY_KEY}`, - blockNumber: 15_567_589, + blockNumber: Number(process.env.BLOCK_NUMBER ?? 15_580_517), }, }, }, diff --git a/package.json b/package.json index e9d85433e..4c4f882e8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "Core contracts of the Morpho Protocol V1.", "scripts": { - "test": "make flatten-tests && NETWORK=eth-mainnet hardhat test test/*.spec.ts", + "test": "make flatten-tests && NETWORK=eth-mainnet BLOCK_NUMBER=15580517 hardhat test test/*.spec.ts", "test:upgrade:stEth": "make flatten-tests && NETWORK=eth-mainnet hardhat test test/upgrades/stEth.spec.ts", "lint": "yarn lint:sol && yarn lint:ts", "lint:ts": "eslint . --ext .ts", diff --git a/test/upgrades/mocks/aave-v2.json b/test/upgrades/mocks/aave-v2.15580517.json similarity index 72% rename from test/upgrades/mocks/aave-v2.json rename to test/upgrades/mocks/aave-v2.15580517.json index 0a60c506b..ee01c6361 100644 --- a/test/upgrades/mocks/aave-v2.json +++ b/test/upgrades/mocks/aave-v2.15580517.json @@ -2,7 +2,25 @@ "data": { "users": { "0x6e632701fd42a9b856294a2172dd63f03eb957c5": { - "positions": { + "balances": { + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15398478, + "transactionIndex": 44 + } + }, + "supply": { + "onPool": "113210", + "inP2P": "0", + "since": { + "blockNumber": 15392172, + "transactionIndex": 21 + } + } + }, "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "144433391", @@ -75,24 +93,6 @@ } } }, - "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { - "borrow": { - "onPool": "0", - "inP2P": "0", - "since": { - "blockNumber": 15398478, - "transactionIndex": 44 - } - }, - "supply": { - "onPool": "113210", - "inP2P": "0", - "since": { - "blockNumber": 15392172, - "transactionIndex": 21 - } - } - }, "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { "borrow": { "onPool": "0", @@ -124,7 +124,17 @@ } }, "0x4e8ffddb1403cf5306c6c7b31dc72ef5f44bc4f5": { - "positions": { + "balances": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "749", + "since": { + "blockNumber": 15451836, + "transactionIndex": 48 + } + } + }, "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "0", @@ -134,115 +144,435 @@ "transactionIndex": 83 } } + } + } + }, + "0x30ef0552e16c4f04d4ce1c954ab67776b3dff542": { + "balances": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "279437389283", + "since": { + "blockNumber": 15486477, + "transactionIndex": 191 + } + }, + "supply": { + "onPool": "3431336969473784", + "inP2P": "0", + "since": { + "blockNumber": 15495604, + "transactionIndex": 222 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "0", + "inP2P": "75", + "since": { + "blockNumber": 15492903, + "transactionIndex": 172 + } + }, + "supply": { + "onPool": "0", + "inP2P": "0", + "since": { + "blockNumber": 15492018, + "transactionIndex": 249 + } + } + }, + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "borrow": { + "onPool": "0", + "inP2P": "891961862", + "since": { + "blockNumber": 15495519, + "transactionIndex": 205 + } + }, + "supply": { + "onPool": "25146987426743", + "inP2P": "0", + "since": { + "blockNumber": 15492032, + "transactionIndex": 147 + } + } + } + } + }, + "0xfa469977ed4253c9c0c7b59ba69211be0b226de6": { + "balances": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "240501994", + "since": { + "blockNumber": 15488301, + "transactionIndex": 76 + } + }, + "supply": { + "onPool": "2565553083423449", + "inP2P": "0", + "since": { + "blockNumber": 15488353, + "transactionIndex": 74 + } + } + } + } + }, + "0xa1958a37c21372482deff4618baebbec23c9a449": { + "balances": { + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "borrow": { + "onPool": "0", + "inP2P": "20430186793277404", + "since": { + "blockNumber": 15495449, + "transactionIndex": 160 + } + }, + "supply": { + "onPool": "6210716308866529077", + "inP2P": "0", + "since": { + "blockNumber": 15575845, + "transactionIndex": 128 + } + } }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "400705503981", + "since": { + "blockNumber": 15575833, + "transactionIndex": 239 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "9230653280", + "inP2P": "0", + "since": { + "blockNumber": 15575855, + "transactionIndex": 198 + } + } + } + } + }, + "0xc53539fd4d109840dbfe8c759ba7fc2e7200709b": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", - "inP2P": "749", + "inP2P": "1999044454", "since": { - "blockNumber": 15451836, - "transactionIndex": 48 + "blockNumber": 15546022, + "transactionIndex": 719 + } + }, + "supply": { + "onPool": "1856028624", + "inP2P": "0", + "since": { + "blockNumber": 15546035, + "transactionIndex": 351 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "2959879858361381342", + "inP2P": "0", + "since": { + "blockNumber": 15546017, + "transactionIndex": 66 } } } } }, - "0x4426023bbeac104ea9f6f816c979f4e39c174957": { - "positions": { + "0x16c2312b7168f0e268751a4d5d73953176d87768": { + "balances": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "12574335687", + "since": { + "blockNumber": 15561835, + "transactionIndex": 207 + } + }, + "supply": { + "onPool": "13813983415", + "inP2P": "0", + "since": { + "blockNumber": 15561816, + "transactionIndex": 157 + } + } + }, "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { - "onPool": "1345060048055", + "onPool": "16351499314682311552", "inP2P": "0", "since": { - "blockNumber": 15466666, - "transactionIndex": 130 + "blockNumber": 15543060, + "transactionIndex": 135 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "1829700948", + "inP2P": "0", + "since": { + "blockNumber": 15579816, + "transactionIndex": 42 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "1672947870221855578711", + "inP2P": "0", + "since": { + "blockNumber": 15579819, + "transactionIndex": 276 } } } } }, - "0x30ef0552e16c4f04d4ce1c954ab67776b3dff542": { - "positions": { + "0xf53feaeb035361c046e5669745695e450ebb4028": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "49712386549719962934", + "since": { + "blockNumber": 15576495, + "transactionIndex": 228 + } + }, "supply": { - "onPool": "3431336969473784", + "onPool": "49255121388190238651", + "inP2P": "0", + "since": { + "blockNumber": 15576498, + "transactionIndex": 225 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "0", + "inP2P": "199904256", + "since": { + "blockNumber": 15576520, + "transactionIndex": 156 + } + }, + "supply": { + "onPool": "199487954", "inP2P": "0", "since": { - "blockNumber": 15495604, - "transactionIndex": 222 + "blockNumber": 15576522, + "transactionIndex": 115 + } + } + }, + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "supply": { + "onPool": "325300884289880893737087", + "inP2P": "0", + "since": { + "blockNumber": 15576531, + "transactionIndex": 90 + } + }, + "borrow": { + "onPool": "0", + "inP2P": "49931000665157756281123", + "since": { + "blockNumber": 15576539, + "transactionIndex": 211 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "0", + "inP2P": "49924948862", + "since": { + "blockNumber": 15576511, + "transactionIndex": 239 + } + } + } + } + }, + "0x49e96e255ba418d08e66c35b588e2f2f3766e1d0": { + "balances": { + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "borrow": { + "onPool": "29425769499482734607948", + "inP2P": "11086557621417420509333", + "since": { + "blockNumber": 15576619, + "transactionIndex": 116 + } + }, + "supply": { + "onPool": "6650850448579024924870", + "inP2P": "42270449323966303609932", + "since": { + "blockNumber": 15576624, + "transactionIndex": 79 + } + } + }, + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "borrow": { + "onPool": "493735671", + "inP2P": "999520891", + "since": { + "blockNumber": 15576698, + "transactionIndex": 44 + } + }, + "supply": { + "onPool": "498719848", + "inP2P": "999520732", + "since": { + "blockNumber": 15576701, + "transactionIndex": 54 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "0", + "inP2P": "31389", + "since": { + "blockNumber": 15576693, + "transactionIndex": 43 + } + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "340994489674427083457", + "inP2P": "49712351055344469946", + "since": { + "blockNumber": 15576635, + "transactionIndex": 97 + } + }, + "supply": { + "onPool": "49255074938218370546", + "inP2P": "348158154050396070256", + "since": { + "blockNumber": 15576651, + "transactionIndex": 94 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "borrow": { + "onPool": "0", + "inP2P": "799474418761", + "since": { + "blockNumber": 15576707, + "transactionIndex": 94 + } + }, + "supply": { + "onPool": "1353541596734", + "inP2P": "799474418761", + "since": { + "blockNumber": 15576712, + "transactionIndex": 44 + } + } + } + } + }, + "0x47b023db19b34519aa34c39134b508cac2c1efcb": { + "balances": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "0", + "inP2P": "97270", + "since": { + "blockNumber": 15578186, + "transactionIndex": 110 } }, - "borrow": { + "supply": { "onPool": "0", - "inP2P": "279437389283", + "inP2P": "42759", "since": { - "blockNumber": 15486477, - "transactionIndex": 191 + "blockNumber": 15578183, + "transactionIndex": 206 } } }, - "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { - "supply": { - "onPool": "0", - "inP2P": "0", + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "339196722702314372438", + "inP2P": "91311707141031182965", "since": { - "blockNumber": 15492018, - "transactionIndex": 249 + "blockNumber": 15578192, + "transactionIndex": 236 } }, - "borrow": { - "onPool": "0", - "inP2P": "75", + "supply": { + "onPool": "90472155619208386151", + "inP2P": "346323773162060050570", "since": { - "blockNumber": 15492903, - "transactionIndex": 172 + "blockNumber": 15578197, + "transactionIndex": 166 } } }, - "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { - "onPool": "25146987426743", + "onPool": "641589265112", "inP2P": "0", "since": { - "blockNumber": 15492032, - "transactionIndex": 147 - } - }, - "borrow": { - "onPool": "0", - "inP2P": "891961862", - "since": { - "blockNumber": 15495519, - "transactionIndex": 205 + "blockNumber": 15578153, + "transactionIndex": 263 } } } } }, - "0xfa469977ed4253c9c0c7b59ba69211be0b226de6": { - "positions": { + "0x4426023bbeac104ea9f6f816c979f4e39c174957": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { - "onPool": "2565553083423449", + "onPool": "1345060048055", "inP2P": "0", "since": { - "blockNumber": 15488353, - "transactionIndex": 74 - } - }, - "borrow": { - "onPool": "0", - "inP2P": "240501994", - "since": { - "blockNumber": 15488301, - "transactionIndex": 76 + "blockNumber": 15466666, + "transactionIndex": 130 } } } } }, "0xdce38101a45640b02306bb60a0fdeb2c3d8487b6": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "15113773709180", @@ -256,7 +586,7 @@ } }, "0xeec6cc090ca8ac1b934525762fa772d785a6a67c": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "18", @@ -270,7 +600,7 @@ } }, "0x7f2691cec4fefd54422159d6cbfc1ea534de4d17": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "12696604135073", @@ -283,72 +613,8 @@ } } }, - "0xc53539fd4d109840dbfe8c759ba7fc2e7200709b": { - "positions": { - "0xbcca60bb61934080951369a648fb03df4f96263c": { - "supply": { - "onPool": "1856028624", - "inP2P": "0", - "since": { - "blockNumber": 15546035, - "transactionIndex": 351 - } - }, - "borrow": { - "onPool": "0", - "inP2P": "1999044454", - "since": { - "blockNumber": 15546022, - "transactionIndex": 719 - } - } - }, - "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { - "supply": { - "onPool": "2959879858361381342", - "inP2P": "0", - "since": { - "blockNumber": 15546017, - "transactionIndex": 66 - } - } - } - } - }, - "0x16c2312b7168f0e268751a4d5d73953176d87768": { - "positions": { - "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { - "supply": { - "onPool": "16351499314682311552", - "inP2P": "0", - "since": { - "blockNumber": 15543060, - "transactionIndex": 135 - } - } - }, - "0xbcca60bb61934080951369a648fb03df4f96263c": { - "borrow": { - "onPool": "0", - "inP2P": "12574335687", - "since": { - "blockNumber": 15561835, - "transactionIndex": 207 - } - }, - "supply": { - "onPool": "13813983415", - "inP2P": "0", - "since": { - "blockNumber": 15561816, - "transactionIndex": 157 - } - } - } - } - }, "0xcf339235b44198c990bc0d674cc6c7f3bffe1d1a": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "19322672537613751700", @@ -372,7 +638,7 @@ } }, "0xf212ce21a97dbe30999a4c2b309d278bccbb686a": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "2029", @@ -386,7 +652,7 @@ } }, "0x5a805112171fea540cb85f851757e395751fb7c1": { - "positions": { + "balances": { "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { "supply": { "onPool": "1", @@ -410,7 +676,7 @@ } }, "0xdffdb9beea2ab3151bcbcf37a01ee8726f22ed94": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "23369094727", @@ -424,7 +690,7 @@ } }, "0x519121f08b4d1c3bc0964acd862495b7b72bccd7": { - "positions": { + "balances": { "0x1982b2f5814301d4e9a8b0201555376e62f82428": { "supply": { "onPool": "0", @@ -438,7 +704,7 @@ } }, "0x4e56234ccba22a60013f4c92f527d17209e80f04": { - "positions": { + "balances": { "0x1982b2f5814301d4e9a8b0201555376e62f82428": { "supply": { "onPool": "0", @@ -452,7 +718,7 @@ } }, "0xd43ba4193920da3a288aaf3400dcb5be62fb1dee": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "0", @@ -466,7 +732,7 @@ } }, "0xef764bac8a438e7e498c2e5fccf0f174c3e3f8db": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "12979562349884", @@ -480,7 +746,7 @@ } }, "0x08ca2051adfc16e419a5bcb496c78034cfd86c7b": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "65", @@ -494,7 +760,7 @@ } }, "0xf87694eeec1ced7c1136cba56dc21b414957d62b": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "182", @@ -508,7 +774,7 @@ } }, "0xe36288736e5a45c27ee6fa2f8d1a1aed99d3ea63": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "107", @@ -522,7 +788,7 @@ } }, "0x408e986a277da059a90c4be5051f67c6e3fd5cff": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "borrow": { "onPool": "0", @@ -544,7 +810,7 @@ } }, "0x264c86dbbd2e4165fbbf0c35b0ddf0e00aec6b31": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "borrow": { "onPool": "0", @@ -578,7 +844,7 @@ } }, "0x6abfd6139c7c3cc270ee2ce132e309f59caaf6a2": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -620,7 +886,7 @@ } }, "0x2b5469940fa577bc4082c6940ee4d8e97fda1b42": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "borrow": { "onPool": "0", @@ -642,7 +908,7 @@ } }, "0xb21731d830b7e8460e5d6c66dc1ccc0a5d0a6b87": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -666,7 +932,7 @@ } }, "0xb7bff12c323fd4e610e186b991e01fdb7542e6b0": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -690,7 +956,7 @@ } }, "0x5853ed4f26a3fcea565b3fbc698bb19cdf6deb85": { - "positions": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "borrow": { "onPool": "0", @@ -730,7 +996,7 @@ } }, "0xbcf8d8059790c3b69e507e37892e0bf67f47a60d": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -752,7 +1018,7 @@ } }, "0x35b9c86d87e44971fe1315c8b3a3e2500c9111b3": { - "positions": { + "balances": { "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { "borrow": { "onPool": "0", @@ -774,7 +1040,7 @@ } }, "0x2b266b260d1ccf94648329bb0189d3d283181444": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -808,7 +1074,7 @@ } }, "0x50e4eb3a74d2be7fd7c0be081754cee2dbeae918": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "borrow": { "onPool": "0", @@ -831,30 +1097,166 @@ } } }, - "0xa1958a37c21372482deff4618baebbec23c9a449": { - "positions": { + "0x272bff0f0e7fcea7514011db7dd6b5830c7e38a0": { + "balances": { + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "borrow": { + "onPool": "0", + "inP2P": "143702191317808824068", + "since": { + "blockNumber": 15575614, + "transactionIndex": 221 + } + }, + "supply": { + "onPool": "233704667324904476432", + "inP2P": "143702191317808824068", + "since": { + "blockNumber": 15575618, + "transactionIndex": 128 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "1372332418", + "inP2P": "0", + "since": { + "blockNumber": 15572326, + "transactionIndex": 272 + } + } + } + } + }, + "0xc7cd1e22016bf7c35873711a62aa68ec731f28a7": { + "balances": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "borrow": { + "onPool": "0", + "inP2P": "16902270946863019718", + "since": { + "blockNumber": 15575814, + "transactionIndex": 226 + } + }, + "supply": { + "onPool": "39397055702284247287", + "inP2P": "0", + "since": { + "blockNumber": 15575818, + "transactionIndex": 268 + } + } + } + } + }, + "0x9ed5194f7506d71eed9facb203b80ad03ae8f2ed": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "borrow": { "onPool": "0", - "inP2P": "20430186793277404", + "inP2P": "24965609483044066837719", "since": { - "blockNumber": 15495449, - "transactionIndex": 160 + "blockNumber": 15575961, + "transactionIndex": 157 } }, "supply": { - "onPool": "9384189078079590506172", + "onPool": "23235824730355339730299", "inP2P": "0", "since": { - "blockNumber": 15486578, - "transactionIndex": 97 + "blockNumber": 15575968, + "transactionIndex": 78 + } + } + }, + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "0", + "inP2P": "9985026544", + "since": { + "blockNumber": 15576002, + "transactionIndex": 194 + } + }, + "supply": { + "onPool": "9149595548", + "inP2P": "0", + "since": { + "blockNumber": 15576253, + "transactionIndex": 71 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "27839151636", + "inP2P": "0", + "since": { + "blockNumber": 15575957, + "transactionIndex": 230 + } + } + } + } + }, + "0x21d86a74c4081ff806c60bbe5c6edc8fb1423141": { + "balances": { + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "borrow": { + "onPool": "2693369865707184089411", + "inP2P": "363855323236630207133", + "since": { + "blockNumber": 15576614, + "transactionIndex": 72 + } + }, + "supply": { + "onPool": "0", + "inP2P": "11086557621417420509333", + "since": { + "blockNumber": 15576618, + "transactionIndex": 126 + } + } + } + } + }, + "0x3645dff2e8ff9fb6075632ecf3a0097c16943f41": { + "balances": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "borrow": { + "onPool": "54325666999", + "inP2P": "92870115552", + "since": { + "blockNumber": 15578906, + "transactionIndex": 63 + } + }, + "supply": { + "onPool": "85176094367", + "inP2P": "61894551549", + "since": { + "blockNumber": 15578935, + "transactionIndex": 153 + } + } + }, + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "supply": { + "onPool": "185083063175", + "inP2P": "0", + "since": { + "blockNumber": 15578892, + "transactionIndex": 115 } } } } }, "0x299161b9d8149052d81e652b81a6c0fc187e2224": { - "positions": { + "balances": { "0x1982b2f5814301d4e9a8b0201555376e62f82428": { "supply": { "onPool": "3292149291484694468", @@ -868,7 +1270,7 @@ } }, "0x617edca70efb4be0a42f1a83dc1d6cc84613e158": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "6920293149090232612", @@ -882,7 +1284,7 @@ } }, "0x1a27881e041737bc7ef5c616a8af08ec7e51db40": { - "positions": { + "balances": { "0x1982b2f5814301d4e9a8b0201555376e62f82428": { "supply": { "onPool": "20583641407016846427", @@ -896,7 +1298,7 @@ } }, "0xf7253a0e87e39d2cd6365919d4a3d56d431d0041": { - "positions": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "supply": { "onPool": "372590649443942397174", @@ -910,7 +1312,7 @@ } }, "0xab888291f4127352b655fd476f64ac2ebfb8fe76": { - "positions": { + "balances": { "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { "supply": { "onPool": "879705584127384176", @@ -924,7 +1326,7 @@ } }, "0xf18288d96dde32206e811871bdd5e274a32cfbe4": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "46406641", @@ -938,7 +1340,7 @@ } }, "0x0b5d9ae8fd1eba316a1b8b22b3c08b5621fb68b4": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "25790608539682612781", @@ -952,7 +1354,7 @@ } }, "0xaf88097460d0ba2a99c04deb30e05ff21e0dd246": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "928131", @@ -966,7 +1368,7 @@ } }, "0xa8cbf4200595efcd94b7526d04deafe0f284af2d": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "67827856873579148293", @@ -980,7 +1382,7 @@ } }, "0xbb53d3fdb99adb815d7d2824d6a0b82396cf046d": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "9885073955728292418", @@ -994,7 +1396,7 @@ } }, "0xad34972d50b00d9c5bbe09895cbcfe0b2bc3a0d5": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "31007226649008111", @@ -1008,7 +1410,7 @@ } }, "0x69528c13dcb9d6d5bcb68fd77f8d5498f841ffe4": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "98843586372829034", @@ -1022,7 +1424,7 @@ } }, "0x29f66860c93cb45ce811ada74b1b30f4965740f1": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "988433104235685880", @@ -1036,7 +1438,7 @@ } }, "0x0db0f4506f5de744052d90f04e3fca3d1dd3600d": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "46405651", @@ -1060,7 +1462,7 @@ } }, "0x6b1009e2bb8ee7f36c21f5f38f4f25f1b79bc02d": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "589164568", @@ -1074,7 +1476,7 @@ } }, "0x3cb06e95719497cca509f55e3c09e53c8f43fd3f": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "2784316577", @@ -1088,7 +1490,7 @@ } }, "0x32c52c9e56c7382e9a9e52d53862ff3e6cbcaeee": { - "positions": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "supply": { "onPool": "42077508373121442962", @@ -1102,7 +1504,7 @@ } }, "0xb76707515c3f908411b5211863a7581589a1e31f": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "24704977158268060", @@ -1126,7 +1528,7 @@ } }, "0x9b9a614ceba98797e775cd623e7ce3b2c56f3b6c": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "91548794", @@ -1140,7 +1542,7 @@ } }, "0x5679b0f75f4c418845960bad8282e2c8e42280b9": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "45775242", @@ -1164,7 +1566,7 @@ } }, "0x676936d597f6cb2a8c2211a3303bbb03c284ac49": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "45775232", @@ -1188,7 +1590,7 @@ } }, "0x159f9412cb2e157d24c8c69e63032ed23107aa5e": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "24703341303783549", @@ -1212,7 +1614,7 @@ } }, "0x48f33b292729c098d54a6c7a38678e826cf31b0b": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "24703280944832828", @@ -1236,7 +1638,7 @@ } }, "0x41aece83450e1e38264b63b5a9832f9177532251": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "24703217719321227", @@ -1260,7 +1662,7 @@ } }, "0xdda833c0be0d1f570c10c2cc900eb2a5725001d4": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "45773576", @@ -1284,7 +1686,7 @@ } }, "0x78720984c7cf028e7a74f2acfcf857ee7a79696c": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "45773565", @@ -1308,7 +1710,7 @@ } }, "0x9da59c875a145fefd7c6be87c002af29faec4d3a": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "105384350763069778", @@ -1322,7 +1724,7 @@ } }, "0x2c6e2e2eb9153631aa098d671df870a0f9026d74": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "1975886036534189559", @@ -1336,7 +1738,7 @@ } }, "0x23abad8c65a9a93abcc343892aaf3d6e88b5ccc9": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "473320845", @@ -1350,7 +1752,7 @@ } }, "0x32ca3698bc7707102a7e0da52a383f1c881d80d7": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "1425485655", @@ -1364,7 +1766,7 @@ } }, "0x3a91d37bac30c913369e1abc8cad1c13d1ff2e98": { - "positions": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "supply": { "onPool": "92981945", @@ -1378,7 +1780,7 @@ } }, "0x762fafa0257cd3b697e0d7fd40f1f6c03f07a8ef": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "98782535", @@ -1392,7 +1794,7 @@ } }, "0x963311ebb58043755a33bc3de4be8b492fda66d0": { - "positions": { + "balances": { "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { "supply": { "onPool": "87931932", @@ -1406,7 +1808,7 @@ } }, "0x1926bb3977336fd376be0aee2915406a904e5870": { - "positions": { + "balances": { "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { "supply": { "onPool": "91539730", @@ -1420,7 +1822,7 @@ } }, "0xd45ef8c9b9431298019fc15753609db2fb101aa5": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "92807871", @@ -1434,7 +1836,7 @@ } }, "0xa59d6996bdbfaef7b64eee436e5326869c9d8399": { - "positions": { + "balances": { "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { "supply": { "onPool": "997485", @@ -1448,7 +1850,7 @@ } }, "0x998f9112632d2e56517aa3b993336785c23d2707": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "108662435825243498", @@ -1462,7 +1864,7 @@ } }, "0x5f9d7cef3e9298de2e91ff0cb486ce2c7ffc5144": { - "positions": { + "balances": { "0x028171bca77440897b824ca71d1c56cac55b68a3": { "supply": { "onPool": "18594770989631920144", @@ -1476,7 +1878,7 @@ } }, "0x929d5ab51be0b6249d8e6a63e4802ec20b2ef17e": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "1971554647492338853", @@ -1490,7 +1892,7 @@ } }, "0x967ccf549783e87787ee2edfba5340143339aa1b": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "10098760589579712", @@ -1504,7 +1906,7 @@ } }, "0x1a92b1338788d670993819a9f234da283021bafa": { - "positions": { + "balances": { "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { "supply": { "onPool": "34483451641638150987", @@ -1518,7 +1920,7 @@ } }, "0xe4fb9ca52e39b83be69e74e7fac8f807a9c16ef9": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "37120627306", @@ -1532,7 +1934,7 @@ } }, "0x771b36164c96991f3757fc3ad6e0ab972661d643": { - "positions": { + "balances": { "0xbcca60bb61934080951369a648fb03df4f96263c": { "supply": { "onPool": "9280056", @@ -1544,72 +1946,114 @@ } } } + }, + "0xb42f5a41b62b52616598cfd1a0d3a01846bfa888": { + "balances": { + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "supply": { + "onPool": "1034373875017110606", + "inP2P": "0", + "since": { + "blockNumber": 15572702, + "transactionIndex": 172 + } + } + } + } + }, + "0x853c61b59f1479860a601acdf40ce05d6c93f62e": { + "balances": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "115518609302", + "inP2P": "0", + "since": { + "blockNumber": 15576294, + "transactionIndex": 188 + } + } + } + } + }, + "0xb0517a09ece1638cc4bc608a75da616977f5984b": { + "balances": { + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "supply": { + "onPool": "4703210126", + "inP2P": "0", + "since": { + "blockNumber": 15576887, + "transactionIndex": 301 + } + } + } + } } }, - "syncBlockNumber": 15567492 + "syncBlockNumber": 15580517 }, "markets": { - "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { - "price": "1000000000000000000", - "indexes": { - "poolSupply": "1015080158227754631363360587", - "poolBorrow": "1026328768739238775490686926", - "p2pSupply": "1005235675644569488523606037", - "p2pBorrow": "1005725804133153224630663681" - } - }, - "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { - "price": "761250653114884", + "0x028171bca77440897b824ca71d1c56cac55b68a3": { + "price": "750266849639075", "indexes": { - "poolSupply": "1092896405915821311811953630", - "poolBorrow": "1140934475598407843714959281", - "p2pSupply": "1001438237681221717953400286", - "p2pBorrow": "1001438237681221717953400286" + "poolSupply": "1075949228990822873129205682", + "poolBorrow": "1121819318936201973664714465", + "p2pSupply": "1001412334500872294339268852", + "p2pBorrow": "1001412334500872294339268852" } }, - "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { - "price": "14258745220000000000", + "0xbcca60bb61934080951369a648fb03df4f96263c": { + "price": "751082525343410", "indexes": { - "poolSupply": "1002563380287150885073789902", - "poolBorrow": "1012643898635247363683993928", - "p2pSupply": "1000456170092775256196488452", - "p2pBorrow": "1000456170092775256196488452" + "poolSupply": "1077627415418739357487436386", + "poolBorrow": "1112303705847567597173029534", + "p2pSupply": "1000671037505934050978397287", + "p2pBorrow": "1000671037505934050978397287" } }, - "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { - "price": "697822550000000", + "0x3ed3b47dd13ec9a98b44e6204a523e766b225811": { + "price": "755442730000000", "indexes": { - "poolSupply": "1138135528379349843962432318", - "poolBorrow": "1320695244400562822905641381", - "p2pSupply": "1003606450586825664422208148", - "p2pBorrow": "1003606450586825664422208148" + "poolSupply": "1092968324962307374234786412", + "poolBorrow": "1141074517548994373238426178", + "p2pSupply": "1001532647542808499944015131", + "p2pBorrow": "1001532652453071738559457386" } }, - "0xbcca60bb61934080951369a648fb03df4f96263c": { - "price": "762390000000000", + "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": { + "price": "14280786900000000000", "indexes": { - "poolSupply": "1077604126712127622100583092", - "poolBorrow": "1112226122831647281818865032", - "p2pSupply": "1000625325932736342228348087", - "p2pBorrow": "1000625325932736342228348087" + "poolSupply": "1002568236518359175909685960", + "poolBorrow": "1012705351710983965735139769", + "p2pSupply": "1000488950620698910078481884", + "p2pBorrow": "1000488950620698910078481884" } }, "0x1982b2f5814301d4e9a8b0201555376e62f82428": { - "price": "991732394702174600", + "price": "991780609811593400", "indexes": { - "poolSupply": "1000010923895744435070620640", + "poolSupply": "1000013976628197442899261070", "poolBorrow": "1000000000000000000000000000", "p2pSupply": "1000000000000000000000000000", "p2pBorrow": "1000000000000000000000000000" } }, - "0x028171bca77440897b824ca71d1c56cac55b68a3": { - "price": "762577880000000", + "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": { + "price": "696838808747551", + "indexes": { + "poolSupply": "1138290227338093188892016626", + "poolBorrow": "1321199709822528410343671562", + "p2pSupply": "1003866348824978653212901718", + "p2pBorrow": "1003866348824978653212901718" + } + }, + "0x030ba81f1c18d280636f32af80b9aad02cf0854e": { + "price": "1000000000000000000", "indexes": { - "poolSupply": "1075879881433764278089277855", - "poolBorrow": "1121670248361132030914020813", - "p2pSupply": "1001313522996424073374879766", - "p2pBorrow": "1001313522996424073374879766" + "poolSupply": "1015137568878628858473993853", + "poolBorrow": "1026441676711377734868353516", + "p2pSupply": "1005313033513123274759703986", + "p2pBorrow": "1005809565428068492884916848" } } } diff --git a/test/upgrades/stEth.spec.ts b/test/upgrades/stEth.spec.ts index 9925998aa..f6a765109 100644 --- a/test/upgrades/stEth.spec.ts +++ b/test/upgrades/stEth.spec.ts @@ -1,4 +1,5 @@ import { expect } from "chai"; +import { BigNumber } from "ethers"; import hre from "hardhat"; import { MorphoAaveV2__factory } from "@morpho-labs/morpho-ethers-contract"; @@ -7,7 +8,7 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import "../../hardhat.config"; import WadRayMath from "./maths/WadRayMath"; -import mock from "./mocks/aave-v2.json"; +import mock from "./mocks/aave-v2.15580517.json"; interface UserMarketBalance { onPool: string; @@ -21,7 +22,7 @@ interface UserMarketBalance { const data: { users: { [user: string]: { - positions: { + balances: { [market: string]: { supply?: UserMarketBalance; borrow?: UserMarketBalance; @@ -42,7 +43,7 @@ const markets: { }; } = mock.markets; -const market = "0x1982b2F5814301d4e9a8b0201555376e62F82428".toLowerCase(); +const aStEth = "0x1982b2F5814301d4e9a8b0201555376e62F82428".toLowerCase(); describe("Check ugprade", () => { let snapshotId: number; @@ -50,12 +51,21 @@ describe("Check ugprade", () => { const morpho = MorphoAaveV2__factory.connect("0x777777c9898d384f785ee44acfe945efdff5f3e0", hre.ethers.provider); const deployUpgrade = async () => { - const InterestRatesManagerUpgraded = await hre.ethers.getContractFactory("InterestRatesManagerUpgraded"); + const InterestRatesManagerUpgraded = await hre.ethers.getContractFactory("InterestRatesManager"); const interestRatesManagerUpgraded = await InterestRatesManagerUpgraded.deploy(); await interestRatesManagerUpgraded.deployed(); - const owner = await hre.ethers.provider.getSigner(await morpho.owner()); + const ownerAddress = await morpho.owner(); + await hre.network.provider.request({ + method: "hardhat_setBalance", + params: [ownerAddress, "0xffffffffffffffffffffffffffffffffffffff"], + }); + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ownerAddress], + }); + const owner = await hre.ethers.provider.getSigner(ownerAddress); await morpho.connect(owner).setInterestRatesManager(interestRatesManagerUpgraded.address); }; @@ -68,11 +78,16 @@ describe("Check ugprade", () => { }); it("should withdraw reasonable amount", async () => { - loadFixture(deployUpgrade); + await loadFixture(deployUpgrade); for (const [user, userBalances] of Object.entries(data.users)) { - const userMarketBalances = userBalances.positions[market]; - if (!userMarketBalances || !userMarketBalances.supply || !userMarketBalances.borrow) continue; + const userMarketBalances = userBalances.balances[aStEth]; + if ( + !userMarketBalances || + !userMarketBalances.supply || + BigNumber.from(userMarketBalances.supply.onPool).add(userMarketBalances.supply.inP2P).lte(0) + ) + continue; console.log("Impersonating", user); await hre.network.provider.request({ @@ -84,8 +99,8 @@ describe("Check ugprade", () => { params: [user], }); - const amount = WadRayMath.rayMul(userMarketBalances.supply.onPool, markets[market].indexes.poolSupply).add( - WadRayMath.rayMul(userMarketBalances.supply.inP2P, markets[market].indexes.p2pSupply) + const amount = WadRayMath.rayMul(userMarketBalances.supply.onPool, markets[aStEth].indexes.poolSupply).add( + WadRayMath.rayMul(userMarketBalances.supply.inP2P, markets[aStEth].indexes.p2pSupply) ); if (amount.eq(0)) continue; @@ -97,15 +112,15 @@ describe("Check ugprade", () => { const balanceBefore = await stEth.balanceOf(user); - await morpho.connect(stEth.signer).withdraw(market, amount, { gasLimit: 3_000_000 }); + await morpho.connect(stEth.signer).withdraw(aStEth, amount, { gasLimit: 3_000_000 }); const balanceAfter = await stEth.balanceOf(user); expect(balanceAfter.sub(balanceBefore).sub(amount).abs().lt(10)).to.be.true; - await expect(morpho.connect(stEth.signer).withdraw(market, 1_000_000, { gasLimit: 3_000_000 })).to.be.reverted; + await expect(morpho.connect(stEth.signer).withdraw(aStEth, 1_000, { gasLimit: 3_000_000 })).to.be.reverted; - const supplyBalance = await morpho.supplyBalanceInOf(user, market); + const supplyBalance = await morpho.supplyBalanceInOf(user, aStEth); expect(supplyBalance.onPool.toString()).to.eq("0"); expect(supplyBalance.inP2P.toString()).to.eq("0"); } From 543a34e6dc158ea64d860a13c93fd361ab2303b9 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Wed, 21 Sep 2022 10:48:19 +0200 Subject: [PATCH 08/31] Rename workflow job --- .github/workflows/ci-hardhat-common.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-hardhat-common.yml b/.github/workflows/ci-hardhat-common.yml index eb2f26a7b..c02fcb642 100644 --- a/.github/workflows/ci-hardhat-common.yml +++ b/.github/workflows/ci-hardhat-common.yml @@ -19,7 +19,7 @@ on: - test/upgrades/** jobs: - morpho-compound-eth-mainnet: + morpho-hardhat-tests: name: eth-mainnet runs-on: ubuntu-latest steps: From 4a20e7adea7c2911d63c6ceffbb9b11cf0b21eaa Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Wed, 21 Sep 2022 14:27:42 +0200 Subject: [PATCH 09/31] Updated connected signer --- test/upgrades/stEth.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/upgrades/stEth.spec.ts b/test/upgrades/stEth.spec.ts index f6a765109..f05a2b296 100644 --- a/test/upgrades/stEth.spec.ts +++ b/test/upgrades/stEth.spec.ts @@ -104,21 +104,22 @@ describe("Check ugprade", () => { ); if (amount.eq(0)) continue; + const signer = await hre.ethers.provider.getSigner(user); const stEth = await hre.ethers.getContractAt( ["function balanceOf(address) external view returns (uint256)"], "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", - await hre.ethers.provider.getSigner(user) + signer ); const balanceBefore = await stEth.balanceOf(user); - await morpho.connect(stEth.signer).withdraw(aStEth, amount, { gasLimit: 3_000_000 }); + await morpho.connect(signer).withdraw(aStEth, amount, { gasLimit: 3_000_000 }); const balanceAfter = await stEth.balanceOf(user); expect(balanceAfter.sub(balanceBefore).sub(amount).abs().lt(10)).to.be.true; - await expect(morpho.connect(stEth.signer).withdraw(aStEth, 1_000, { gasLimit: 3_000_000 })).to.be.reverted; + await expect(morpho.connect(signer).withdraw(aStEth, 1_000, { gasLimit: 3_000_000 })).to.be.reverted; const supplyBalance = await morpho.supplyBalanceInOf(user, aStEth); expect(supplyBalance.onPool.toString()).to.eq("0"); From a6e3d14659aa28a4c0a24ed9378a9eec539862a1 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 14:40:09 +0200 Subject: [PATCH 10/31] =?UTF-8?q?=E2=9C=A8=20(#1302)=20Add=20isMarketCreat?= =?UTF-8?q?ed=20modifiers=20on=20pausing=20functions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/MorphoGovernance.sol | 41 ++++++++++++++++++++----- contracts/aave-v3/MorphoGovernance.sol | 41 ++++++++++++++++++++----- contracts/compound/MorphoGovernance.sol | 41 ++++++++++++++++++++----- 3 files changed, 102 insertions(+), 21 deletions(-) diff --git a/contracts/aave-v2/MorphoGovernance.sol b/contracts/aave-v2/MorphoGovernance.sol index 10a4417ec..e0c84cd45 100644 --- a/contracts/aave-v2/MorphoGovernance.sol +++ b/contracts/aave-v2/MorphoGovernance.sol @@ -286,7 +286,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isSupplyPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsSupplyPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsSupplyPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isSupplyPaused = _isPaused; emit IsSupplyPausedSet(_poolToken, _isPaused); } @@ -294,7 +298,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isBorrowPaused = _isPaused; emit IsBorrowPausedSet(_poolToken, _isPaused); } @@ -302,7 +310,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isWithdrawPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsWithdrawPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsWithdrawPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isWithdrawPaused = _isPaused; emit IsWithdrawPausedSet(_poolToken, _isPaused); } @@ -310,7 +322,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isRepayPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsRepayPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsRepayPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isRepayPaused = _isPaused; emit IsRepayPausedSet(_poolToken, _isPaused); } @@ -318,7 +334,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateCollateralPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isLiquidateCollateralPaused = _isPaused; emit IsLiquidateCollateralPausedSet(_poolToken, _isPaused); } @@ -326,7 +346,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isLiquidateBorrowPaused = _isPaused; emit IsLiquidateBorrowPausedSet(_poolToken, _isPaused); } @@ -491,7 +515,10 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) internal { + function _setPauseStatus(address _poolToken, bool _isPaused) + internal + isMarketCreated(_poolToken) + { Types.Market storage market = market[_poolToken]; market.isSupplyPaused = _isPaused; diff --git a/contracts/aave-v3/MorphoGovernance.sol b/contracts/aave-v3/MorphoGovernance.sol index 50339b7a6..ec2b5de46 100644 --- a/contracts/aave-v3/MorphoGovernance.sol +++ b/contracts/aave-v3/MorphoGovernance.sol @@ -286,7 +286,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isSupplyPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsSupplyPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsSupplyPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isSupplyPaused = _isPaused; emit IsSupplyPausedSet(_poolToken, _isPaused); } @@ -294,7 +298,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isBorrowPaused = _isPaused; emit IsBorrowPausedSet(_poolToken, _isPaused); } @@ -302,7 +310,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isWithdrawPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsWithdrawPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsWithdrawPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isWithdrawPaused = _isPaused; emit IsWithdrawPausedSet(_poolToken, _isPaused); } @@ -310,7 +322,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isRepayPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsRepayPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsRepayPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isRepayPaused = _isPaused; emit IsRepayPausedSet(_poolToken, _isPaused); } @@ -318,7 +334,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateCollateralPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isLiquidateCollateralPaused = _isPaused; emit IsLiquidateCollateralPausedSet(_poolToken, _isPaused); } @@ -326,7 +346,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { market[_poolToken].isLiquidateBorrowPaused = _isPaused; emit IsLiquidateBorrowPausedSet(_poolToken, _isPaused); } @@ -491,7 +515,10 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) internal { + function _setPauseStatus(address _poolToken, bool _isPaused) + internal + isMarketCreated(_poolToken) + { Types.Market storage market = market[_poolToken]; market.isSupplyPaused = _isPaused; diff --git a/contracts/compound/MorphoGovernance.sol b/contracts/compound/MorphoGovernance.sol index f59675fd0..8cbb15e51 100644 --- a/contracts/compound/MorphoGovernance.sol +++ b/contracts/compound/MorphoGovernance.sol @@ -260,7 +260,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isSupplyPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsSupplyPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsSupplyPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isSupplyPaused = _isPaused; emit IsSupplyPausedSet(_poolToken, _isPaused); } @@ -268,7 +272,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isBorrowPaused = _isPaused; emit IsBorrowPausedSet(_poolToken, _isPaused); } @@ -276,7 +284,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isWithdrawPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsWithdrawPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsWithdrawPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isWithdrawPaused = _isPaused; emit IsWithdrawPausedSet(_poolToken, _isPaused); } @@ -284,7 +296,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isRepayPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsRepayPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsRepayPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isRepayPaused = _isPaused; emit IsRepayPausedSet(_poolToken, _isPaused); } @@ -292,7 +308,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateCollateralPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateCollateralPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isLiquidateCollateralPaused = _isPaused; emit IsLiquidateCollateralPausedSet(_poolToken, _isPaused); } @@ -300,7 +320,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets `isLiquidateBorrowPaused` for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) external onlyOwner { + function setIsLiquidateBorrowPaused(address _poolToken, bool _isPaused) + external + onlyOwner + isMarketCreated(_poolToken) + { marketStatus[_poolToken].isLiquidateBorrowPaused = _isPaused; emit IsLiquidateBorrowPausedSet(_poolToken, _isPaused); } @@ -440,7 +464,10 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) internal { + function _setPauseStatus(address _poolToken, bool _isPaused) + internal + isMarketCreated(_poolToken) + { Types.MarketStatus storage market = marketStatus[_poolToken]; market.isSupplyPaused = _isPaused; From 8b2e7502d171e1b5cd9e0188014039cc480dce0f Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 15:01:26 +0200 Subject: [PATCH 11/31] =?UTF-8?q?=E2=9C=A8=20(#1302)=20Remove=20unnecessar?= =?UTF-8?q?y=20isMarketCreated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/MorphoGovernance.sol | 5 +---- contracts/aave-v3/MorphoGovernance.sol | 5 +---- contracts/compound/MorphoGovernance.sol | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/contracts/aave-v2/MorphoGovernance.sol b/contracts/aave-v2/MorphoGovernance.sol index e0c84cd45..06c906c20 100644 --- a/contracts/aave-v2/MorphoGovernance.sol +++ b/contracts/aave-v2/MorphoGovernance.sol @@ -515,10 +515,7 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) - internal - isMarketCreated(_poolToken) - { + function _setPauseStatus(address _poolToken, bool _isPaused) internal { Types.Market storage market = market[_poolToken]; market.isSupplyPaused = _isPaused; diff --git a/contracts/aave-v3/MorphoGovernance.sol b/contracts/aave-v3/MorphoGovernance.sol index ec2b5de46..ec4f85642 100644 --- a/contracts/aave-v3/MorphoGovernance.sol +++ b/contracts/aave-v3/MorphoGovernance.sol @@ -515,10 +515,7 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) - internal - isMarketCreated(_poolToken) - { + function _setPauseStatus(address _poolToken, bool _isPaused) internal { Types.Market storage market = market[_poolToken]; market.isSupplyPaused = _isPaused; diff --git a/contracts/compound/MorphoGovernance.sol b/contracts/compound/MorphoGovernance.sol index 8cbb15e51..249a5a0d9 100644 --- a/contracts/compound/MorphoGovernance.sol +++ b/contracts/compound/MorphoGovernance.sol @@ -464,10 +464,7 @@ abstract contract MorphoGovernance is MorphoUtils { /// @notice Sets the different pause status for a given market. /// @param _poolToken The address of the market to update. /// @param _isPaused The new pause status, true to pause the mechanism. - function _setPauseStatus(address _poolToken, bool _isPaused) - internal - isMarketCreated(_poolToken) - { + function _setPauseStatus(address _poolToken, bool _isPaused) internal { Types.MarketStatus storage market = marketStatus[_poolToken]; market.isSupplyPaused = _isPaused; From 5265ddb435f63cbe34e58569ac1936b3272e8634 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 15:07:18 +0200 Subject: [PATCH 12/31] =?UTF-8?q?=E2=9C=85=20(#1302)=20Add=20market=20crea?= =?UTF-8?q?ted=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestPausableMarket.t.sol | 52 +++++++++++++++---- test-foundry/aave-v3/TestPausableMarket.t.sol | 52 +++++++++++++++---- .../compound/TestPausableMarket.t.sol | 52 +++++++++++++++---- 3 files changed, 123 insertions(+), 33 deletions(-) diff --git a/test-foundry/aave-v2/TestPausableMarket.t.sol b/test-foundry/aave-v2/TestPausableMarket.t.sol index f0f37cf13..e3858628a 100644 --- a/test-foundry/aave-v2/TestPausableMarket.t.sol +++ b/test-foundry/aave-v2/TestPausableMarket.t.sol @@ -92,19 +92,19 @@ contract TestPausableMarket is TestSetup { uint256 poolsLength = pools.length; for (uint256 i; i < poolsLength; ++i) { - hevm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); supplier1.supply(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); supplier1.borrow(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); supplier1.withdraw(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); supplier1.repay(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); supplier1.liquidate(pools[i], pools[0], address(supplier1), 1); } } @@ -112,7 +112,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableSupply() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(aDai, true); morpho.setIsSupplyPaused(aDai, true); @@ -124,7 +124,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(aDai, true); morpho.setIsBorrowPaused(aDai, true); @@ -136,7 +136,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableWithdraw() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(aDai, true); morpho.setIsWithdrawPaused(aDai, true); @@ -148,7 +148,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableRepay() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(aDai, true); morpho.setIsRepayPaused(aDai, true); @@ -160,7 +160,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(aDai, true); morpho.setIsLiquidateCollateralPaused(aDai, true); @@ -172,7 +172,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(aDai, true); morpho.setIsLiquidateBorrowPaused(aDai, true); @@ -180,4 +180,34 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); } + + function testShouldNotPauseSupplyOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsSupplyPaused(address(0), true); + } + + function testShouldNotPauseBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsBorrowPaused(address(0), true); + } + + function testShouldNotPauseWithdrawOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsWithdrawPaused(address(0), true); + } + + function testShouldNotPauseRepayMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsRepayPaused(address(0), true); + } + + function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateCollateralPaused(address(0), true); + } + + function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateBorrowPaused(address(0), true); + } } diff --git a/test-foundry/aave-v3/TestPausableMarket.t.sol b/test-foundry/aave-v3/TestPausableMarket.t.sol index ff5ec4976..fd8deaf32 100644 --- a/test-foundry/aave-v3/TestPausableMarket.t.sol +++ b/test-foundry/aave-v3/TestPausableMarket.t.sol @@ -92,19 +92,19 @@ contract TestPausableMarket is TestSetup { uint256 poolsLength = pools.length; for (uint256 i; i < poolsLength; ++i) { - hevm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); supplier1.supply(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); supplier1.borrow(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); supplier1.withdraw(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); supplier1.repay(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); supplier1.liquidate(pools[i], pools[0], address(supplier1), 1); } } @@ -112,7 +112,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableSupply() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(aDai, true); morpho.setIsSupplyPaused(aDai, true); @@ -124,7 +124,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(aDai, true); morpho.setIsBorrowPaused(aDai, true); @@ -136,7 +136,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableWithdraw() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(aDai, true); morpho.setIsWithdrawPaused(aDai, true); @@ -148,7 +148,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableRepay() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(aDai, true); morpho.setIsRepayPaused(aDai, true); @@ -160,7 +160,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(aDai, true); morpho.setIsLiquidateCollateralPaused(aDai, true); @@ -172,7 +172,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(aDai, true); morpho.setIsLiquidateBorrowPaused(aDai, true); @@ -180,4 +180,34 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); } + + function testShouldNotPauseSupplyOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsSupplyPaused(address(0), true); + } + + function testShouldNotPauseBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsBorrowPaused(address(0), true); + } + + function testShouldNotPauseWithdrawOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsWithdrawPaused(address(0), true); + } + + function testShouldNotPauseRepayMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsRepayPaused(address(0), true); + } + + function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateCollateralPaused(address(0), true); + } + + function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateBorrowPaused(address(0), true); + } } diff --git a/test-foundry/compound/TestPausableMarket.t.sol b/test-foundry/compound/TestPausableMarket.t.sol index d4675a25d..63983bb7a 100644 --- a/test-foundry/compound/TestPausableMarket.t.sol +++ b/test-foundry/compound/TestPausableMarket.t.sol @@ -92,19 +92,19 @@ contract TestPausableMarket is TestSetup { uint256 poolsLength = pools.length; for (uint256 i; i < poolsLength; ++i) { - hevm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); supplier1.supply(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); supplier1.borrow(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); supplier1.withdraw(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); supplier1.repay(pools[i], 1); - hevm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); supplier1.liquidate(pools[i], pools[0], address(supplier1), 1); } } @@ -112,7 +112,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableSupply() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(cDai, true); morpho.setIsSupplyPaused(cDai, true); @@ -124,7 +124,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(cDai, true); morpho.setIsBorrowPaused(cDai, true); @@ -136,7 +136,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableWithdraw() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(cDai, true); morpho.setIsWithdrawPaused(cDai, true); @@ -148,7 +148,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableRepay() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(cDai, true); morpho.setIsRepayPaused(cDai, true); @@ -160,7 +160,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(cDai, true); morpho.setIsLiquidateCollateralPaused(cDai, true); @@ -172,7 +172,7 @@ contract TestPausableMarket is TestSetup { function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { uint256 amount = 10_000 ether; - hevm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(cDai, true); morpho.setIsLiquidateBorrowPaused(cDai, true); @@ -180,4 +180,34 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); supplier1.liquidate(cDai, cUsdc, address(supplier2), amount); } + + function testShouldNotPauseSupplyOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsSupplyPaused(address(0), true); + } + + function testShouldNotPauseBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsBorrowPaused(address(0), true); + } + + function testShouldNotPauseWithdrawOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsWithdrawPaused(address(0), true); + } + + function testShouldNotPauseRepayMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsRepayPaused(address(0), true); + } + + function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateCollateralPaused(address(0), true); + } + + function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsLiquidateBorrowPaused(address(0), true); + } } From 1507948caa77811efd762b8106765fe0bbde0781 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 15:14:24 +0200 Subject: [PATCH 13/31] =?UTF-8?q?=E2=9C=85=20(#1302)=20Add=20missing=20tes?= =?UTF-8?q?ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestPausableMarket.t.sol | 5 ++++ test-foundry/aave-v3/TestPausableMarket.t.sol | 5 ++++ test-foundry/compound/TestGovernance.t.sol | 27 +++++++++++++++++++ .../compound/TestPausableMarket.t.sol | 5 ++++ 4 files changed, 42 insertions(+) diff --git a/test-foundry/aave-v2/TestPausableMarket.t.sol b/test-foundry/aave-v2/TestPausableMarket.t.sol index e3858628a..6ac782852 100644 --- a/test-foundry/aave-v2/TestPausableMarket.t.sol +++ b/test-foundry/aave-v2/TestPausableMarket.t.sol @@ -210,4 +210,9 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsLiquidateBorrowPaused(address(0), true); } + + function testShouldNotDeprecatedMarketWhenNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsDeprecated(address(0), true); + } } diff --git a/test-foundry/aave-v3/TestPausableMarket.t.sol b/test-foundry/aave-v3/TestPausableMarket.t.sol index fd8deaf32..3a45093d7 100644 --- a/test-foundry/aave-v3/TestPausableMarket.t.sol +++ b/test-foundry/aave-v3/TestPausableMarket.t.sol @@ -210,4 +210,9 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsLiquidateBorrowPaused(address(0), true); } + + function testShouldNotDeprecatedMarketWhenNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsDeprecated(address(0), true); + } } diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index 1f0ad9f46..fed5b954f 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -207,6 +207,33 @@ contract TestGovernance is TestSetup { assertTrue(morpho.isClaimRewardsPaused()); } + function testOnlyOwnerCanSetPauseStatusForAllMarkets() public { + hevm.prank(address(0)); + hevm.expectRevert("Ownable: caller is not the owner"); + morpho.setIsPausedForAllMarkets(true); + + morpho.setIsPausedForAllMarkets(true); + } + + function testOnlyOwnerShouldSetDeprecatedMarket() public { + hevm.prank(address(supplier1)); + hevm.expectRevert("Ownable: caller is not the owner"); + morpho.setIsDeprecated(cDai, true); + + hevm.prank(address(supplier2)); + hevm.expectRevert("Ownable: caller is not the owner"); + morpho.setIsDeprecated(cDai, true); + + morpho.setIsDeprecated(cDai, true); + + (, , , , , , , bool isDeprecated) = morpho.marketStatus(cDai); + assertTrue(isDeprecated); + + morpho.setIsDeprecated(cDai, false); + (, , , , , , , isDeprecated) = morpho.marketStatus(cDai); + assertFalse(isDeprecated); + } + function testOnlyOwnerCanIncreaseP2PDeltas() public { hevm.prank(address(supplier1)); hevm.expectRevert("Ownable: caller is not the owner"); diff --git a/test-foundry/compound/TestPausableMarket.t.sol b/test-foundry/compound/TestPausableMarket.t.sol index 63983bb7a..9f728901c 100644 --- a/test-foundry/compound/TestPausableMarket.t.sol +++ b/test-foundry/compound/TestPausableMarket.t.sol @@ -210,4 +210,9 @@ contract TestPausableMarket is TestSetup { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsLiquidateBorrowPaused(address(0), true); } + + function testShouldNotDeprecatedMarketWhenNotCreated() public { + vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.setIsDeprecated(address(0), true); + } } From 26d441e10a261092dd395cfd5ec234886b2e1b91 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 15:19:48 +0200 Subject: [PATCH 14/31] =?UTF-8?q?=E2=9C=85=20(#1302)=20Move=20only=20owner?= =?UTF-8?q?=20checks=20to=20governance=20test=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestGovernance.t.sol | 72 +++++++++++++++++++ test-foundry/aave-v2/TestPausableMarket.t.sol | 72 ------------------- test-foundry/aave-v3/TestGovernance.t.sol | 72 +++++++++++++++++++ test-foundry/aave-v3/TestPausableMarket.t.sol | 72 ------------------- test-foundry/compound/TestGovernance.t.sol | 72 +++++++++++++++++++ .../compound/TestPausableMarket.t.sol | 72 ------------------- 6 files changed, 216 insertions(+), 216 deletions(-) diff --git a/test-foundry/aave-v2/TestGovernance.t.sol b/test-foundry/aave-v2/TestGovernance.t.sol index 5ec2dd13a..7611a44b0 100644 --- a/test-foundry/aave-v2/TestGovernance.t.sol +++ b/test-foundry/aave-v2/TestGovernance.t.sol @@ -353,4 +353,76 @@ contract TestGovernance is TestSetup { function testFailCallIncreaseP2PDeltasFromImplementation() public { exitPositionsManager.increaseP2PDeltasLogic(aDai, 0); } + + function testOnlyOwnerShouldDisableSupply() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsSupplyPaused(aDai, true); + + morpho.setIsSupplyPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(aDai, amount); + } + + function testOnlyOwnerShouldDisableBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsBorrowPaused(aDai, true); + + morpho.setIsBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(aDai, amount); + } + + function testOnlyOwnerShouldDisableWithdraw() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsWithdrawPaused(aDai, true); + + morpho.setIsWithdrawPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(aDai, amount); + } + + function testOnlyOwnerShouldDisableRepay() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsRepayPaused(aDai, true); + + morpho.setIsRepayPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(aDai, amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateCollateralPaused(aDai, true); + + morpho.setIsLiquidateCollateralPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateBorrowPaused(aDai, true); + + morpho.setIsLiquidateBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); + } } diff --git a/test-foundry/aave-v2/TestPausableMarket.t.sol b/test-foundry/aave-v2/TestPausableMarket.t.sol index 6ac782852..968bd4114 100644 --- a/test-foundry/aave-v2/TestPausableMarket.t.sol +++ b/test-foundry/aave-v2/TestPausableMarket.t.sol @@ -109,78 +109,6 @@ contract TestPausableMarket is TestSetup { } } - function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsSupplyPaused(aDai, true); - - morpho.setIsSupplyPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(aDai, amount); - } - - function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsBorrowPaused(aDai, true); - - morpho.setIsBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(aDai, amount); - } - - function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsWithdrawPaused(aDai, true); - - morpho.setIsWithdrawPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(aDai, amount); - } - - function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsRepayPaused(aDai, true); - - morpho.setIsRepayPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(aDai, amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateCollateralPaused(aDai, true); - - morpho.setIsLiquidateCollateralPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateBorrowPaused(aDai, true); - - morpho.setIsLiquidateBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); - } - function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(0), true); diff --git a/test-foundry/aave-v3/TestGovernance.t.sol b/test-foundry/aave-v3/TestGovernance.t.sol index 1cecc315f..57b61d6c3 100644 --- a/test-foundry/aave-v3/TestGovernance.t.sol +++ b/test-foundry/aave-v3/TestGovernance.t.sol @@ -352,4 +352,76 @@ contract TestGovernance is TestSetup { function testFailCallIncreaseP2PDeltasFromImplementation() public { exitPositionsManager.increaseP2PDeltasLogic(aDai, 0); } + + function testOnlyOwnerShouldDisableSupply() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsSupplyPaused(aDai, true); + + morpho.setIsSupplyPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(aDai, amount); + } + + function testOnlyOwnerShouldDisableBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsBorrowPaused(aDai, true); + + morpho.setIsBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(aDai, amount); + } + + function testOnlyOwnerShouldDisableWithdraw() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsWithdrawPaused(aDai, true); + + morpho.setIsWithdrawPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(aDai, amount); + } + + function testOnlyOwnerShouldDisableRepay() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsRepayPaused(aDai, true); + + morpho.setIsRepayPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(aDai, amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateCollateralPaused(aDai, true); + + morpho.setIsLiquidateCollateralPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateBorrowPaused(aDai, true); + + morpho.setIsLiquidateBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); + } } diff --git a/test-foundry/aave-v3/TestPausableMarket.t.sol b/test-foundry/aave-v3/TestPausableMarket.t.sol index 3a45093d7..cd5788472 100644 --- a/test-foundry/aave-v3/TestPausableMarket.t.sol +++ b/test-foundry/aave-v3/TestPausableMarket.t.sol @@ -109,78 +109,6 @@ contract TestPausableMarket is TestSetup { } } - function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsSupplyPaused(aDai, true); - - morpho.setIsSupplyPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(aDai, amount); - } - - function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsBorrowPaused(aDai, true); - - morpho.setIsBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(aDai, amount); - } - - function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsWithdrawPaused(aDai, true); - - morpho.setIsWithdrawPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(aDai, amount); - } - - function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsRepayPaused(aDai, true); - - morpho.setIsRepayPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(aDai, amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateCollateralPaused(aDai, true); - - morpho.setIsLiquidateCollateralPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateBorrowPaused(aDai, true); - - morpho.setIsLiquidateBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); - } - function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(0), true); diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index fed5b954f..125a625e9 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -357,4 +357,76 @@ contract TestGovernance is TestSetup { function testFailCallIncreaseP2PDeltasFromImplementation() public { positionsManager.increaseP2PDeltasLogic(cDai, 0); } + + function testOnlyOwnerShouldDisableSupply() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsSupplyPaused(cDai, true); + + morpho.setIsSupplyPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(cDai, amount); + } + + function testOnlyOwnerShouldDisableBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsBorrowPaused(cDai, true); + + morpho.setIsBorrowPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(cDai, amount); + } + + function testOnlyOwnerShouldDisableWithdraw() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsWithdrawPaused(cDai, true); + + morpho.setIsWithdrawPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(cDai, amount); + } + + function testOnlyOwnerShouldDisableRepay() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsRepayPaused(cDai, true); + + morpho.setIsRepayPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(cDai, amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateCollateralPaused(cDai, true); + + morpho.setIsLiquidateCollateralPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(cUsdc, cDai, address(supplier2), amount); + } + + function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { + uint256 amount = 10_000 ether; + + vm.expectRevert("Ownable: caller is not the owner"); + supplier1.setIsLiquidateBorrowPaused(cDai, true); + + morpho.setIsLiquidateBorrowPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(cDai, cUsdc, address(supplier2), amount); + } } diff --git a/test-foundry/compound/TestPausableMarket.t.sol b/test-foundry/compound/TestPausableMarket.t.sol index 9f728901c..691e955cb 100644 --- a/test-foundry/compound/TestPausableMarket.t.sol +++ b/test-foundry/compound/TestPausableMarket.t.sol @@ -109,78 +109,6 @@ contract TestPausableMarket is TestSetup { } } - function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsSupplyPaused(cDai, true); - - morpho.setIsSupplyPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(cDai, amount); - } - - function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsBorrowPaused(cDai, true); - - morpho.setIsBorrowPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(cDai, amount); - } - - function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsWithdrawPaused(cDai, true); - - morpho.setIsWithdrawPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(cDai, amount); - } - - function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsRepayPaused(cDai, true); - - morpho.setIsRepayPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(cDai, amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateCollateralPaused(cDai, true); - - morpho.setIsLiquidateCollateralPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(cUsdc, cDai, address(supplier2), amount); - } - - function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - - vm.expectRevert("Ownable: caller is not the owner"); - supplier1.setIsLiquidateBorrowPaused(cDai, true); - - morpho.setIsLiquidateBorrowPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(cDai, cUsdc, address(supplier2), amount); - } - function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(0), true); From 74fbc843ff7ac75e4132c0b560befda5a84e1ecc Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 16:53:54 +0200 Subject: [PATCH 15/31] =?UTF-8?q?=E2=9C=A8=20(#1303)=20Liquidate=20full=20?= =?UTF-8?q?amount=20when=20market=20is=20deprecated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/ExitPositionsManager.sol | 27 +++++++++++----------- contracts/aave-v3/ExitPositionsManager.sol | 6 ++--- contracts/compound/PositionsManager.sol | 10 ++++---- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index 7520c0b3e..1989ed998 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -128,6 +128,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { uint256 collateralTokenUnit; // The collateral token unit considering its decimals. uint256 borrowedReserveDecimals; // The number of decimals of the borrowed asset in the reserve. uint256 borrowedTokenUnit; // The unit of borrowed token considering its decimals. + uint256 closeFactor; // The close factor used during the liquidation. } // Struct to avoid stack too deep. @@ -221,11 +222,13 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { _updateIndexes(_poolTokenBorrowed); _updateIndexes(_poolTokenCollateral); - if (!borrowedMarket.isDeprecated && !_liquidationAllowed(_borrower)) - revert UnauthorisedLiquidate(); + LiquidateVars memory vars; + if (!borrowedMarket.isDeprecated) { + vars.closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; + if (!_liquidationAllowed(_borrower)) revert UnauthorisedLiquidate(); + } else vars.closeFactor = MAX_BASIS_POINTS; // Allow liquidation of the whole debt. address tokenBorrowedAddress = market[_poolTokenBorrowed].underlyingToken; - uint256 amountToLiquidate = Math.min( _amount, _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower).percentMul( @@ -237,16 +240,13 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { IPriceOracleGetter oracle = IPriceOracleGetter(addressesProvider.getPriceOracle()); - LiquidateVars memory vars; - { - ILendingPool poolMem = pool; - (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem - .getConfiguration(tokenCollateralAddress) - .getParamsMemory(); - (, , , vars.borrowedReserveDecimals, ) = poolMem - .getConfiguration(tokenBorrowedAddress) - .getParamsMemory(); - } + ILendingPool poolMem = pool; + (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem + .getConfiguration(tokenCollateralAddress) + .getParamsMemory(); + (, , , vars.borrowedReserveDecimals, ) = poolMem + .getConfiguration(tokenBorrowedAddress) + .getParamsMemory(); unchecked { vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; @@ -316,7 +316,6 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { emit P2PBorrowDeltaUpdated(_poolToken, deltasMem.p2pBorrowDelta); ERC20 underlyingToken = ERC20(market[_poolToken].underlyingToken); - _borrowFromPool(underlyingToken, _amount); _supplyToPool(underlyingToken, _amount); diff --git a/contracts/aave-v3/ExitPositionsManager.sol b/contracts/aave-v3/ExitPositionsManager.sol index 0b78bd29c..0c7dadf85 100644 --- a/contracts/aave-v3/ExitPositionsManager.sol +++ b/contracts/aave-v3/ExitPositionsManager.sol @@ -133,8 +133,8 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { uint256 borrowedTokenUnit; // The unit of borrowed token considering its decimals. uint256 borrowedTokenPrice; // The price of the borrowed token. uint256 amountToLiquidate; // The amount of debt token to repay. - uint256 closeFactor; - bool liquidationAllowed; + uint256 closeFactor; // The close factor used during the liquidation. + bool liquidationAllowed; // Whether the liquidation is allowed or not. } // Struct to avoid stack too deep. @@ -232,7 +232,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { if (!borrowedMarket.isDeprecated) { (vars.closeFactor, vars.liquidationAllowed) = _liquidationAllowed(_borrower); if (!vars.liquidationAllowed) revert UnauthorisedLiquidate(); - } else vars.closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; + } else vars.closeFactor = MAX_BASIS_POINTS; // Allow liquidation of the whole debt. vars.amountToLiquidate = Math.min( _amount, diff --git a/contracts/compound/PositionsManager.sol b/contracts/compound/PositionsManager.sol index a442e2c82..8dbd24694 100644 --- a/contracts/compound/PositionsManager.sol +++ b/contracts/compound/PositionsManager.sol @@ -500,14 +500,16 @@ contract PositionsManager is IPositionsManager, MatchingEngine { _updateP2PIndexes(_poolTokenBorrowed); _updateP2PIndexes(_poolTokenCollateral); - if (!borrowedMarket.isDeprecated && !_isLiquidatable(_borrower, address(0), 0, 0)) - revert UnauthorisedLiquidate(); + uint256 closeFactor; + if (!borrowedMarket.isDeprecated) { + closeFactor = comptroller.closeFactorMantissa(); + if (!_isLiquidatable(_borrower, address(0), 0, 0)) revert UnauthorisedLiquidate(); + } else closeFactor = WAD; // Allow liquidation of the whole debt. LiquidateVars memory vars; vars.borrowBalance = _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower); - if (_amount > vars.borrowBalance.mul(comptroller.closeFactorMantissa())) - revert AmountAboveWhatAllowedToRepay(); // Same mechanism as Compound. Liquidator cannot repay more than part of the debt (cf close factor on Compound). + if (_amount > vars.borrowBalance.mul(closeFactor)) revert AmountAboveWhatAllowedToRepay(); // Same mechanism as Compound. Liquidator cannot repay more than part of the debt (cf close factor on Compound). _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, _amount, 0); From cca205cfe47aa33ffeeb7ad900f71da5ad85c8c5 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 16:59:03 +0200 Subject: [PATCH 16/31] =?UTF-8?q?=E2=9C=85=20(#1303)=20Update=20test=20to?= =?UTF-8?q?=20liquidate=20full=20amount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestLiquidate.t.sol | 2 +- test-foundry/aave-v3/TestLiquidate.t.sol | 2 +- test-foundry/compound/TestLiquidate.t.sol | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test-foundry/aave-v2/TestLiquidate.t.sol b/test-foundry/aave-v2/TestLiquidate.t.sol index 11e80115d..c52389cd0 100644 --- a/test-foundry/aave-v2/TestLiquidate.t.sol +++ b/test-foundry/aave-v2/TestLiquidate.t.sol @@ -40,7 +40,7 @@ contract TestLiquidate is TestSetup { (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate - uint256 toRepay = amount / 2; + uint256 toRepay = amount; // Full liquidation. User liquidator = borrower3; liquidator.approve(dai, address(morpho), toRepay); liquidator.liquidate(aDai, aUsdc, address(borrower1), toRepay); diff --git a/test-foundry/aave-v3/TestLiquidate.t.sol b/test-foundry/aave-v3/TestLiquidate.t.sol index 2bc4ab420..8d68bbad0 100644 --- a/test-foundry/aave-v3/TestLiquidate.t.sol +++ b/test-foundry/aave-v3/TestLiquidate.t.sol @@ -40,7 +40,7 @@ contract TestLiquidate is TestSetup { (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate - uint256 toRepay = amount / 2; + uint256 toRepay = amount; // Full liquidation. User liquidator = borrower3; liquidator.approve(dai, address(morpho), toRepay); liquidator.liquidate(aDai, aUsdc, address(borrower1), toRepay); diff --git a/test-foundry/compound/TestLiquidate.t.sol b/test-foundry/compound/TestLiquidate.t.sol index 358ef639a..af1c37f0d 100644 --- a/test-foundry/compound/TestLiquidate.t.sol +++ b/test-foundry/compound/TestLiquidate.t.sol @@ -41,7 +41,7 @@ contract TestLiquidate is TestSetup { (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(cDai, address(borrower1)); // Liquidate - uint256 toRepay = amount / 3; + uint256 toRepay = amount; // Full liquidation. User liquidator = borrower3; liquidator.approve(dai, address(morpho), toRepay); liquidator.liquidate(cDai, cUsdc, address(borrower1), toRepay); From 9098753f015968d394002d885ee09b16e07296c4 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Wed, 21 Sep 2022 17:03:31 +0200 Subject: [PATCH 17/31] Re-add hardhat verification capabilities --- .env.example | 1 + .tenderly/config.yaml | 1 + Makefile | 5 - .../common/test}/FakeToken.sol | 0 hardhat.config.ts | 47 +++- package.json | 7 +- test/upgrades/stEth.spec.ts | 4 +- yarn.lock | 264 +++++++++++++++++- 8 files changed, 307 insertions(+), 22 deletions(-) create mode 100644 .tenderly/config.yaml rename {test/contracts => contracts/common/test}/FakeToken.sol (100%) diff --git a/.env.example b/.env.example index 411fa475d..b994bd7a7 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ NETWORK=eth-mainnet DEPLOYER_PRIVATE_KEY= +TENDERLY_SECRET_KEY= ALCHEMY_KEY= diff --git a/.tenderly/config.yaml b/.tenderly/config.yaml new file mode 100644 index 000000000..3a98ced89 --- /dev/null +++ b/.tenderly/config.yaml @@ -0,0 +1 @@ +access_key: ${{ TENDERLY_SECRET_KEY }} diff --git a/Makefile b/Makefile index 7ff4fc6cf..b76564f02 100644 --- a/Makefile +++ b/Makefile @@ -127,10 +127,5 @@ storage-layout-check: config: @forge config -flatten-tests: - @mkdir -p test/contracts/upgrades/ - @FOUNDRY_SRC=contracts forge flatten contracts/common/rewards-distribution/RewardsDistributor.sol > test/contracts/upgrades/RewardsDistributor.flattened.sol - @FOUNDRY_SRC=contracts forge flatten contracts/aave-v2/InterestRatesManager.sol > test/contracts/upgrades/InterestRatesManager.flattened.sol - .PHONY: test config test-common foundry diff --git a/test/contracts/FakeToken.sol b/contracts/common/test/FakeToken.sol similarity index 100% rename from test/contracts/FakeToken.sol rename to contracts/common/test/FakeToken.sol diff --git a/hardhat.config.ts b/hardhat.config.ts index 2787349e7..05393d5fd 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,25 +1,66 @@ import * as dotenv from "dotenv"; +import fs from "fs"; +import "hardhat-preprocessor"; import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-chai-matchers"; import "@nomiclabs/hardhat-ethers"; +import "@nomiclabs/hardhat-etherscan"; +import "@tenderly/hardhat-tenderly"; + +// Support for foundry remappings: https://book.getfoundry.sh/config/hardhat +const remappings = fs + .readFileSync("remappings.txt", "utf8") + .split("\n") + .filter(Boolean) + .map((line) => line.trim().split("=")); dotenv.config({ path: "./.env.local" }); const config: HardhatUserConfig = { - solidity: "0.8.13", defaultNetwork: "hardhat", networks: { hardhat: { forking: { enabled: true, url: `https://${process.env.NETWORK}.g.alchemy.com/v2/${process.env.ALCHEMY_KEY}`, - blockNumber: Number(process.env.BLOCK_NUMBER ?? 15_580_517), + blockNumber: Number(process.env.BLOCK_NUMBER ?? 15_500_000), }, }, }, + preprocess: { + eachLine: () => ({ + transform: (line) => { + if (line.match(/^\s*import /i)) remappings.forEach(([find, replace]) => (line = line.replace(find, replace))); + + return line; + }, + }), + }, paths: { - sources: "./test/contracts/", + sources: "./contracts/", + }, + solidity: { + compilers: [ + { + version: "0.8.10", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: "0.8.13", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], }, }; diff --git a/package.json b/package.json index 4c4f882e8..69c8a02ee 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "description": "Core contracts of the Morpho Protocol V1.", "scripts": { - "test": "make flatten-tests && NETWORK=eth-mainnet BLOCK_NUMBER=15580517 hardhat test test/*.spec.ts", - "test:upgrade:stEth": "make flatten-tests && NETWORK=eth-mainnet hardhat test test/upgrades/stEth.spec.ts", + "test": "NETWORK=eth-mainnet hardhat test test/*.spec.ts", + "test:upgrade:stEth": "NETWORK=eth-mainnet BLOCK_NUMBER=15580517 hardhat test test/upgrades/stEth.spec.ts", "lint": "yarn lint:sol && yarn lint:ts", "lint:ts": "eslint . --ext .ts", "lint:sol": "solhint 'contracts/**/*.sol'", @@ -28,7 +28,9 @@ "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-network-helpers": "1.0.6", "@nomiclabs/hardhat-ethers": "2.1.1", + "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "2.0.3", + "@tenderly/hardhat-tenderly": "^1.1.6", "@trivago/prettier-plugin-sort-imports": "^3.3.0", "@types/chai": "^4.3.3", "@types/mocha": "^9.1.1", @@ -42,6 +44,7 @@ "eslint-plugin-prettier": "^4.2.1", "ethers": "5.7.1", "hardhat": "2.11.2", + "hardhat-preprocessor": "^0.1.5", "husky": "^8.0.1", "merkletreejs": "^0.2.32", "prettier": "^2.7.1", diff --git a/test/upgrades/stEth.spec.ts b/test/upgrades/stEth.spec.ts index f05a2b296..01b4ecffd 100644 --- a/test/upgrades/stEth.spec.ts +++ b/test/upgrades/stEth.spec.ts @@ -51,7 +51,9 @@ describe("Check ugprade", () => { const morpho = MorphoAaveV2__factory.connect("0x777777c9898d384f785ee44acfe945efdff5f3e0", hre.ethers.provider); const deployUpgrade = async () => { - const InterestRatesManagerUpgraded = await hre.ethers.getContractFactory("InterestRatesManager"); + const InterestRatesManagerUpgraded = await hre.ethers.getContractFactory( + "contracts/aave-v2/InterestRatesManager.sol:InterestRatesManager" + ); const interestRatesManagerUpgraded = await InterestRatesManagerUpgraded.deploy(); await interestRatesManagerUpgraded.deployed(); diff --git a/yarn.lock b/yarn.lock index a163d95d1..a143aaeea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -332,7 +332,7 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -1118,11 +1118,27 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" -"@nomiclabs/hardhat-ethers@2.1.1": +"@nomiclabs/hardhat-ethers@2.1.1", "@nomiclabs/hardhat-ethers@^2.0.6": version "2.1.1" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== +"@nomiclabs/hardhat-etherscan@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz#7137554862b3b1c914f1b1bf110f0529fd2dec53" + integrity sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^5.0.2" + chalk "^2.4.2" + debug "^4.1.1" + fs-extra "^7.0.1" + lodash "^4.17.11" + semver "^6.3.0" + table "^6.8.0" + undici "^5.4.0" + "@nomiclabs/hardhat-waffle@2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" @@ -1245,6 +1261,19 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@tenderly/hardhat-tenderly@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.6.tgz#b706c7c337ebae7ecd314df3e8ee3d244ed1de08" + integrity sha512-B6vVdDAxQwjahrvsxjNirJW2ynDENLBD8LLFy8sYVJ+RCb4B8HXT1IGSceqpySNPr2iLYcD5cKC/YCHX+/O48Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@nomiclabs/hardhat-ethers" "^2.0.6" + axios "^0.21.1" + ethers "^5.6.8" + fs-extra "^9.0.1" + hardhat-deploy "^0.11.10" + js-yaml "^3.14.0" + "@trivago/prettier-plugin-sort-imports@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-3.3.0.tgz#ee4e9ec1d8e3076b95fcb94311f42f7a61eecd37" @@ -1348,6 +1377,11 @@ dependencies: "@types/node" "*" +"@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1548,6 +1582,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1654,6 +1698,11 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" @@ -1668,6 +1717,23 @@ async@^2.4.0: dependencies: lodash "^4.17.14" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1887,6 +1953,14 @@ catering@^2.1.0, catering@^2.1.1: resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + chai-as-promised@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" @@ -1916,7 +1990,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1934,7 +2008,7 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -chokidar@3.5.3, chokidar@^3.4.0: +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2023,6 +2097,13 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" @@ -2159,6 +2240,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -2226,7 +2312,12 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enquirer@^2.3.0: +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +enquirer@^2.3.0, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -2534,7 +2625,7 @@ ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@5.7.1, ethers@^5.7.0: +ethers@5.7.1, ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== @@ -2721,11 +2812,32 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + follow-redirects@^1.12.1: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -2747,6 +2859,15 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -2756,6 +2877,16 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + 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" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2862,7 +2993,7 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -2872,6 +3003,32 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +hardhat-deploy@^0.11.10: + version "0.11.15" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.15.tgz#5b5f6f762caa3c4d30e6e2800379ea7817a861b5" + integrity sha512-7e/GfVLmSXlcVePVFbC/xZ8mD97ChR6gHeUbejWMvzXpZ6I5bjSPZuaH5AebRRlb/6LjeIrN1+bKnayY0Sw9aA== + dependencies: + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.5.3" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-web3 "^0.8.1" + +hardhat-preprocessor@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/hardhat-preprocessor/-/hardhat-preprocessor-0.1.5.tgz#75b22641fd6a680739c995d03bd5f7868eb72144" + integrity sha512-j8m44mmPxpxAAd0G8fPHRHOas/INZdzptSur0TNJvMEGcFdLDhbHHxBcqZVQ/bmiW42q4gC60AP4CXn9EF018g== + dependencies: + murmur-128 "^0.2.1" + hardhat@2.11.2: version "2.11.2" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" @@ -3048,6 +3205,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3193,7 +3355,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -3216,6 +3378,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -3240,6 +3407,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keccak@^3.0.0, keccak@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" @@ -3313,6 +3489,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -3357,6 +3538,11 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -3409,6 +3595,18 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -3500,6 +3698,15 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -3540,6 +3747,11 @@ node-releases@^2.0.6: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -3781,7 +3993,7 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@^6.7.0: +qs@^6.7.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -3841,7 +4053,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -4066,6 +4278,15 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -4167,7 +4388,7 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4252,6 +4473,17 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +table@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -4386,6 +4618,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4551,3 +4788,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.8.1.tgz#db289d8f6caf61f4d5ddc471fa3448d93208dc14" + integrity sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw== From f238267ee9949fb7b34b99e9a031ff4faf751170 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 17:04:52 +0200 Subject: [PATCH 18/31] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(#1303)=20Small=20op?= =?UTF-8?q?ti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/ExitPositionsManager.sol | 2 +- contracts/compound/PositionsManager.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index 1989ed998..c3ff7e535 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -224,8 +224,8 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { LiquidateVars memory vars; if (!borrowedMarket.isDeprecated) { - vars.closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; if (!_liquidationAllowed(_borrower)) revert UnauthorisedLiquidate(); + vars.closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; } else vars.closeFactor = MAX_BASIS_POINTS; // Allow liquidation of the whole debt. address tokenBorrowedAddress = market[_poolTokenBorrowed].underlyingToken; diff --git a/contracts/compound/PositionsManager.sol b/contracts/compound/PositionsManager.sol index 8dbd24694..09d6b9fc0 100644 --- a/contracts/compound/PositionsManager.sol +++ b/contracts/compound/PositionsManager.sol @@ -502,8 +502,8 @@ contract PositionsManager is IPositionsManager, MatchingEngine { uint256 closeFactor; if (!borrowedMarket.isDeprecated) { - closeFactor = comptroller.closeFactorMantissa(); if (!_isLiquidatable(_borrower, address(0), 0, 0)) revert UnauthorisedLiquidate(); + closeFactor = comptroller.closeFactorMantissa(); } else closeFactor = WAD; // Allow liquidation of the whole debt. LiquidateVars memory vars; From b0c51a29a69953bafd8f11a1fd44a1e48635d5d0 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 17:12:08 +0200 Subject: [PATCH 19/31] =?UTF-8?q?=F0=9F=A9=B9=20(#1303)=20Fix=20refactor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/ExitPositionsManager.sol | 4 +--- contracts/compound/PositionsManager.sol | 11 ++++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index c3ff7e535..29f972a63 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -231,9 +231,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { address tokenBorrowedAddress = market[_poolTokenBorrowed].underlyingToken; uint256 amountToLiquidate = Math.min( _amount, - _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower).percentMul( - DEFAULT_LIQUIDATION_CLOSE_FACTOR - ) // Max liquidatable debt. + _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower).percentMul(vars.closeFactor) // Max liquidatable debt. ); address tokenCollateralAddress = market[_poolTokenCollateral].underlyingToken; diff --git a/contracts/compound/PositionsManager.sol b/contracts/compound/PositionsManager.sol index 09d6b9fc0..fc9b2ada1 100644 --- a/contracts/compound/PositionsManager.sol +++ b/contracts/compound/PositionsManager.sol @@ -218,6 +218,7 @@ contract PositionsManager is IPositionsManager, MatchingEngine { uint256 supplyBalance; uint256 borrowedPrice; uint256 amountToSeize; + uint256 closeFactor; } /// LOGIC /// @@ -500,16 +501,16 @@ contract PositionsManager is IPositionsManager, MatchingEngine { _updateP2PIndexes(_poolTokenBorrowed); _updateP2PIndexes(_poolTokenCollateral); - uint256 closeFactor; + LiquidateVars memory vars; if (!borrowedMarket.isDeprecated) { if (!_isLiquidatable(_borrower, address(0), 0, 0)) revert UnauthorisedLiquidate(); - closeFactor = comptroller.closeFactorMantissa(); - } else closeFactor = WAD; // Allow liquidation of the whole debt. + vars.closeFactor = comptroller.closeFactorMantissa(); + } else vars.closeFactor = WAD; // Allow liquidation of the whole debt. - LiquidateVars memory vars; vars.borrowBalance = _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower); - if (_amount > vars.borrowBalance.mul(closeFactor)) revert AmountAboveWhatAllowedToRepay(); // Same mechanism as Compound. Liquidator cannot repay more than part of the debt (cf close factor on Compound). + if (_amount > vars.borrowBalance.mul(vars.closeFactor)) + revert AmountAboveWhatAllowedToRepay(); // Same mechanism as Compound. Liquidator cannot repay more than part of the debt (cf close factor on Compound). _safeRepayLogic(_poolTokenBorrowed, msg.sender, _borrower, _amount, 0); From 409816726a84f2eb7c5b7bff668e5b2bbb99ee8d Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 17:41:40 +0200 Subject: [PATCH 20/31] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(#1303)=20Avoid=20st?= =?UTF-8?q?ack=20too=20deep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/ExitPositionsManager.sol | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index 29f972a63..76709eeda 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -238,13 +238,15 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { IPriceOracleGetter oracle = IPriceOracleGetter(addressesProvider.getPriceOracle()); - ILendingPool poolMem = pool; - (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem - .getConfiguration(tokenCollateralAddress) - .getParamsMemory(); - (, , , vars.borrowedReserveDecimals, ) = poolMem - .getConfiguration(tokenBorrowedAddress) - .getParamsMemory(); + { + ILendingPool poolMem = pool; + (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem + .getConfiguration(tokenCollateralAddress) + .getParamsMemory(); + (, , , vars.borrowedReserveDecimals, ) = poolMem + .getConfiguration(tokenBorrowedAddress) + .getParamsMemory(); + } unchecked { vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; From ce805c6f63bffcd362ed21c442d6e03822f81478 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 18:37:50 +0200 Subject: [PATCH 21/31] =?UTF-8?q?=E2=9C=A8=20(#1302)=20isMarketCreated=20o?= =?UTF-8?q?n=20increaseP2PDeltas=20too?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/MorphoGovernance.sol | 6 +++++- contracts/aave-v3/MorphoGovernance.sol | 6 +++++- contracts/compound/MorphoGovernance.sol | 6 +++++- test-foundry/aave-v2/TestGovernance.t.sol | 5 +++++ test-foundry/aave-v3/TestGovernance.t.sol | 5 +++++ test-foundry/compound/TestGovernance.t.sol | 5 +++++ 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/contracts/aave-v2/MorphoGovernance.sol b/contracts/aave-v2/MorphoGovernance.sol index 06c906c20..bec5c0384 100644 --- a/contracts/aave-v2/MorphoGovernance.sol +++ b/contracts/aave-v2/MorphoGovernance.sol @@ -418,7 +418,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// In this case, consider calling multiple times this function. /// @param _poolToken The address of the market on which to create deltas. /// @param _amount The amount to add to the deltas (in underlying). - function increaseP2PDeltas(address _poolToken, uint256 _amount) external onlyOwner { + function increaseP2PDeltas(address _poolToken, uint256 _amount) + external + onlyOwner + isMarketCreated(_poolToken) + { address(exitPositionsManager).functionDelegateCall( abi.encodeWithSelector( IExitPositionsManager.increaseP2PDeltasLogic.selector, diff --git a/contracts/aave-v3/MorphoGovernance.sol b/contracts/aave-v3/MorphoGovernance.sol index ec4f85642..e5e49b2b9 100644 --- a/contracts/aave-v3/MorphoGovernance.sol +++ b/contracts/aave-v3/MorphoGovernance.sol @@ -418,7 +418,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// In this case, consider calling multiple times this function. /// @param _poolToken The address of the market on which to create deltas. /// @param _amount The amount to add to the deltas (in underlying). - function increaseP2PDeltas(address _poolToken, uint256 _amount) external onlyOwner { + function increaseP2PDeltas(address _poolToken, uint256 _amount) + external + onlyOwner + isMarketCreated(_poolToken) + { address(exitPositionsManager).functionDelegateCall( abi.encodeWithSelector( IExitPositionsManager.increaseP2PDeltasLogic.selector, diff --git a/contracts/compound/MorphoGovernance.sol b/contracts/compound/MorphoGovernance.sol index 249a5a0d9..4947a7b75 100644 --- a/contracts/compound/MorphoGovernance.sol +++ b/contracts/compound/MorphoGovernance.sol @@ -381,7 +381,11 @@ abstract contract MorphoGovernance is MorphoUtils { /// In this case, consider calling multiple times this function. /// @param _poolToken The address of the market on which to create deltas. /// @param _amount The amount to add to the deltas (in underlying). - function increaseP2PDeltas(address _poolToken, uint256 _amount) external onlyOwner { + function increaseP2PDeltas(address _poolToken, uint256 _amount) + external + onlyOwner + isMarketCreated(_poolToken) + { address(positionsManager).functionDelegateCall( abi.encodeWithSelector( IPositionsManager.increaseP2PDeltasLogic.selector, diff --git a/test-foundry/aave-v2/TestGovernance.t.sol b/test-foundry/aave-v2/TestGovernance.t.sol index 7611a44b0..c507dea21 100644 --- a/test-foundry/aave-v2/TestGovernance.t.sol +++ b/test-foundry/aave-v2/TestGovernance.t.sol @@ -242,6 +242,11 @@ contract TestGovernance is TestSetup { morpho.increaseP2PDeltas(aDai, 1 ether); } + function testShouldIncreaseP2PDeltasWhenMarketNotCreated() public { + hevm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.increaseP2PDeltas(address(1), 0); + } + function testIncreaseP2PDeltas() public { uint256 supplyAmount = 100 ether; uint256 borrowAmount = 50 ether; diff --git a/test-foundry/aave-v3/TestGovernance.t.sol b/test-foundry/aave-v3/TestGovernance.t.sol index 57b61d6c3..31656889e 100644 --- a/test-foundry/aave-v3/TestGovernance.t.sol +++ b/test-foundry/aave-v3/TestGovernance.t.sol @@ -241,6 +241,11 @@ contract TestGovernance is TestSetup { morpho.increaseP2PDeltas(aDai, 1 ether); } + function testShouldIncreaseP2PDeltasWhenMarketNotCreated() public { + hevm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.increaseP2PDeltas(address(1), 0); + } + function testIncreaseP2PDeltas() public { uint256 supplyAmount = 100 ether; uint256 borrowAmount = 50 ether; diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index 125a625e9..02be79790 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -242,6 +242,11 @@ contract TestGovernance is TestSetup { morpho.increaseP2PDeltas(cDai, 0); } + function testShouldIncreaseP2PDeltasWhenMarketNotCreated() public { + hevm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); + morpho.increaseP2PDeltas(address(1), 0); + } + function testIncreaseP2PDeltas() public { uint256 supplyAmount = 100 ether; uint256 borrowAmount = 50 ether; From c79222911bc7f00d571cce00b89b9d57978314f4 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 18:42:43 +0200 Subject: [PATCH 22/31] =?UTF-8?q?=E2=9C=85=20(#1302)=20address(0)=20->=20a?= =?UTF-8?q?ddress(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestPausableMarket.t.sol | 14 +++++++------- test-foundry/aave-v3/TestPausableMarket.t.sol | 14 +++++++------- test-foundry/compound/TestPausableMarket.t.sol | 14 +++++++------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/test-foundry/aave-v2/TestPausableMarket.t.sol b/test-foundry/aave-v2/TestPausableMarket.t.sol index 968bd4114..a4c273225 100644 --- a/test-foundry/aave-v2/TestPausableMarket.t.sol +++ b/test-foundry/aave-v2/TestPausableMarket.t.sol @@ -111,36 +111,36 @@ contract TestPausableMarket is TestSetup { function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsSupplyPaused(address(0), true); + morpho.setIsSupplyPaused(address(1), true); } function testShouldNotPauseBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsBorrowPaused(address(0), true); + morpho.setIsBorrowPaused(address(1), true); } function testShouldNotPauseWithdrawOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsWithdrawPaused(address(0), true); + morpho.setIsWithdrawPaused(address(1), true); } function testShouldNotPauseRepayMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsRepayPaused(address(0), true); + morpho.setIsRepayPaused(address(1), true); } function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateCollateralPaused(address(0), true); + morpho.setIsLiquidateCollateralPaused(address(1), true); } function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateBorrowPaused(address(0), true); + morpho.setIsLiquidateBorrowPaused(address(1), true); } function testShouldNotDeprecatedMarketWhenNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsDeprecated(address(0), true); + morpho.setIsDeprecated(address(1), true); } } diff --git a/test-foundry/aave-v3/TestPausableMarket.t.sol b/test-foundry/aave-v3/TestPausableMarket.t.sol index cd5788472..6846e69f3 100644 --- a/test-foundry/aave-v3/TestPausableMarket.t.sol +++ b/test-foundry/aave-v3/TestPausableMarket.t.sol @@ -111,36 +111,36 @@ contract TestPausableMarket is TestSetup { function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsSupplyPaused(address(0), true); + morpho.setIsSupplyPaused(address(1), true); } function testShouldNotPauseBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsBorrowPaused(address(0), true); + morpho.setIsBorrowPaused(address(1), true); } function testShouldNotPauseWithdrawOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsWithdrawPaused(address(0), true); + morpho.setIsWithdrawPaused(address(1), true); } function testShouldNotPauseRepayMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsRepayPaused(address(0), true); + morpho.setIsRepayPaused(address(1), true); } function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateCollateralPaused(address(0), true); + morpho.setIsLiquidateCollateralPaused(address(1), true); } function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateBorrowPaused(address(0), true); + morpho.setIsLiquidateBorrowPaused(address(1), true); } function testShouldNotDeprecatedMarketWhenNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsDeprecated(address(0), true); + morpho.setIsDeprecated(address(1), true); } } diff --git a/test-foundry/compound/TestPausableMarket.t.sol b/test-foundry/compound/TestPausableMarket.t.sol index 691e955cb..77ce77597 100644 --- a/test-foundry/compound/TestPausableMarket.t.sol +++ b/test-foundry/compound/TestPausableMarket.t.sol @@ -111,36 +111,36 @@ contract TestPausableMarket is TestSetup { function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsSupplyPaused(address(0), true); + morpho.setIsSupplyPaused(address(1), true); } function testShouldNotPauseBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsBorrowPaused(address(0), true); + morpho.setIsBorrowPaused(address(1), true); } function testShouldNotPauseWithdrawOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsWithdrawPaused(address(0), true); + morpho.setIsWithdrawPaused(address(1), true); } function testShouldNotPauseRepayMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsRepayPaused(address(0), true); + morpho.setIsRepayPaused(address(1), true); } function testShouldNotPauseLiquidateCollateralOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateCollateralPaused(address(0), true); + morpho.setIsLiquidateCollateralPaused(address(1), true); } function testShouldNotPauseLiquidateBorrowOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsLiquidateBorrowPaused(address(0), true); + morpho.setIsLiquidateBorrowPaused(address(1), true); } function testShouldNotDeprecatedMarketWhenNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); - morpho.setIsDeprecated(address(0), true); + morpho.setIsDeprecated(address(1), true); } } From 0e96863aa1a6924fb202fad0e53e441cc1513281 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 21 Sep 2022 22:31:49 +0200 Subject: [PATCH 23/31] =?UTF-8?q?=E2=9C=85=20(#1302)=20Update=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestGovernance.t.sol | 30 ------------ test-foundry/aave-v2/TestPausableMarket.t.sol | 48 +++++++++++++++++++ test-foundry/aave-v3/TestGovernance.t.sol | 30 ------------ test-foundry/aave-v3/TestPausableMarket.t.sol | 48 +++++++++++++++++++ test-foundry/compound/TestGovernance.t.sol | 30 ------------ .../compound/TestPausableMarket.t.sol | 48 +++++++++++++++++++ 6 files changed, 144 insertions(+), 90 deletions(-) diff --git a/test-foundry/aave-v2/TestGovernance.t.sol b/test-foundry/aave-v2/TestGovernance.t.sol index c507dea21..939a41bbf 100644 --- a/test-foundry/aave-v2/TestGovernance.t.sol +++ b/test-foundry/aave-v2/TestGovernance.t.sol @@ -360,74 +360,44 @@ contract TestGovernance is TestSetup { } function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(aDai, true); morpho.setIsSupplyPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(aDai, amount); } function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(aDai, true); morpho.setIsBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(aDai, amount); } function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(aDai, true); morpho.setIsWithdrawPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(aDai, amount); } function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(aDai, true); morpho.setIsRepayPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(aDai, amount); } function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(aDai, true); morpho.setIsLiquidateCollateralPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); } function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(aDai, true); morpho.setIsLiquidateBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); } } diff --git a/test-foundry/aave-v2/TestPausableMarket.t.sol b/test-foundry/aave-v2/TestPausableMarket.t.sol index a4c273225..6324c9b7d 100644 --- a/test-foundry/aave-v2/TestPausableMarket.t.sol +++ b/test-foundry/aave-v2/TestPausableMarket.t.sol @@ -109,6 +109,54 @@ contract TestPausableMarket is TestSetup { } } + function testPauseSupply() public { + uint256 amount = 10_000 ether; + morpho.setIsSupplyPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(aDai, amount); + } + + function testPauseBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(aDai, amount); + } + + function testPauseWithdraw() public { + uint256 amount = 10_000 ether; + morpho.setIsWithdrawPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(aDai, amount); + } + + function testPauseRepay() public { + uint256 amount = 10_000 ether; + morpho.setIsRepayPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(aDai, amount); + } + + function testPauseLiquidateCollateral() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateCollateralPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); + } + + function testPauseLiquidateBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); + } + function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(1), true); diff --git a/test-foundry/aave-v3/TestGovernance.t.sol b/test-foundry/aave-v3/TestGovernance.t.sol index 31656889e..79854fb78 100644 --- a/test-foundry/aave-v3/TestGovernance.t.sol +++ b/test-foundry/aave-v3/TestGovernance.t.sol @@ -359,74 +359,44 @@ contract TestGovernance is TestSetup { } function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(aDai, true); morpho.setIsSupplyPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(aDai, amount); } function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(aDai, true); morpho.setIsBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(aDai, amount); } function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(aDai, true); morpho.setIsWithdrawPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(aDai, amount); } function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(aDai, true); morpho.setIsRepayPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(aDai, amount); } function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(aDai, true); morpho.setIsLiquidateCollateralPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); } function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(aDai, true); morpho.setIsLiquidateBorrowPaused(aDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); } } diff --git a/test-foundry/aave-v3/TestPausableMarket.t.sol b/test-foundry/aave-v3/TestPausableMarket.t.sol index 6846e69f3..29b62e881 100644 --- a/test-foundry/aave-v3/TestPausableMarket.t.sol +++ b/test-foundry/aave-v3/TestPausableMarket.t.sol @@ -109,6 +109,54 @@ contract TestPausableMarket is TestSetup { } } + function testPauseSupply() public { + uint256 amount = 10_000 ether; + morpho.setIsSupplyPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(aDai, amount); + } + + function testPauseBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(aDai, amount); + } + + function testPauseWithdraw() public { + uint256 amount = 10_000 ether; + morpho.setIsWithdrawPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(aDai, amount); + } + + function testPauseRepay() public { + uint256 amount = 10_000 ether; + morpho.setIsRepayPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(aDai, amount); + } + + function testPauseLiquidateCollateral() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateCollateralPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(aUsdc, aDai, address(supplier2), amount); + } + + function testPauseLiquidateBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateBorrowPaused(aDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(aDai, aUsdc, address(supplier2), amount); + } + function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(1), true); diff --git a/test-foundry/compound/TestGovernance.t.sol b/test-foundry/compound/TestGovernance.t.sol index 02be79790..be7a11d4a 100644 --- a/test-foundry/compound/TestGovernance.t.sol +++ b/test-foundry/compound/TestGovernance.t.sol @@ -364,74 +364,44 @@ contract TestGovernance is TestSetup { } function testOnlyOwnerShouldDisableSupply() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsSupplyPaused(cDai, true); morpho.setIsSupplyPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); - supplier1.supply(cDai, amount); } function testOnlyOwnerShouldDisableBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsBorrowPaused(cDai, true); morpho.setIsBorrowPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); - supplier1.borrow(cDai, amount); } function testOnlyOwnerShouldDisableWithdraw() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsWithdrawPaused(cDai, true); morpho.setIsWithdrawPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); - supplier1.withdraw(cDai, amount); } function testOnlyOwnerShouldDisableRepay() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsRepayPaused(cDai, true); morpho.setIsRepayPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); - supplier1.repay(cDai, amount); } function testOnlyOwnerShouldDisableLiquidateOnCollateral() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateCollateralPaused(cDai, true); morpho.setIsLiquidateCollateralPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); - supplier1.liquidate(cUsdc, cDai, address(supplier2), amount); } function testOnlyOwnerShouldDisableLiquidateOnBorrow() public { - uint256 amount = 10_000 ether; - vm.expectRevert("Ownable: caller is not the owner"); supplier1.setIsLiquidateBorrowPaused(cDai, true); morpho.setIsLiquidateBorrowPaused(cDai, true); - - vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); - supplier1.liquidate(cDai, cUsdc, address(supplier2), amount); } } diff --git a/test-foundry/compound/TestPausableMarket.t.sol b/test-foundry/compound/TestPausableMarket.t.sol index 77ce77597..3bf3a7bd5 100644 --- a/test-foundry/compound/TestPausableMarket.t.sol +++ b/test-foundry/compound/TestPausableMarket.t.sol @@ -109,6 +109,54 @@ contract TestPausableMarket is TestSetup { } } + function testPauseSupply() public { + uint256 amount = 10_000 ether; + morpho.setIsSupplyPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("SupplyPaused()")); + supplier1.supply(cDai, amount); + } + + function testPauseBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsBorrowPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("BorrowPaused()")); + supplier1.borrow(cDai, amount); + } + + function testPauseWithdraw() public { + uint256 amount = 10_000 ether; + morpho.setIsWithdrawPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("WithdrawPaused()")); + supplier1.withdraw(cDai, amount); + } + + function testPauseRepay() public { + uint256 amount = 10_000 ether; + morpho.setIsRepayPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("RepayPaused()")); + supplier1.repay(cDai, amount); + } + + function testPauseLiquidateCollateral() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateCollateralPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateCollateralPaused()")); + supplier1.liquidate(cUsdc, cDai, address(supplier2), amount); + } + + function testPauseLiquidateBorrow() public { + uint256 amount = 10_000 ether; + morpho.setIsLiquidateBorrowPaused(cDai, true); + + vm.expectRevert(abi.encodeWithSignature("LiquidateBorrowPaused()")); + supplier1.liquidate(cDai, cUsdc, address(supplier2), amount); + } + function testShouldNotPauseSupplyOnMarketNotCreated() public { vm.expectRevert(abi.encodeWithSignature("MarketNotCreated()")); morpho.setIsSupplyPaused(address(1), true); From aad9e51ed76a30f6c1ac77b038c6c0fffa759b1c Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Thu, 22 Sep 2022 10:27:09 +0200 Subject: [PATCH 24/31] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(#1303)=20Improve=20?= =?UTF-8?q?performance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/ExitPositionsManager.sol | 34 ++++++++++++------ contracts/aave-v3/ExitPositionsManager.sol | 42 +++++++++++++--------- contracts/compound/PositionsManager.sol | 6 ++-- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/contracts/aave-v2/ExitPositionsManager.sol b/contracts/aave-v2/ExitPositionsManager.sol index 76709eeda..e889a124d 100644 --- a/contracts/aave-v2/ExitPositionsManager.sol +++ b/contracts/aave-v2/ExitPositionsManager.sol @@ -129,6 +129,7 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { uint256 borrowedReserveDecimals; // The number of decimals of the borrowed asset in the reserve. uint256 borrowedTokenUnit; // The unit of borrowed token considering its decimals. uint256 closeFactor; // The close factor used during the liquidation. + bool liquidationAllowed; // Whether the liquidation is allowed or not. } // Struct to avoid stack too deep. @@ -223,21 +224,21 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { _updateIndexes(_poolTokenCollateral); LiquidateVars memory vars; - if (!borrowedMarket.isDeprecated) { - if (!_liquidationAllowed(_borrower)) revert UnauthorisedLiquidate(); - vars.closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; - } else vars.closeFactor = MAX_BASIS_POINTS; // Allow liquidation of the whole debt. + (vars.closeFactor, vars.liquidationAllowed) = _liquidationAllowed( + _borrower, + borrowedMarket.isDeprecated + ); + if (!vars.liquidationAllowed) revert UnauthorisedLiquidate(); - address tokenBorrowedAddress = market[_poolTokenBorrowed].underlyingToken; uint256 amountToLiquidate = Math.min( _amount, _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower).percentMul(vars.closeFactor) // Max liquidatable debt. ); - address tokenCollateralAddress = market[_poolTokenCollateral].underlyingToken; - IPriceOracleGetter oracle = IPriceOracleGetter(addressesProvider.getPriceOracle()); + address tokenCollateralAddress = market[_poolTokenCollateral].underlyingToken; + address tokenBorrowedAddress = market[_poolTokenBorrowed].underlyingToken; { ILendingPool poolMem = pool; (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = poolMem @@ -690,8 +691,21 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { /// @dev Checks if the user is liquidatable. /// @param _user The user to check. - /// @return Whether the user is liquidatable or not. - function _liquidationAllowed(address _user) internal returns (bool) { - return _getUserHealthFactor(_user, address(0), 0) < HEALTH_FACTOR_LIQUIDATION_THRESHOLD; + /// @param _isDeprecated Whether the market is deprecated or not. + /// @return closeFactor The close factor to apply. + /// @return liquidationAllowed Whether the liquidation is allowed or not. + function _liquidationAllowed(address _user, bool _isDeprecated) + internal + returns (uint256 closeFactor, bool liquidationAllowed) + { + if (_isDeprecated) { + // Allow liquidation of the whole debt. + closeFactor = MAX_BASIS_POINTS; + liquidationAllowed = true; + } else { + closeFactor = DEFAULT_LIQUIDATION_CLOSE_FACTOR; + liquidationAllowed = (_getUserHealthFactor(_user, address(0), 0) < + HEALTH_FACTOR_LIQUIDATION_THRESHOLD); + } } } diff --git a/contracts/aave-v3/ExitPositionsManager.sol b/contracts/aave-v3/ExitPositionsManager.sol index 0c7dadf85..34f444333 100644 --- a/contracts/aave-v3/ExitPositionsManager.sol +++ b/contracts/aave-v3/ExitPositionsManager.sol @@ -229,10 +229,11 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { _updateIndexes(_poolTokenCollateral); LiquidateVars memory vars; - if (!borrowedMarket.isDeprecated) { - (vars.closeFactor, vars.liquidationAllowed) = _liquidationAllowed(_borrower); - if (!vars.liquidationAllowed) revert UnauthorisedLiquidate(); - } else vars.closeFactor = MAX_BASIS_POINTS; // Allow liquidation of the whole debt. + (vars.closeFactor, vars.liquidationAllowed) = _liquidationAllowed( + _borrower, + borrowedMarket.isDeprecated + ); + if (!vars.liquidationAllowed) revert UnauthorisedLiquidate(); vars.amountToLiquidate = Math.min( _amount, @@ -700,23 +701,30 @@ contract ExitPositionsManager is IExitPositionsManager, PositionsManagerUtils { /// @dev Checks if the user is liquidatable. /// @param _user The user to check. + /// @param _isDeprecated Whether the market is deprecated or not. /// @return closeFactor The close factor to apply. /// @return liquidationAllowed Whether the liquidation is allowed or not. - function _liquidationAllowed(address _user) + function _liquidationAllowed(address _user, bool _isDeprecated) internal returns (uint256 closeFactor, bool liquidationAllowed) { - uint256 healthFactor = _getUserHealthFactor(_user, address(0), 0); - address priceOracleSentinel = addressesProvider.getPriceOracleSentinel(); - - closeFactor = healthFactor > MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD - ? DEFAULT_LIQUIDATION_CLOSE_FACTOR - : MAX_LIQUIDATION_CLOSE_FACTOR; - - if (priceOracleSentinel != address(0)) - liquidationAllowed = (healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD || - (IPriceOracleSentinel(priceOracleSentinel).isLiquidationAllowed() && - healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD)); - else liquidationAllowed = healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD; + if (_isDeprecated) { + // Allow liquidation of the whole debt. + closeFactor = MAX_BASIS_POINTS; + liquidationAllowed = true; + } else { + uint256 healthFactor = _getUserHealthFactor(_user, address(0), 0); + address priceOracleSentinel = addressesProvider.getPriceOracleSentinel(); + + closeFactor = healthFactor > MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD + ? DEFAULT_LIQUIDATION_CLOSE_FACTOR + : MAX_LIQUIDATION_CLOSE_FACTOR; + + if (priceOracleSentinel != address(0)) + liquidationAllowed = (healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD || + (IPriceOracleSentinel(priceOracleSentinel).isLiquidationAllowed() && + healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD)); + else liquidationAllowed = healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD; + } } } diff --git a/contracts/compound/PositionsManager.sol b/contracts/compound/PositionsManager.sol index fc9b2ada1..d62ff2954 100644 --- a/contracts/compound/PositionsManager.sol +++ b/contracts/compound/PositionsManager.sol @@ -502,10 +502,12 @@ contract PositionsManager is IPositionsManager, MatchingEngine { _updateP2PIndexes(_poolTokenCollateral); LiquidateVars memory vars; - if (!borrowedMarket.isDeprecated) { + if (borrowedMarket.isDeprecated) + vars.closeFactor = WAD; // Allow liquidation of the whole debt. + else { if (!_isLiquidatable(_borrower, address(0), 0, 0)) revert UnauthorisedLiquidate(); vars.closeFactor = comptroller.closeFactorMantissa(); - } else vars.closeFactor = WAD; // Allow liquidation of the whole debt. + } vars.borrowBalance = _getUserBorrowBalanceInOf(_poolTokenBorrowed, _borrower); From c08db5fbf1dbefb8704e260e405288c948dafeb6 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Thu, 22 Sep 2022 10:38:56 +0200 Subject: [PATCH 25/31] Unpinned dev dependencies --- package.json | 14 +++++++------- yarn.lock | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 69c8a02ee..c2dac63aa 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "@morpho-labs/ethers-multicall": "^1.3.1", "@morpho-labs/morpho-ethers-contract": "^1.1.1", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", - "@nomicfoundation/hardhat-network-helpers": "1.0.6", - "@nomiclabs/hardhat-ethers": "2.1.1", + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", + "@nomiclabs/hardhat-ethers": "^2.1.1", "@nomiclabs/hardhat-etherscan": "^3.1.0", - "@nomiclabs/hardhat-waffle": "2.0.3", + "@nomiclabs/hardhat-waffle": "^2.0.3", "@tenderly/hardhat-tenderly": "^1.1.6", "@trivago/prettier-plugin-sort-imports": "^3.3.0", "@types/chai": "^4.3.3", @@ -37,13 +37,13 @@ "@types/node": "^18.7.18", "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", - "chai": "4.3.6", - "dotenv": "16.0.2", + "chai": "^4.3.6", + "dotenv": "^16.0.2", "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", - "ethers": "5.7.1", - "hardhat": "2.11.2", + "ethers": "^5.7.1", + "hardhat": "^2.11.2", "hardhat-preprocessor": "^0.1.5", "husky": "^8.0.1", "merkletreejs": "^0.2.32", diff --git a/yarn.lock b/yarn.lock index a143aaeea..6aaa27183 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1045,7 +1045,7 @@ deep-eql "^4.0.1" ordinal "^1.0.3" -"@nomicfoundation/hardhat-network-helpers@1.0.6": +"@nomicfoundation/hardhat-network-helpers@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz#5e2026ddde5ca539f70a2bf498528afd08bd0827" integrity sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ== @@ -1118,7 +1118,7 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" -"@nomiclabs/hardhat-ethers@2.1.1", "@nomiclabs/hardhat-ethers@^2.0.6": +"@nomiclabs/hardhat-ethers@^2.0.6", "@nomiclabs/hardhat-ethers@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== @@ -1139,7 +1139,7 @@ table "^6.8.0" undici "^5.4.0" -"@nomiclabs/hardhat-waffle@2.0.3": +"@nomiclabs/hardhat-waffle@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== @@ -1968,7 +1968,7 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@4.3.6: +chai@^4.3.6: version "4.3.6" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== @@ -2274,7 +2274,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dotenv@16.0.2: +dotenv@^16.0.2: version "16.0.2" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== @@ -2625,7 +2625,7 @@ ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@5.7.1, ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: +ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0, ethers@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== @@ -3029,7 +3029,7 @@ hardhat-preprocessor@^0.1.5: dependencies: murmur-128 "^0.2.1" -hardhat@2.11.2: +hardhat@^2.11.2: version "2.11.2" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== From 58a7b9ac525e4b5e304eea2bd099e58f021ffb6f Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Thu, 22 Sep 2022 11:09:39 +0200 Subject: [PATCH 26/31] Update foundry config --- foundry.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index d5e09fa5f..d9317c1a5 100644 --- a/foundry.toml +++ b/foundry.toml @@ -7,4 +7,6 @@ via_ir = false revert_strings = "default" names = true sizes = true -fuzz_runs = 1024 + +[fuzz] +runs = 1024 From 45a9764e10bad3bc8fc7401252a65351355decf4 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Thu, 22 Sep 2022 14:25:34 +0200 Subject: [PATCH 27/31] =?UTF-8?q?=E2=9C=85=20(#1303)=20Improve=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestLiquidate.t.sol | 27 ++++++++++++++++++++--- test-foundry/aave-v3/TestLiquidate.t.sol | 27 ++++++++++++++++++++--- test-foundry/compound/TestLiquidate.t.sol | 17 +++++++++++--- 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/test-foundry/aave-v2/TestLiquidate.t.sol b/test-foundry/aave-v2/TestLiquidate.t.sol index c52389cd0..2bba7e059 100644 --- a/test-foundry/aave-v2/TestLiquidate.t.sol +++ b/test-foundry/aave-v2/TestLiquidate.t.sol @@ -37,7 +37,6 @@ contract TestLiquidate is TestSetup { borrower1.borrow(aDai, amount); (, uint256 supplyOnPoolBefore) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); - (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate uint256 toRepay = amount; // Full liquidation. @@ -48,8 +47,30 @@ contract TestLiquidate is TestSetup { (, uint256 supplyOnPoolAfter) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); (, uint256 borrowOnPoolAfter) = morpho.borrowBalanceInOf(aDai, address(borrower1)); - assertLt(borrowOnPoolAfter, borrowOnPoolbefore); - assertLt(supplyOnPoolAfter, supplyOnPoolBefore); + ExitPositionsManager.LiquidateVars memory vars; + (, , vars.liquidationBonus, vars.collateralReserveDecimals, ) = pool + .getConfiguration(usdc) + .getParamsMemory(); + uint256 collateralPrice = oracle.getAssetPrice(usdc); + vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; + + { + (, , , vars.borrowedReserveDecimals, ) = pool.getConfiguration(dai).getParamsMemory(); + uint256 borrowedPrice = oracle.getAssetPrice(dai); + vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; + + uint256 amountToSeize = (toRepay * + borrowedPrice * + vars.collateralTokenUnit * + vars.liquidationBonus) / (vars.borrowedTokenUnit * collateralPrice * 10_000); + + uint256 expectedSupplyOnPoolAfter = supplyOnPoolBefore - + underlyingToScaledBalance(amountToSeize, pool.getReserveNormalizedIncome(usdc)); + + assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 2); + } + + assertEq(borrowOnPoolAfter, 0); } // A user liquidates a borrower that has not enough collateral to cover for his debt. diff --git a/test-foundry/aave-v3/TestLiquidate.t.sol b/test-foundry/aave-v3/TestLiquidate.t.sol index 8d68bbad0..0c0bbd1a2 100644 --- a/test-foundry/aave-v3/TestLiquidate.t.sol +++ b/test-foundry/aave-v3/TestLiquidate.t.sol @@ -37,7 +37,6 @@ contract TestLiquidate is TestSetup { borrower1.borrow(aDai, amount); (, uint256 supplyOnPoolBefore) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); - (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate uint256 toRepay = amount; // Full liquidation. @@ -48,8 +47,30 @@ contract TestLiquidate is TestSetup { (, uint256 supplyOnPoolAfter) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); (, uint256 borrowOnPoolAfter) = morpho.borrowBalanceInOf(aDai, address(borrower1)); - assertLt(borrowOnPoolAfter, borrowOnPoolbefore); - assertLt(supplyOnPoolAfter, supplyOnPoolBefore); + ExitPositionsManager.LiquidateVars memory vars; + (, , vars.liquidationBonus, vars.collateralReserveDecimals, , ) = pool + .getConfiguration(usdc) + .getParams(); + uint256 collateralPrice = oracle.getAssetPrice(usdc); + vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; + + { + (, , , vars.collateralReserveDecimals, , ) = pool.getConfiguration(dai).getParams(); + uint256 borrowedPrice = oracle.getAssetPrice(dai); + vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; + + uint256 amountToSeize = (toRepay * + borrowedPrice * + vars.collateralTokenUnit * + vars.liquidationBonus) / (vars.borrowedTokenUnit * collateralPrice * 10_000); + + uint256 expectedSupplyOnPoolAfter = supplyOnPoolBefore - + underlyingToScaledBalance(amountToSeize, pool.getReserveNormalizedIncome(usdc)); + + assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 2); + } + + assertEq(borrowOnPoolAfter, 0); } // A user liquidates a borrower that has not enough collateral to cover for his debt. diff --git a/test-foundry/compound/TestLiquidate.t.sol b/test-foundry/compound/TestLiquidate.t.sol index af1c37f0d..f95dbd01e 100644 --- a/test-foundry/compound/TestLiquidate.t.sol +++ b/test-foundry/compound/TestLiquidate.t.sol @@ -38,7 +38,7 @@ contract TestLiquidate is TestSetup { moveOneBlockForwardBorrowRepay(); (, uint256 supplyOnPoolBefore) = morpho.supplyBalanceInOf(cUsdc, address(borrower1)); - (, uint256 borrowOnPoolbefore) = morpho.borrowBalanceInOf(cDai, address(borrower1)); + (, uint256 borrowOnPoolBefore) = morpho.borrowBalanceInOf(cDai, address(borrower1)); // Liquidate uint256 toRepay = amount; // Full liquidation. @@ -49,8 +49,19 @@ contract TestLiquidate is TestSetup { (, uint256 supplyOnPoolAfter) = morpho.supplyBalanceInOf(cUsdc, address(borrower1)); (, uint256 borrowOnPoolAfter) = morpho.borrowBalanceInOf(cDai, address(borrower1)); - assertLt(borrowOnPoolAfter, borrowOnPoolbefore); - assertLt(supplyOnPoolAfter, supplyOnPoolBefore); + uint256 collateralPrice = oracle.getUnderlyingPrice(cUsdc); + uint256 borrowedPrice = oracle.getUnderlyingPrice(cDai); + + uint256 amountToSeize = toRepay + .mul(comptroller.liquidationIncentiveMantissa()) + .mul(borrowedPrice) + .div(collateralPrice); + + uint256 expectedSupplyOnPoolAfter = supplyOnPoolBefore - + amountToSeize.div(ICToken(cUsdc).exchangeRateCurrent()); + + assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 2); + assertApproxEqAbs(borrowOnPoolAfter, 0, 1e15); } // A user liquidates a borrower that has not enough collateral to cover for his debt. From 8d19785d2df7aec1b18ba6417f15e8c54e2d53b8 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Thu, 22 Sep 2022 16:25:31 +0200 Subject: [PATCH 28/31] =?UTF-8?q?=E2=9C=85=20(#1303)=20Fix=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-foundry/aave-v2/TestLiquidate.t.sol | 13 ++++++------- test-foundry/aave-v3/TestLiquidate.t.sol | 17 ++++++++--------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/test-foundry/aave-v2/TestLiquidate.t.sol b/test-foundry/aave-v2/TestLiquidate.t.sol index 2bba7e059..c92564e02 100644 --- a/test-foundry/aave-v2/TestLiquidate.t.sol +++ b/test-foundry/aave-v2/TestLiquidate.t.sol @@ -37,9 +37,10 @@ contract TestLiquidate is TestSetup { borrower1.borrow(aDai, amount); (, uint256 supplyOnPoolBefore) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); + (, uint256 borrowOnPoolBefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate - uint256 toRepay = amount; // Full liquidation. + uint256 toRepay = borrowOnPoolBefore.rayMul(pool.getReserveNormalizedVariableDebt(dai)); // Full liquidation. User liquidator = borrower3; liquidator.approve(dai, address(morpho), toRepay); liquidator.liquidate(aDai, aUsdc, address(borrower1), toRepay); @@ -59,15 +60,13 @@ contract TestLiquidate is TestSetup { uint256 borrowedPrice = oracle.getAssetPrice(dai); vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; - uint256 amountToSeize = (toRepay * - borrowedPrice * - vars.collateralTokenUnit * - vars.liquidationBonus) / (vars.borrowedTokenUnit * collateralPrice * 10_000); + uint256 amountToSeize = (toRepay * borrowedPrice * vars.collateralTokenUnit) / + (vars.borrowedTokenUnit * collateralPrice).percentMul(vars.liquidationBonus); uint256 expectedSupplyOnPoolAfter = supplyOnPoolBefore - - underlyingToScaledBalance(amountToSeize, pool.getReserveNormalizedIncome(usdc)); + amountToSeize.rayDiv(pool.getReserveNormalizedIncome(usdc)); - assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 2); + assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 1e10); } assertEq(borrowOnPoolAfter, 0); diff --git a/test-foundry/aave-v3/TestLiquidate.t.sol b/test-foundry/aave-v3/TestLiquidate.t.sol index 0c0bbd1a2..99e64a518 100644 --- a/test-foundry/aave-v3/TestLiquidate.t.sol +++ b/test-foundry/aave-v3/TestLiquidate.t.sol @@ -37,9 +37,10 @@ contract TestLiquidate is TestSetup { borrower1.borrow(aDai, amount); (, uint256 supplyOnPoolBefore) = morpho.supplyBalanceInOf(aUsdc, address(borrower1)); + (, uint256 borrowOnPoolBefore) = morpho.borrowBalanceInOf(aDai, address(borrower1)); // Liquidate - uint256 toRepay = amount; // Full liquidation. + uint256 toRepay = borrowOnPoolBefore.rayMul(pool.getReserveNormalizedVariableDebt(dai)); // Full liquidation. User liquidator = borrower3; liquidator.approve(dai, address(morpho), toRepay); liquidator.liquidate(aDai, aUsdc, address(borrower1), toRepay); @@ -55,22 +56,20 @@ contract TestLiquidate is TestSetup { vars.collateralTokenUnit = 10**vars.collateralReserveDecimals; { - (, , , vars.collateralReserveDecimals, , ) = pool.getConfiguration(dai).getParams(); + (, , , vars.borrowedReserveDecimals, , ) = pool.getConfiguration(dai).getParams(); uint256 borrowedPrice = oracle.getAssetPrice(dai); vars.borrowedTokenUnit = 10**vars.borrowedReserveDecimals; - uint256 amountToSeize = (toRepay * - borrowedPrice * - vars.collateralTokenUnit * - vars.liquidationBonus) / (vars.borrowedTokenUnit * collateralPrice * 10_000); + uint256 amountToSeize = (toRepay * borrowedPrice * vars.collateralTokenUnit) / + (vars.borrowedTokenUnit * collateralPrice).percentMul(vars.liquidationBonus); uint256 expectedSupplyOnPoolAfter = supplyOnPoolBefore - - underlyingToScaledBalance(amountToSeize, pool.getReserveNormalizedIncome(usdc)); + amountToSeize.rayDiv(pool.getReserveNormalizedIncome(usdc)); - assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 2); + assertApproxEqAbs(supplyOnPoolAfter, expectedSupplyOnPoolAfter, 1e15); } - assertEq(borrowOnPoolAfter, 0); + assertApproxEqAbs(borrowOnPoolAfter, 0, 1e15); } // A user liquidates a borrower that has not enough collateral to cover for his debt. From 5507b1ea4a12e6360444358cc3a6af90dfcf209f Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Fri, 23 Sep 2022 16:18:09 +0200 Subject: [PATCH 29/31] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(#1311)=20Remove=20u?= =?UTF-8?q?seless=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v2/EntryPositionsManager.sol | 5 +---- contracts/aave-v3/EntryPositionsManager.sol | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/contracts/aave-v2/EntryPositionsManager.sol b/contracts/aave-v2/EntryPositionsManager.sol index 14722ec8c..3d9723eee 100644 --- a/contracts/aave-v2/EntryPositionsManager.sol +++ b/contracts/aave-v2/EntryPositionsManager.sol @@ -204,10 +204,7 @@ contract EntryPositionsManager is IEntryPositionsManager, PositionsManagerUtils revert BorrowingNotEnabled(); _updateIndexes(_poolToken); - - bytes32 borrowMask = borrowMask[_poolToken]; - if (!_isBorrowing(userMarkets[msg.sender], borrowMask)) - _setBorrowing(msg.sender, borrowMask, true); + _setBorrowing(msg.sender, borrowMask[_poolToken], true); if (!_borrowAllowed(msg.sender, _poolToken, _amount)) revert UnauthorisedBorrow(); diff --git a/contracts/aave-v3/EntryPositionsManager.sol b/contracts/aave-v3/EntryPositionsManager.sol index a117a7b42..2eebabe95 100644 --- a/contracts/aave-v3/EntryPositionsManager.sol +++ b/contracts/aave-v3/EntryPositionsManager.sol @@ -204,10 +204,7 @@ contract EntryPositionsManager is IEntryPositionsManager, PositionsManagerUtils revert BorrowingNotEnabled(); _updateIndexes(_poolToken); - - bytes32 borrowMask = borrowMask[_poolToken]; - if (!_isBorrowing(userMarkets[msg.sender], borrowMask)) - _setBorrowing(msg.sender, borrowMask, true); + _setBorrowing(msg.sender, borrowMask[_poolToken], true); if (!_borrowAllowed(msg.sender, _poolToken, _amount)) revert UnauthorisedBorrow(); From 8034c9751b575d116fc343d63bea470598c2f9f2 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Fri, 23 Sep 2022 16:26:40 +0200 Subject: [PATCH 30/31] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20(#1310)=20Avoid=20co?= =?UTF-8?q?de=20duplication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/aave-v3/RewardsManager.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/aave-v3/RewardsManager.sol b/contracts/aave-v3/RewardsManager.sol index 3e99cfe91..754d43056 100644 --- a/contracts/aave-v3/RewardsManager.sol +++ b/contracts/aave-v3/RewardsManager.sol @@ -268,8 +268,9 @@ contract RewardsManager is IRewardsManager, OwnableUpgradeable { // Optimization: storing one after another saves one SSTORE. _localRewardData.index = uint128(newIndex); - _localRewardData.lastUpdateTimestamp = uint128(block.timestamp); - } else _localRewardData.lastUpdateTimestamp = uint128(block.timestamp); + } + + _localRewardData.lastUpdateTimestamp = uint128(block.timestamp); return (newIndex, indexUpdated); } From bb67903da9f9d257c795d08e6bccacf01dd3c3eb Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 26 Sep 2022 09:00:18 +0200 Subject: [PATCH 31/31] Add env example to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c34c79fb6..32e91d606 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ test/contracts/flattened # misc .DS_Store .env* +!.env.example *.ansi npm-debug.log*