diff --git a/package-lock.json b/package-lock.json index d6e1a845..99b4cd8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,6 @@ "cross-fetch": "^3.1.4", "crypto-js": "^4.0.0", "decimal.js": "^10.2.1", - "fs": "0.0.1-security", - "save-file": "^2.3.1", "web3": ">=1.3.5", "web3-core": "^1.6.1", "web3-eth-contract": "^1.6.1" @@ -38,6 +36,7 @@ "eslint-config-oceanprotocol": "^1.5.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", + "fs": "0.0.1-security", "microbundle": "^0.14.2", "mocha": "^9.1.2", "mock-local-storage": "^1.1.17", @@ -1933,9 +1932,9 @@ } }, "node_modules/@ensdomains/ensjs/node_modules/ethers": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.3.tgz", - "integrity": "sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz", + "integrity": "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw==", "funding": [ { "type": "individual", @@ -1962,11 +1961,11 @@ "@ethersproject/json-wallets": "5.5.0", "@ethersproject/keccak256": "5.5.0", "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.2", + "@ethersproject/networks": "5.5.1", "@ethersproject/pbkdf2": "5.5.0", "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.2", - "@ethersproject/random": "5.5.1", + "@ethersproject/providers": "5.5.1", + "@ethersproject/random": "5.5.0", "@ethersproject/rlp": "5.5.0", "@ethersproject/sha2": "5.5.0", "@ethersproject/signing-key": "5.5.0", @@ -2556,9 +2555,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", - "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.1.tgz", + "integrity": "sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q==", "funding": [ { "type": "individual", @@ -2611,9 +2610,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.2.tgz", - "integrity": "sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.1.tgz", + "integrity": "sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ==", "funding": [ { "type": "individual", @@ -2667,9 +2666,9 @@ } }, "node_modules/@ethersproject/random": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", - "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", + "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", "funding": [ { "type": "individual", @@ -3017,9 +3016,9 @@ } }, "node_modules/@oceanprotocol/contracts": { - "version": "1.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-1.0.0-alpha.1.tgz", - "integrity": "sha512-V7kR/SQ3c7y4AkUCmiWx0jbR7Ye9/85evGmY/1fQCMfkizQLQ7Cij2jHvUhB/A7g7oWCtfZcOdzatFhJiZR1Mw==", + "name": "hardhat-project", + "version": "v1.0.0-alpha.1", + "resolved": "git+ssh://git@github.com/oceanprotocol/contracts.git#36e8bf296163690a23cfe012c4468caba4504709", "dependencies": { "@openzeppelin/contracts": "^4.3.3", "@openzeppelin/test-helpers": "^0.5.15", @@ -3184,9 +3183,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.2.tgz", - "integrity": "sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw==" + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.1.tgz", + "integrity": "sha512-o+pHCf/yMLSlV5MkDQEzEQL402i6SoRnktru+0rdSxVEFZcTzzGhZCAtZjUFyKGazMSv1TilzMg+RbED1N8XHQ==" }, "node_modules/@openzeppelin/test-helpers": { "version": "0.5.15", @@ -3503,9 +3502,9 @@ } }, "node_modules/@truffle/abi-utils": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.6.tgz", - "integrity": "sha512-jF71kHK61/C1l42WtTGxFiOYmfsxsM1LuVcVrh2Qb3LkV1UjXP0dWTq8jOHNyy8oyAXoX0nTymBIgJDiOf7d0Q==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.5.tgz", + "integrity": "sha512-eKDIn9LqUFP8MnHVohe8ncuza4p9bszz1NtJWc+sr5zUogtmWnnf8Ajyj7JJpNKhLNDVZVbLowVEVxWzSSpMHw==", "dependencies": { "change-case": "3.0.2", "faker": "^5.3.1", @@ -3518,12 +3517,12 @@ "integrity": "sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw==" }, "node_modules/@truffle/codec": { - "version": "0.11.22", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.22.tgz", - "integrity": "sha512-dp6ilchlLOBPGyezSBUO7ozHcShRpg6EvOgV9LLJ34/jJwOcnp7WOR9HTyxve93urgaAcg9ol/tTtBk4pz0/6A==", + "version": "0.11.21", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.21.tgz", + "integrity": "sha512-ZDzaEPCUFWmQuFsXA3KzXmU4w4lpxSWZTGUcEDHxn6IqAmL7FY8mmdbR6LQ1wTRAa9oPf84PcehMpTNY47HVcg==", "dependencies": { - "@truffle/abi-utils": "^0.2.6", - "@truffle/compile-common": "^0.7.24", + "@truffle/abi-utils": "^0.2.5", + "@truffle/compile-common": "^0.7.23", "big.js": "^5.2.2", "bn.js": "^5.1.3", "cbor": "^5.1.0", @@ -3610,23 +3609,23 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@truffle/compile-common": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.24.tgz", - "integrity": "sha512-iF3zjXhxcFVAYEZfQA6Rh2vxQ4xSuk/7pKm7yKlLh3p9WjFaPE+dF8wbgQoehftUnBh6SY91uZI6XiD4QDuxYQ==", + "version": "0.7.23", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.23.tgz", + "integrity": "sha512-LWzeboJ9HmSZVgx5DMmKArOo96V4QZhS/+8beDOfeNT1W4QeKfkuVbAM0R77cXjiLnUsNjjFVXehnco6HiF8ww==", "dependencies": { "@truffle/error": "^0.0.14", - "colors": "1.4.0" + "colors": "^1.4.0" } }, "node_modules/@truffle/contract": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.4.tgz", - "integrity": "sha512-OrMunu8vfHkBPAwZc4te9CIg/+Cc4txmc/iJmMwxZ6m1lf0dOG837IjMD0KGSkvpO59KW/eiqEK7VF/cewjN6A==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.2.tgz", + "integrity": "sha512-w/iyB5dZ3KnIuvX1dqD1Z1SWFahT9/nvA1VAsK+eIy+zvtI1phx365uV75LdIoyeBtR1GmbqAO4F7ZLSfjkP+w==", "dependencies": { "@ensdomains/ensjs": "^2.0.1", "@truffle/blockchain-utils": "^0.0.31", "@truffle/contract-schema": "^3.4.4", - "@truffle/debug-utils": "^6.0.4", + "@truffle/debug-utils": "^6.0.3", "@truffle/error": "^0.0.14", "@truffle/interface-adapter": "^0.5.8", "bignumber.js": "^7.2.1", @@ -3676,9 +3675,9 @@ } }, "node_modules/@truffle/contract/node_modules/@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==" + "version": "12.20.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz", + "integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==" }, "node_modules/@truffle/contract/node_modules/bignumber.js": { "version": "7.2.1", @@ -3936,14 +3935,6 @@ "node": ">=8.0.0" } }, - "node_modules/@truffle/contract/node_modules/web3-core/node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", - "engines": { - "node": "*" - } - }, "node_modules/@truffle/contract/node_modules/web3-eth": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.5.3.tgz", @@ -4122,11 +4113,11 @@ } }, "node_modules/@truffle/debug-utils": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.4.tgz", - "integrity": "sha512-T+GRns1RCsjRa9N3o/DMcnKBszrz5DPqMssoK3fQOut9Gse2CvpQlslc+S2xQZ6NAwSC0qmnN3UiIiPgcUGxUg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.3.tgz", + "integrity": "sha512-wxvZqvHIBw9wJHtSpUMJTku8sHpC0VbP0gLyV5+NVa/rn6CvVGtf0MyoDZGS4FDyhO1hui+bzzoQftoRy7jWyA==", "dependencies": { - "@truffle/codec": "^0.11.22", + "@truffle/codec": "^0.11.21", "@trufflesuite/chromafi": "^2.2.2", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -4219,9 +4210,9 @@ } }, "node_modules/@truffle/interface-adapter/node_modules/@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==" + "version": "12.20.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz", + "integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==" }, "node_modules/@truffle/interface-adapter/node_modules/bn.js": { "version": "5.2.0", @@ -4895,9 +4886,9 @@ "dev": true }, "node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz", + "integrity": "sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ==", "peer": true }, "node_modules/@types/bn.js": { @@ -5825,11 +5816,6 @@ "node": ">= 4.5.0" } }, - "node_modules/atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" - }, "node_modules/auto-changelog": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", @@ -6188,15 +6174,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -7077,17 +7054,18 @@ } }, "node_modules/cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "dependencies": { + "object-assign": "^4.1.0", "string-width": "^4.2.0" }, "engines": { "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "1.4.0" + "colors": "^1.1.2" } }, "node_modules/cli-width": { @@ -7103,6 +7081,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -7113,6 +7092,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7121,6 +7101,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7391,9 +7372,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.3.tgz", - "integrity": "sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA==", + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", + "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", "hasInstallScript": true, "peer": true, "funding": { @@ -7984,19 +7965,6 @@ "node": ">= 0.6" } }, - "node_modules/deprecated-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deprecated-obj/-/deprecated-obj-2.0.0.tgz", - "integrity": "sha512-CkdywZC2rJ8RGh+y3MM1fw1EJ4oO/oNExGbRFv0AQoMS+faTd3nO7slYjkj/6t8OnIMUE+wxh6G97YHhK1ytrw==", - "dev": true, - "dependencies": { - "flat": "^5.0.2", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -8161,14 +8129,6 @@ "node": ">=10" } }, - "node_modules/dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -10695,9 +10655,9 @@ "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==" }, "node_modules/fast-check": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.21.0.tgz", - "integrity": "sha512-hkTRytqMceXfnSwPnryIqKkxKJjfcvtVqJrWRb8tgmfyUsGajIgQqDFxCJ+As+l9VLUCcmx6XIYoXeQe2Ih0UA==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", "dependencies": { "pure-rand": "^5.0.0" }, @@ -10835,17 +10795,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, "node_modules/filelist": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", @@ -10983,18 +10932,10 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "node_modules/flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "dependencies": { - "dtype": "^2.0.0" - } - }, "node_modules/follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", + "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", "funding": [ { "type": "individual", @@ -11142,7 +11083,8 @@ "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=", + "dev": true }, "node_modules/fs-extra": { "version": "8.1.0", @@ -11170,19 +11112,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -12471,9 +12400,9 @@ } }, "node_modules/hardhat": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.3.tgz", - "integrity": "sha512-VxqiVTSayRoeLHly8zKnlvtWoG8sroTP4vl8GHuj7OjfAdrHu4Blk7NBJ5+Rl8cmMEp6CuZtDaDmcHJIRTwEPA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.0.tgz", + "integrity": "sha512-A2L5F+B7HgdvfcuEWBXyokzP3biSlu4UeIvNR/lgSC0Og/2kbP9cjMMkIH42V1W8nQEZk70VuryhVKX2uHwSYw==", "peer": true, "dependencies": { "@ethereumjs/block": "^3.6.0", @@ -12507,9 +12436,9 @@ "immutable": "^4.0.0-rc.12", "io-ts": "1.10.4", "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.2", + "merkle-patricia-tree": "^4.2.0", "mnemonist": "^0.38.0", - "mocha": "^7.2.0", + "mocha": "^7.1.2", "node-fetch": "^2.6.0", "qs": "^6.7.0", "raw-body": "^2.4.1", @@ -12532,81 +12461,17 @@ } }, "node_modules/hardhat-contract-sizer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.4.0.tgz", - "integrity": "sha512-ww+Fw5Fq+q6gkVxB8KFvicqZFH5pH9HGZwV4ZSTxd0QrxA162qzLdbScJseUP30VvIBPYN9wpdj0cWlz6M9j6g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.3.0.tgz", + "integrity": "sha512-hRUwn5PhNWPO1t0ehtlDhEtP8YzzwCB+NNEdt6p+ZQ2bnq9rSgAjMsybSeOYt/ohen3kH31Pqm0hK0ies5/1tA==", "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0" + "cli-table3": "^0.6.0", + "colors": "^1.4.0" }, "peerDependencies": { "hardhat": "^2.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/hardhat-contract-sizer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-contract-sizer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/hardhat/node_modules/ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -12732,21 +12597,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/hardhat/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/hardhat/node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -12994,23 +12844,15 @@ "peer": true }, "node_modules/hardhat/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } } }, "node_modules/hardhat/node_modules/object.assign": { @@ -14145,11 +13987,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "node_modules/is-base64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", - "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -14172,14 +14009,6 @@ "node": ">=8" } }, - "node_modules/is-blob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-1.0.0.tgz", - "integrity": "sha1-o9fZb+HD/wZex84nwsIea6ksGDI=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -14213,6 +14042,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "engines": { "node": ">=4" } @@ -15065,10 +14895,7 @@ "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "engines": { - "node": "*" - } + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "node_modules/jsprim": { "version": "1.4.2", @@ -16797,12 +16624,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, "node_modules/nano-base32": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", @@ -19681,9 +19502,9 @@ } }, "node_modules/release-it": { - "version": "14.12.1", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-14.12.1.tgz", - "integrity": "sha512-dYPGZ7F/kfIWzsGlzNCL6PiWfPoaVUILcmqQm80kgYhI/b9RW3k6DVqE0nqI4fHxRT3fMeKWWvS0jdQmFDKn3Q==", + "version": "14.12.4", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-14.12.4.tgz", + "integrity": "sha512-lqf9PMsj7ycCqFHGag8Uv7cE1hNsKa+yKUMe+Fkh9fdOfxu2F01On+YUefRCP0DuQthmr/WyLCYdrjThMEkWFQ==", "dev": true, "dependencies": { "@iarna/toml": "2.2.5", @@ -19692,7 +19513,6 @@ "chalk": "4.1.2", "cosmiconfig": "7.0.1", "debug": "4.3.3", - "deprecated-obj": "2.0.0", "execa": "5.1.1", "form-data": "4.0.0", "git-url-parse": "11.6.0", @@ -19709,7 +19529,7 @@ "os-name": "4.0.1", "parse-json": "5.2.0", "semver": "7.3.5", - "shelljs": "0.8.4", + "shelljs": "0.8.5", "update-notifier": "5.1.0", "url-join": "4.0.1", "uuid": "8.3.2", @@ -20524,19 +20344,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/save-file": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/save-file/-/save-file-2.3.1.tgz", - "integrity": "sha512-VOD2Ojb1/kuj0XbvSXzZ5xr4rRSZD8f+HzKWGztXNp93gBQDj3njFt9HMhmLtnwd7q0BjJkzLXqd8M2+PFS1qg==", - "dependencies": { - "file-saver": "^2.0.0-rc.4", - "is-blob": "^1.0.0", - "is-buffer": "^2.0.0", - "simple-mime": "^0.1.0", - "to-array-buffer": "^3.2.0", - "write": "^1.0.0" - } - }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -20805,9 +20612,9 @@ } }, "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "dependencies": { "glob": "^7.0.0", @@ -20890,14 +20697,6 @@ "node": ">=4" } }, - "node_modules/simple-mime": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz", - "integrity": "sha1-lfUXxPRm18/1YacfydqyWW6p7y4=", - "engines": [ - "node >= 0.2.0" - ] - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -21286,7 +21085,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "optional": true, "dependencies": { "atob": "^2.1.2", @@ -21317,7 +21115,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "optional": true }, "node_modules/sourcemap-codec": { @@ -21449,11 +21246,6 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, "engines": { "node": ">=0.10.0" } @@ -21560,15 +21352,6 @@ "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", "dev": true }, - "node_modules/string-to-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz", - "integrity": "sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==", - "dependencies": { - "atob-lite": "^2.0.0", - "is-base64": "^0.1.0" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -22114,27 +21897,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-array-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", - "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", - "dependencies": { - "flatten-vertex-data": "^1.0.2", - "is-blob": "^2.0.1", - "string-to-arraybuffer": "^1.0.0" - } - }, - "node_modules/to-array-buffer/node_modules/is-blob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", - "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -23312,24 +23074,6 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -25368,6 +25112,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25384,6 +25129,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -25392,6 +25138,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -25406,6 +25153,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -25416,12 +25164,14 @@ "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -25438,6 +25188,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, "dependencies": { "mkdirp": "^0.5.1" }, @@ -25461,6 +25212,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -25567,6 +25319,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -25597,6 +25350,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -25614,6 +25368,7 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } @@ -26999,9 +26754,9 @@ }, "dependencies": { "ethers": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.3.tgz", - "integrity": "sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz", + "integrity": "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw==", "requires": { "@ethersproject/abi": "5.5.0", "@ethersproject/abstract-provider": "5.5.1", @@ -27018,11 +26773,11 @@ "@ethersproject/json-wallets": "5.5.0", "@ethersproject/keccak256": "5.5.0", "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.2", + "@ethersproject/networks": "5.5.1", "@ethersproject/pbkdf2": "5.5.0", "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.2", - "@ethersproject/random": "5.5.1", + "@ethersproject/providers": "5.5.1", + "@ethersproject/random": "5.5.0", "@ethersproject/rlp": "5.5.0", "@ethersproject/sha2": "5.5.0", "@ethersproject/signing-key": "5.5.0", @@ -27457,9 +27212,9 @@ "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" }, "@ethersproject/networks": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", - "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.1.tgz", + "integrity": "sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q==", "requires": { "@ethersproject/logger": "^5.5.0" } @@ -27482,9 +27237,9 @@ } }, "@ethersproject/providers": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.2.tgz", - "integrity": "sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.1.tgz", + "integrity": "sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ==", "requires": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", @@ -27516,9 +27271,9 @@ } }, "@ethersproject/random": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", - "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", + "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", "requires": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0" @@ -27734,9 +27489,8 @@ } }, "@oceanprotocol/contracts": { - "version": "1.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/@oceanprotocol/contracts/-/contracts-1.0.0-alpha.1.tgz", - "integrity": "sha512-V7kR/SQ3c7y4AkUCmiWx0jbR7Ye9/85evGmY/1fQCMfkizQLQ7Cij2jHvUhB/A7g7oWCtfZcOdzatFhJiZR1Mw==", + "version": "git+ssh://git@github.com/oceanprotocol/contracts.git#36e8bf296163690a23cfe012c4468caba4504709", + "from": "@oceanprotocol/contracts@^1.0.0-alpha.1", "requires": { "@openzeppelin/contracts": "^4.3.3", "@openzeppelin/test-helpers": "^0.5.15", @@ -27892,9 +27646,9 @@ } }, "@openzeppelin/contracts": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.2.tgz", - "integrity": "sha512-NyJV7sJgoGYqbtNUWgzzOGW4T6rR19FmX1IJgXGdapGPWsuMelGJn9h03nos0iqfforCbCB0iYIR0MtIuIFLLw==" + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.4.1.tgz", + "integrity": "sha512-o+pHCf/yMLSlV5MkDQEzEQL402i6SoRnktru+0rdSxVEFZcTzzGhZCAtZjUFyKGazMSv1TilzMg+RbED1N8XHQ==" }, "@openzeppelin/test-helpers": { "version": "0.5.15", @@ -28155,9 +27909,9 @@ } }, "@truffle/abi-utils": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.6.tgz", - "integrity": "sha512-jF71kHK61/C1l42WtTGxFiOYmfsxsM1LuVcVrh2Qb3LkV1UjXP0dWTq8jOHNyy8oyAXoX0nTymBIgJDiOf7d0Q==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.5.tgz", + "integrity": "sha512-eKDIn9LqUFP8MnHVohe8ncuza4p9bszz1NtJWc+sr5zUogtmWnnf8Ajyj7JJpNKhLNDVZVbLowVEVxWzSSpMHw==", "requires": { "change-case": "3.0.2", "faker": "^5.3.1", @@ -28170,12 +27924,12 @@ "integrity": "sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw==" }, "@truffle/codec": { - "version": "0.11.22", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.22.tgz", - "integrity": "sha512-dp6ilchlLOBPGyezSBUO7ozHcShRpg6EvOgV9LLJ34/jJwOcnp7WOR9HTyxve93urgaAcg9ol/tTtBk4pz0/6A==", + "version": "0.11.21", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.21.tgz", + "integrity": "sha512-ZDzaEPCUFWmQuFsXA3KzXmU4w4lpxSWZTGUcEDHxn6IqAmL7FY8mmdbR6LQ1wTRAa9oPf84PcehMpTNY47HVcg==", "requires": { - "@truffle/abi-utils": "^0.2.6", - "@truffle/compile-common": "^0.7.24", + "@truffle/abi-utils": "^0.2.5", + "@truffle/compile-common": "^0.7.23", "big.js": "^5.2.2", "bn.js": "^5.1.3", "cbor": "^5.1.0", @@ -28256,23 +28010,23 @@ } }, "@truffle/compile-common": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.24.tgz", - "integrity": "sha512-iF3zjXhxcFVAYEZfQA6Rh2vxQ4xSuk/7pKm7yKlLh3p9WjFaPE+dF8wbgQoehftUnBh6SY91uZI6XiD4QDuxYQ==", + "version": "0.7.23", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.23.tgz", + "integrity": "sha512-LWzeboJ9HmSZVgx5DMmKArOo96V4QZhS/+8beDOfeNT1W4QeKfkuVbAM0R77cXjiLnUsNjjFVXehnco6HiF8ww==", "requires": { "@truffle/error": "^0.0.14", - "colors": "1.4.0" + "colors": "^1.4.0" } }, "@truffle/contract": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.4.tgz", - "integrity": "sha512-OrMunu8vfHkBPAwZc4te9CIg/+Cc4txmc/iJmMwxZ6m1lf0dOG837IjMD0KGSkvpO59KW/eiqEK7VF/cewjN6A==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.4.2.tgz", + "integrity": "sha512-w/iyB5dZ3KnIuvX1dqD1Z1SWFahT9/nvA1VAsK+eIy+zvtI1phx365uV75LdIoyeBtR1GmbqAO4F7ZLSfjkP+w==", "requires": { "@ensdomains/ensjs": "^2.0.1", "@truffle/blockchain-utils": "^0.0.31", "@truffle/contract-schema": "^3.4.4", - "@truffle/debug-utils": "^6.0.4", + "@truffle/debug-utils": "^6.0.3", "@truffle/error": "^0.0.14", "@truffle/interface-adapter": "^0.5.8", "bignumber.js": "^7.2.1", @@ -28307,9 +28061,9 @@ } }, "@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==" + "version": "12.20.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz", + "integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==" }, "bignumber.js": { "version": "7.2.1", @@ -28480,13 +28234,6 @@ "web3-core-method": "1.5.3", "web3-core-requestmanager": "1.5.3", "web3-utils": "1.5.3" - }, - "dependencies": { - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - } } }, "web3-core-method": { @@ -28678,11 +28425,11 @@ } }, "@truffle/debug-utils": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.4.tgz", - "integrity": "sha512-T+GRns1RCsjRa9N3o/DMcnKBszrz5DPqMssoK3fQOut9Gse2CvpQlslc+S2xQZ6NAwSC0qmnN3UiIiPgcUGxUg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.3.tgz", + "integrity": "sha512-wxvZqvHIBw9wJHtSpUMJTku8sHpC0VbP0gLyV5+NVa/rn6CvVGtf0MyoDZGS4FDyhO1hui+bzzoQftoRy7jWyA==", "requires": { - "@truffle/codec": "^0.11.22", + "@truffle/codec": "^0.11.21", "@trufflesuite/chromafi": "^2.2.2", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -28773,9 +28520,9 @@ } }, "@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==" + "version": "12.20.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.41.tgz", + "integrity": "sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==" }, "bn.js": { "version": "5.2.0", @@ -29370,9 +29117,9 @@ "dev": true }, "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz", + "integrity": "sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ==", "peer": true }, "@types/bn.js": { @@ -30092,11 +29839,6 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "optional": true }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" - }, "auto-changelog": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz", @@ -30363,15 +30105,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -31074,11 +30807,12 @@ "dev": true }, "cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "requires": { - "colors": "1.4.0", + "colors": "^1.1.2", + "object-assign": "^4.1.0", "string-width": "^4.2.0" } }, @@ -31092,6 +30826,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -31101,12 +30836,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -31334,9 +31071,9 @@ } }, "core-js-pure": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.3.tgz", - "integrity": "sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA==", + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", + "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", "peer": true }, "core-util-is": { @@ -31780,16 +31517,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "deprecated-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deprecated-obj/-/deprecated-obj-2.0.0.tgz", - "integrity": "sha512-CkdywZC2rJ8RGh+y3MM1fw1EJ4oO/oNExGbRFv0AQoMS+faTd3nO7slYjkj/6t8OnIMUE+wxh6G97YHhK1ytrw==", - "dev": true, - "requires": { - "flat": "^5.0.2", - "lodash": "^4.17.20" - } - }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -31914,11 +31641,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" }, - "dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=" - }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -34008,9 +33730,9 @@ "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==" }, "fast-check": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.21.0.tgz", - "integrity": "sha512-hkTRytqMceXfnSwPnryIqKkxKJjfcvtVqJrWRb8tgmfyUsGajIgQqDFxCJ+As+l9VLUCcmx6XIYoXeQe2Ih0UA==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", "requires": { "pure-rand": "^5.0.0" } @@ -34115,17 +33837,6 @@ "flat-cache": "^3.0.4" } }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, "filelist": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", @@ -34237,18 +33948,10 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, - "flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "requires": { - "dtype": "^2.0.0" - } - }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", + "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", "peer": true }, "for-in": { @@ -34337,7 +34040,8 @@ "fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=", + "dev": true }, "fs-extra": { "version": "8.1.0", @@ -34362,12 +34066,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -35296,9 +34994,9 @@ } }, "hardhat": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.3.tgz", - "integrity": "sha512-VxqiVTSayRoeLHly8zKnlvtWoG8sroTP4vl8GHuj7OjfAdrHu4Blk7NBJ5+Rl8cmMEp6CuZtDaDmcHJIRTwEPA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.8.0.tgz", + "integrity": "sha512-A2L5F+B7HgdvfcuEWBXyokzP3biSlu4UeIvNR/lgSC0Og/2kbP9cjMMkIH42V1W8nQEZk70VuryhVKX2uHwSYw==", "peer": true, "requires": { "@ethereumjs/block": "^3.6.0", @@ -35332,9 +35030,9 @@ "immutable": "^4.0.0-rc.12", "io-ts": "1.10.4", "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.2", + "merkle-patricia-tree": "^4.2.0", "mnemonist": "^0.38.0", - "mocha": "^7.2.0", + "mocha": "^7.1.2", "node-fetch": "^2.6.0", "qs": "^6.7.0", "raw-body": "^2.4.1", @@ -35455,13 +35153,6 @@ "universalify": "^0.1.0" } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true, - "peer": true - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -35655,9 +35346,9 @@ "peer": true }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "peer": true, "requires": { "whatwg-url": "^5.0.0" @@ -35957,57 +35648,12 @@ } }, "hardhat-contract-sizer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.4.0.tgz", - "integrity": "sha512-ww+Fw5Fq+q6gkVxB8KFvicqZFH5pH9HGZwV4ZSTxd0QrxA162qzLdbScJseUP30VvIBPYN9wpdj0cWlz6M9j6g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.3.0.tgz", + "integrity": "sha512-hRUwn5PhNWPO1t0ehtlDhEtP8YzzwCB+NNEdt6p+ZQ2bnq9rSgAjMsybSeOYt/ohen3kH31Pqm0hK0ies5/1tA==", "requires": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } + "cli-table3": "^0.6.0", + "colors": "^1.4.0" } }, "has": { @@ -36573,11 +36219,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "is-base64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", - "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" - }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -36594,11 +36235,6 @@ "binary-extensions": "^2.0.0" } }, - "is-blob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-1.0.0.tgz", - "integrity": "sha1-o9fZb+HD/wZex84nwsIea6ksGDI=" - }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -36611,7 +36247,8 @@ "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "peer": true }, "is-callable": { "version": "1.2.4", @@ -38643,12 +38280,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, "nano-base32": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", @@ -40789,9 +40420,9 @@ } }, "release-it": { - "version": "14.12.1", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-14.12.1.tgz", - "integrity": "sha512-dYPGZ7F/kfIWzsGlzNCL6PiWfPoaVUILcmqQm80kgYhI/b9RW3k6DVqE0nqI4fHxRT3fMeKWWvS0jdQmFDKn3Q==", + "version": "14.12.4", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-14.12.4.tgz", + "integrity": "sha512-lqf9PMsj7ycCqFHGag8Uv7cE1hNsKa+yKUMe+Fkh9fdOfxu2F01On+YUefRCP0DuQthmr/WyLCYdrjThMEkWFQ==", "dev": true, "requires": { "@iarna/toml": "2.2.5", @@ -40800,7 +40431,6 @@ "chalk": "4.1.2", "cosmiconfig": "7.0.1", "debug": "4.3.3", - "deprecated-obj": "2.0.0", "execa": "5.1.1", "form-data": "4.0.0", "git-url-parse": "11.6.0", @@ -40817,7 +40447,7 @@ "os-name": "4.0.1", "parse-json": "5.2.0", "semver": "7.3.5", - "shelljs": "0.8.4", + "shelljs": "0.8.5", "update-notifier": "5.1.0", "url-join": "4.0.1", "uuid": "8.3.2", @@ -41425,19 +41055,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "save-file": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/save-file/-/save-file-2.3.1.tgz", - "integrity": "sha512-VOD2Ojb1/kuj0XbvSXzZ5xr4rRSZD8f+HzKWGztXNp93gBQDj3njFt9HMhmLtnwd7q0BjJkzLXqd8M2+PFS1qg==", - "requires": { - "file-saver": "^2.0.0-rc.4", - "is-blob": "^1.0.0", - "is-buffer": "^2.0.0", - "simple-mime": "^0.1.0", - "to-array-buffer": "^3.2.0", - "write": "^1.0.0" - } - }, "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -41656,9 +41273,9 @@ "dev": true }, "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -41717,11 +41334,6 @@ } } }, - "simple-mime": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz", - "integrity": "sha1-lfUXxPRm18/1YacfydqyWW6p7y4=" - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -42284,15 +41896,6 @@ "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", "dev": true }, - "string-to-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz", - "integrity": "sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==", - "requires": { - "atob-lite": "^2.0.0", - "is-base64": "^0.1.0" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -42719,23 +42322,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-array-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", - "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", - "requires": { - "flatten-vertex-data": "^1.0.2", - "is-blob": "^2.0.1", - "string-to-arraybuffer": "^1.0.0" - }, - "dependencies": { - "is-blob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", - "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==" - } - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -43655,16 +43241,6 @@ "to-regex-range": "^2.1.0" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -45333,6 +44909,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -45342,12 +44919,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -45356,6 +44935,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -45363,12 +44943,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -45384,6 +44966,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, "requires": { "mkdirp": "^0.5.1" }, @@ -45392,6 +44975,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -45495,7 +45079,8 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yaeti": { "version": "0.0.6", @@ -45517,6 +45102,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -45530,7 +45116,8 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", diff --git a/package.json b/package.json index ab6a1001..a4aa34bd 100644 --- a/package.json +++ b/package.json @@ -62,8 +62,6 @@ "cross-fetch": "^3.1.4", "crypto-js": "^4.0.0", "decimal.js": "^10.2.1", - "fs": "0.0.1-security", - "save-file": "^2.3.1", "web3": ">=1.3.5", "web3-core": "^1.6.1", "web3-eth-contract": "^1.6.1" @@ -83,6 +81,7 @@ "chai-spies": "^1.0.0", "cross-env": "^7.0.3", "eslint": "^7.17.0", + "fs": "0.0.1-security", "eslint-config-oceanprotocol": "^1.5.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/src/@types/DownloadResponse.ts b/src/@types/DownloadResponse.ts new file mode 100644 index 00000000..a3ff983a --- /dev/null +++ b/src/@types/DownloadResponse.ts @@ -0,0 +1,4 @@ +export interface DownloadResponse { + data: ArrayBuffer + filename: string +} diff --git a/src/pools/balancer/Pool.ts b/src/pools/balancer/Pool.ts index c2da1156..aedd5c42 100644 --- a/src/pools/balancer/Pool.ts +++ b/src/pools/balancer/Pool.ts @@ -5,14 +5,15 @@ import { Contract } from 'web3-eth-contract' import { Logger, getFairGasPrice, - LoggerInstance, configHelperNetworks, - setContractDefaults + setContractDefaults, + unitsToAmount, + amountToUnits } from '../../utils' import BigNumber from 'bignumber.js' import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json' import defaultErc20Abi from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json' -import Decimal from 'decimal.js' + import { CurrentFees, TokenInOutMarket, @@ -20,6 +21,7 @@ import { AmountsOutMaxFee } from '../../interfaces' import { Config } from '../../models' +import { minAbi } from '../../utils/minAbi' const MaxUint256 = '115792089237316195423570985008687907853269984665640564039457584007913129639934' @@ -46,130 +48,6 @@ export class Pool { this.config = config || configHelperNetworks[0] } - /** - * Estimate gas cost for approval function - * @param {String} account - * @param {String} tokenAddress - * @param {String} spender - * @param {String} amount - * @param {String} force - * @param {Contract} contractInstance optional contract instance - * @return {Promise} - */ - public async estApprove( - account: string, - tokenAddress: string, - spender: string, - amount: string, - contractInstance?: Contract - ): Promise { - const tokenContract = - contractInstance || - setContractDefaults( - new this.web3.eth.Contract(defaultErc20Abi.abi as AbiItem[], tokenAddress), - this.config - ) - - const gasLimitDefault = this.GASLIMIT_DEFAULT - let estGas - try { - estGas = await tokenContract.methods - .approve(spender, amount) - .estimateGas({ from: account }, (err, estGas) => (err ? gasLimitDefault : estGas)) - } catch (e) { - estGas = gasLimitDefault - LoggerInstance.error('estimate gas failed for approve!', e) - } - return estGas - } - - /** - * Get Alloance for both Datatoken and Ocean - * @param {String } tokenAdress - * @param {String} owner - * @param {String} spender - */ - public async allowance( - tokenAddress: string, - owner: string, - spender: string - ): Promise { - const tokenAbi = defaultErc20Abi.abi as AbiItem[] - const datatoken = setContractDefaults( - new this.web3.eth.Contract(tokenAbi, tokenAddress), - this.config - ) - const trxReceipt = await datatoken.methods.allowance(owner, spender).call() - - return await this.unitsToAmount(tokenAddress, trxReceipt) - } - - /** - * Approve spender to spent amount tokens - * @param {String} account - * @param {String} tokenAddress - * @param {String} spender - * @param {String} amount (always expressed as wei) - * @param {String} force if true, will overwrite any previous allowence. Else, will check if allowence is enough and will not send a transaction if it's not needed - */ - async approve( - account: string, - tokenAddress: string, - spender: string, - amount: string, - force = false - ): Promise { - const minABI = [ - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address' - }, - { - name: '_value', - type: 'uint256' - } - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool' - } - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function' - } - ] as AbiItem[] - const token = setContractDefaults( - new this.web3.eth.Contract(minABI, tokenAddress), - this.config - ) - if (!force) { - const currentAllowence = await this.allowance(tokenAddress, account, spender) - if (new Decimal(currentAllowence).greaterThanOrEqualTo(new Decimal(amount))) { - return currentAllowence - } - } - let result = null - const amountFormatted = await this.amountToUnits(tokenAddress, amount) - const estGas = await this.estApprove(account, tokenAddress, spender, amountFormatted) - - try { - result = await token.methods.approve(spender, amountFormatted).send({ - from: account, - gas: estGas + 1, - gasPrice: await getFairGasPrice(this.web3, this.config) - }) - } catch (e) { - this.logger.error(`ERRPR: Failed to approve spender to spend tokens : ${e.message}`) - } - return result - } - /** * Get user shares of pool tokens * @param {String} account @@ -465,7 +343,7 @@ export class Pool { this.config ) const result = await pool.methods.getBalance(token).call() - amount = await this.unitsToAmount(token, result) + amount = await unitsToAmount(this.web3, token, result) } catch (e) { this.logger.error(`ERROR: Failed to get how many tokens \ are in the pool: ${e.message}`) @@ -588,7 +466,7 @@ export class Pool { let weight = null try { const result = await pool.methods.publishMarketFees(token).call() - weight = await this.unitsToAmount(token, result) + weight = await unitsToAmount(this.web3, token, result) } catch (e) { this.logger.error(`ERROR: Failed to get market fees for a token: ${e.message}`) } @@ -643,7 +521,7 @@ export class Pool { let weight = null try { const result = await pool.methods.communityFees(token).call() - weight = await this.unitsToAmount(token, result) + weight = await unitsToAmount(this.web3, token, result) } catch (e) { this.logger.error(`ERROR: Failed to get community fees for a token: ${e.message}`) } @@ -843,42 +721,6 @@ export class Pool { return result } - async amountToUnits(token: string, amount: string): Promise { - try { - const tokenContract = setContractDefaults( - new this.web3.eth.Contract(defaultErc20Abi.abi as AbiItem[], token), - this.config - ) - let decimals = await tokenContract.methods.decimals().call() - if (decimals === '0') { - decimals = 18 - } - const amountFormatted = new BigNumber(parseInt(amount) * 10 ** decimals) - BigNumber.config({ EXPONENTIAL_AT: 50 }) - return amountFormatted.toString() - } catch (e) { - this.logger.error('ERROR: FAILED TO CALL DECIMALS(), USING 18') - } - } - - async unitsToAmount(token: string, amount: string): Promise { - try { - const tokenContract = setContractDefaults( - new this.web3.eth.Contract(defaultErc20Abi.abi as AbiItem[], token), - this.config - ) - let decimals = await tokenContract.methods.decimals().call() - if (decimals === '0') { - decimals = 18 - } - const amountFormatted = new BigNumber(parseInt(amount) / 10 ** decimals) - - return amountFormatted.toString() - } catch (e) { - this.logger.error('ERROR: FAILED TO CALL DECIMALS(), USING 18') - } - } - /** * Estimate gas cost for swapExactAmountIn * @param {String} address @@ -953,12 +795,14 @@ export class Pool { this.config ) - amountsInOutMaxFee.tokenAmountIn = await this.amountToUnits( + amountsInOutMaxFee.tokenAmountIn = await amountToUnits( + this.web3, tokenInOutMarket.tokenIn, amountsInOutMaxFee.tokenAmountIn ) - amountsInOutMaxFee.minAmountOut = await this.amountToUnits( + amountsInOutMaxFee.minAmountOut = await amountToUnits( + this.web3, tokenInOutMarket.tokenOut, amountsInOutMaxFee.minAmountOut ) @@ -1075,12 +919,14 @@ export class Pool { ) let result = null - amountsInOutMaxFee.maxAmountIn = await this.amountToUnits( + amountsInOutMaxFee.maxAmountIn = await amountToUnits( + this.web3, tokenInOutMarket.tokenIn, amountsInOutMaxFee.maxAmountIn ) - amountsInOutMaxFee.tokenAmountOut = await this.amountToUnits( + amountsInOutMaxFee.tokenAmountOut = await amountToUnits( + this.web3, tokenInOutMarket.tokenOut, amountsInOutMaxFee.tokenAmountOut ) @@ -1179,7 +1025,7 @@ export class Pool { const tokens = await this.getFinalTokens(poolAddress) for (let i = 0; i < 2; i++) { - const amount = await this.amountToUnits(tokens[i], maxAmountsIn[i]) + const amount = await amountToUnits(this.web3, tokens[i], maxAmountsIn[i]) weiMaxAmountsIn.push(amount) } @@ -1263,7 +1109,7 @@ export class Pool { const tokens = await this.getFinalTokens(poolAddress) for (let i = 0; i < 2; i++) { - const amount = await this.amountToUnits(tokens[i], minAmountsOut[i]) + const amount = await amountToUnits(this.web3, tokens[i], minAmountsOut[i]) weiMinAmountsOut.push(amount) } let result = null @@ -1347,7 +1193,7 @@ export class Pool { ) let result = null - const amountInFormatted = await this.amountToUnits(tokenIn, tokenAmountIn) + const amountInFormatted = await amountToUnits(this.web3, tokenIn, tokenAmountIn) const estGas = await this.estJoinswapExternAmountIn( account, poolAddress, @@ -1434,7 +1280,7 @@ export class Pool { ) let result = null - const maxAmountInFormatted = await this.amountToUnits(tokenIn, maxAmountIn) + const maxAmountInFormatted = await amountToUnits(this.web3, tokenIn, maxAmountIn) const estGas = await this.estJoinswapPoolAmountOut( account, poolAddress, @@ -1520,7 +1366,11 @@ export class Pool { ) let result = null - const minTokenOutFormatted = await this.amountToUnits(tokenOut, minTokenAmountOut) + const minTokenOutFormatted = await amountToUnits( + this.web3, + tokenOut, + minTokenAmountOut + ) const estGas = await this.estExitswapPoolAmountIn( account, poolAddress, @@ -1708,7 +1558,7 @@ export class Pool { this.config ) - const amountOutFormatted = await this.amountToUnits(tokenOut, tokenAmountOut) + const amountOutFormatted = await amountToUnits(this.web3, tokenOut, tokenAmountOut) let amount = null @@ -1721,7 +1571,7 @@ export class Pool { this.web3.utils.toWei(swapMarketFee) ) .call() - amount = await this.unitsToAmount(tokenIn, result) + amount = await unitsToAmount(this.web3, tokenIn, result) } catch (e) { this.logger.error('ERROR: Failed to calcInGivenOut') } @@ -1740,7 +1590,7 @@ export class Pool { this.config ) - const amountInFormatted = await this.amountToUnits(tokenIn, tokenAmountIn) + const amountInFormatted = await amountToUnits(this.web3, tokenIn, tokenAmountIn) let amount = null @@ -1754,7 +1604,7 @@ export class Pool { ) .call() - amount = await this.unitsToAmount(tokenOut, result) + amount = await unitsToAmount(this.web3, tokenOut, result) } catch (e) { this.logger.error('ERROR: Failed to calcOutGivenIn') } @@ -1774,10 +1624,13 @@ export class Pool { try { const result = await pool.methods - .calcPoolOutSingleIn(tokenIn, await this.amountToUnits(tokenIn, tokenAmountIn)) + .calcPoolOutSingleIn( + tokenIn, + await amountToUnits(this.web3, tokenIn, tokenAmountIn) + ) .call() - amount = await this.unitsToAmount(poolAddress, result) + amount = await unitsToAmount(this.web3, poolAddress, result) } catch (e) { this.logger.error(`ERROR: Failed to calculate PoolOutGivenSingleIn : ${e.message}`) } @@ -1794,14 +1647,14 @@ export class Pool { this.config ) let amount = null - const amountFormatted = await this.amountToUnits(poolAddress, poolAmountOut) + const amountFormatted = await amountToUnits(this.web3, poolAddress, poolAmountOut) try { const result = await pool.methods .calcSingleInPoolOut(tokenIn, amountFormatted) .call() - amount = await this.unitsToAmount(tokenIn, result) + amount = await unitsToAmount(this.web3, tokenIn, result) } catch (e) { this.logger.error(`ERROR: Failed to calculate SingleInGivenPoolOut : ${e.message}`) } @@ -1823,10 +1676,10 @@ export class Pool { const result = await pool.methods .calcSingleOutPoolIn( tokenOut, - await this.amountToUnits(poolAddress, poolAmountIn) + await amountToUnits(this.web3, poolAddress, poolAmountIn) ) .call() - amount = await this.unitsToAmount(tokenOut, result) + amount = await unitsToAmount(this.web3, tokenOut, result) } catch (e) { this.logger.error(`ERROR: Failed to calculate SingleOutGivenPoolIn : ${e}`) } @@ -1846,10 +1699,13 @@ export class Pool { try { const result = await pool.methods - .calcPoolInSingleOut(tokenOut, await this.amountToUnits(tokenOut, tokenAmountOut)) + .calcPoolInSingleOut( + tokenOut, + await amountToUnits(this.web3, tokenOut, tokenAmountOut) + ) .call() - amount = await this.unitsToAmount(poolAddress, result) + amount = await unitsToAmount(this.web3, poolAddress, result) } catch (e) { this.logger.error(`ERROR: Failed to calculate PoolInGivenSingleOut : ${e.message}`) } diff --git a/src/provider/Provider.ts b/src/provider/Provider.ts index 9e722321..3c21f373 100644 --- a/src/provider/Provider.ts +++ b/src/provider/Provider.ts @@ -11,6 +11,7 @@ import { import { noZeroX } from '../utils/ConversionTypeHelper' import { signText, signWithHash } from '../utils/SignatureUtils' import fetch from 'cross-fetch' +import { DownloadResponse } from '../@types/DownloadResponse' export interface HttpCallback { (httpMethod: string, url: string, body: string, header: any): Promise } @@ -567,12 +568,11 @@ export class Provider { public async computeResult( jobId: string, index: number, - destination: string, accountId: string, providerUri: string, web3: Web3, signal?: AbortSignal - ): Promise { + ): Promise { const providerEndpoints = await this.getEndpoints(providerUri) const serviceEndpoints = await this.getServiceEndpoints( providerUri, @@ -604,15 +604,16 @@ export class Provider { if (!computeResultUrl) return null try { - !destination - ? await downloadFileBrowser(consumeUrl) - : await downloadFile(consumeUrl, destination, index) + if (document) { + await downloadFileBrowser(consumeUrl) + } else { + return await downloadFile(consumeUrl, index) + } } catch (e) { LoggerInstance.error('Error getting job result') LoggerInstance.error(e) throw e } - return destination } /** Deletes a compute job. diff --git a/src/utils/ConfigHelper.ts b/src/utils/ConfigHelper.ts index 5bba0978..fa70cbc8 100644 --- a/src/utils/ConfigHelper.ts +++ b/src/utils/ConfigHelper.ts @@ -1,5 +1,4 @@ import Config from '../models/Config' -import fs from 'fs' // eslint-disable-next-line import/no-named-default import { default as DefaultContractsAddresses } from '@oceanprotocol/contracts/addresses/address.json' import LoggerInstance from './Logger' @@ -161,38 +160,13 @@ export const configHelperNetworks: Config[] = [ export class ConfigHelper { /* Load contract addresses from env ADDRESS_FILE (generated by ocean-contracts) */ - public getAddressesFromEnv(network: string): Partial { + public getAddressesFromEnv(network: string, customAddresses?: any): Partial { // use the defaults first let configAddresses: Partial - if (DefaultContractsAddresses[network]) { - const { - FixedPrice, - Dispenser, - Staking, - poolTemplate, - OPFCommunityFeeCollector, - ERC721Factory, - Ocean, - chainId, - startBlock - } = DefaultContractsAddresses[network] - configAddresses = { - erc721FactoryAddress: ERC721Factory, - sideStakingAddress: Staking, - opfCommunityFeeCollector: OPFCommunityFeeCollector, - poolTemplateAddress: poolTemplate, - fixedRateExchangeAddress: FixedPrice, - dispenserAddress: Dispenser, - oceanTokenAddress: Ocean, - chainId: chainId, - startBlock: startBlock, - ...(process.env.AQUARIUS_URI && { metadataCacheUri: process.env.AQUARIUS_URI }) - } - } - // try ADDRESS_FILE env - if (fs && process.env.ADDRESS_FILE) { + + // load from custom addresses structure + if (customAddresses) { try { - const data = JSON.parse(fs.readFileSync(process.env.ADDRESS_FILE, 'utf8')) const { FixedPrice, Dispenser, @@ -203,7 +177,7 @@ export class ConfigHelper { Ocean, chainId, startBlock - } = data[network] + } = customAddresses[network] configAddresses = { erc721FactoryAddress: ERC721Factory, sideStakingAddress: Staking, @@ -220,6 +194,33 @@ export class ConfigHelper { // console.error(`ERROR: Could not load local contract address file: ${e.message}`) // return null } + } else { + // no custom addresses structure was passed, trying to load default + if (DefaultContractsAddresses[network]) { + const { + FixedPrice, + Dispenser, + Staking, + poolTemplate, + OPFCommunityFeeCollector, + ERC721Factory, + Ocean, + chainId, + startBlock + } = DefaultContractsAddresses[network] + configAddresses = { + erc721FactoryAddress: ERC721Factory, + sideStakingAddress: Staking, + opfCommunityFeeCollector: OPFCommunityFeeCollector, + poolTemplateAddress: poolTemplate, + fixedRateExchangeAddress: FixedPrice, + dispenserAddress: Dispenser, + oceanTokenAddress: Ocean, + chainId: chainId, + startBlock: startBlock, + ...(process.env.AQUARIUS_URI && { metadataCacheUri: process.env.AQUARIUS_URI }) + } + } } return configAddresses } diff --git a/src/utils/Constants.ts b/src/utils/Constants.ts index e1118cef..7295e074 100644 --- a/src/utils/Constants.ts +++ b/src/utils/Constants.ts @@ -1 +1,2 @@ export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' +export const GASLIMIT_DEFAULT = 1000000 diff --git a/src/utils/ContractUtils.ts b/src/utils/ContractUtils.ts index 419ddaba..9d536abb 100644 --- a/src/utils/ContractUtils.ts +++ b/src/utils/ContractUtils.ts @@ -4,6 +4,8 @@ import { Contract } from 'web3-eth-contract' import { generateDtName } from './DatatokenName' import { Erc20CreateParams, FreCreationParams, PoolCreationParams } from '../interfaces' import { Config } from '../models' +import { AbiItem } from 'web3-utils/types' +import { minAbi } from './minAbi' export function setContractDefaults(contract: Contract, config: Config): Contract { if (config) { @@ -90,3 +92,40 @@ export function getPoolCreationParams(poolParams: PoolCreationParams): any { swapFees: [poolParams.swapFeeLiquidityProvider, poolParams.swapFeeMarketRunner] } } +export async function unitsToAmount( + web3: Web3, + token: string, + amount: string +): Promise { + try { + const tokenContract = new web3.eth.Contract(minAbi, token) + let decimals = await tokenContract.methods.decimals().call() + if (decimals === '0') { + decimals = 18 + } + const amountFormatted = new BigNumber(parseInt(amount) / 10 ** decimals) + BigNumber.config({ EXPONENTIAL_AT: 50 }) + return amountFormatted.toString() + } catch (e) { + this.logger.error('ERROR: FAILED TO CALL DECIMALS(), USING 18') + } +} + +export async function amountToUnits( + web3: Web3, + token: string, + amount: string +): Promise { + try { + const tokenContract = new web3.eth.Contract(minAbi, token) + let decimals = await tokenContract.methods.decimals().call() + if (decimals === '0') { + decimals = 18 + } + const amountFormatted = new BigNumber(parseInt(amount) * 10 ** decimals) + BigNumber.config({ EXPONENTIAL_AT: 50 }) + return amountFormatted.toString() + } catch (e) { + this.logger.error('ERROR: FAILED TO CALL DECIMALS(), USING 18') + } +} diff --git a/src/utils/FetchHelper.ts b/src/utils/FetchHelper.ts index b83f43fc..0fdc5eb5 100644 --- a/src/utils/FetchHelper.ts +++ b/src/utils/FetchHelper.ts @@ -1,7 +1,6 @@ import fetch from 'cross-fetch' import LoggerInstance from './Logger' -import fs from 'fs' -import save from 'save-file' +import { DownloadResponse } from '../@types/DownloadResponse' export async function fetchData(url: string, opts: RequestInit): Promise { const result = await fetch(url, opts) @@ -22,9 +21,8 @@ export async function downloadFileBrowser(url: string): Promise { export async function downloadFile( url: string, - destination?: string, index?: number -): Promise { +): Promise { const response = await fetch(url) if (!response.ok) { throw new Error('Response error.') @@ -41,14 +39,8 @@ export async function downloadFile( filename = `file${index}` } } - if (destination) { - // eslint-disable-next-line no-async-promise-executor - fs.mkdirSync(destination, { recursive: true }) - fs.writeFileSync(`${destination}/${filename}`, await response.text()) - return destination - } else { - save(await response.arrayBuffer(), filename) - } + + return { data: await response.arrayBuffer(), filename } } export async function getData(url: string): Promise { diff --git a/src/utils/TokenUtils.ts b/src/utils/TokenUtils.ts new file mode 100644 index 00000000..dd2cd649 --- /dev/null +++ b/src/utils/TokenUtils.ts @@ -0,0 +1,126 @@ +import Decimal from 'decimal.js' +import { Contract } from 'web3-eth-contract' +import { amountToUnits, getFairGasPrice, unitsToAmount } from './ContractUtils' +import { minAbi } from './minAbi' +import LoggerInstance from './Logger' +import { TransactionReceipt } from 'web3-core' +import Web3 from 'web3' +import { GASLIMIT_DEFAULT } from '.' + +/** + * Estimate gas cost for approval function + * @param {String} account + * @param {String} tokenAddress + * @param {String} spender + * @param {String} amount + * @param {String} force + * @param {Contract} contractInstance optional contract instance + * @return {Promise} + */ +export async function estApprove( + web3: Web3, + account: string, + tokenAddress: string, + spender: string, + amount: string, + contractInstance?: Contract +): Promise { + const tokenContract = contractInstance || new web3.eth.Contract(minAbi, tokenAddress) + + const gasLimitDefault = GASLIMIT_DEFAULT + let estGas + try { + estGas = await tokenContract.methods + .approve(spender, amount) + .estimateGas({ from: account }, (err, estGas) => (err ? gasLimitDefault : estGas)) + } catch (e) { + estGas = gasLimitDefault + LoggerInstance.error('estimate gas failed for approve!', e) + } + return estGas +} + +/** + * Approve spender to spent amount tokens + * @param {String} account + * @param {String} tokenAddress + * @param {String} spender + * @param {String} amount (always expressed as wei) + * @param {String} force if true, will overwrite any previous allowence. Else, will check if allowence is enough and will not send a transaction if it's not needed + */ +export async function approve( + web3: Web3, + account: string, + tokenAddress: string, + spender: string, + amount: string, + force = false +): Promise { + const tokenContract = new web3.eth.Contract(minAbi, tokenAddress) + if (!force) { + const currentAllowence = await allowance(web3, tokenAddress, account, spender) + if (new Decimal(currentAllowence).greaterThanOrEqualTo(new Decimal(amount))) { + return currentAllowence + } + } + let result = null + const amountFormatted = await amountToUnits(web3, tokenAddress, amount) + const estGas = await estApprove( + web3, + account, + tokenAddress, + spender, + amountFormatted, + tokenContract + ) + + try { + result = await tokenContract.methods.approve(spender, amountFormatted).send({ + from: account, + gas: estGas + 1, + gasPrice: await getFairGasPrice(web3, null) + }) + } catch (e) { + LoggerInstance.error( + `ERRPR: Failed to approve spender to spend tokens : ${e.message}` + ) + } + return result +} + +/** + * Get Allowance for any erc20 + * @param {Web3} web3 + * @param {String } tokenAdress + * @param {String} account + * @param {String} spender + */ +export async function allowance( + web3: Web3, + tokenAddress: string, + account: string, + spender: string +): Promise { + const tokenContract = new web3.eth.Contract(minAbi, tokenAddress) + const trxReceipt = await tokenContract.methods.allowance(account, spender).call() + + return await unitsToAmount(web3, tokenAddress, trxReceipt) +} + +/** + * Get balance for any erc20 + * @param {Web3} web3 + * @param {String} tokenAdress + * @param {String} owner + * @param {String} spender + */ +export async function balance( + web3: Web3, + tokenAddress: string, + account: string +): Promise { + const tokenContract = new web3.eth.Contract(minAbi, tokenAddress) + const trxReceipt = await tokenContract.methods.balanceOf(account).call() + + return await unitsToAmount(web3, tokenAddress, trxReceipt) +} diff --git a/src/utils/index.ts b/src/utils/index.ts index ceffbf1d..b44f6204 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -6,3 +6,4 @@ export * from './ConfigHelper' export * from './DdoHelpers' export * from './Constants' export * from './SignatureUtils' +export * from './TokenUtils' diff --git a/src/utils/minAbi.ts b/src/utils/minAbi.ts new file mode 100644 index 00000000..46db9cba --- /dev/null +++ b/src/utils/minAbi.ts @@ -0,0 +1,224 @@ +import { AbiItem } from 'web3-utils/types' + +export const minAbi = [ + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + constant: false, + inputs: [ + { + name: '_spender', + type: 'address' + }, + { + name: '_value', + type: 'uint256' + } + ], + name: 'approve', + outputs: [ + { + name: '', + type: 'bool' + } + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function' + }, + { + constant: true, + inputs: [], + name: 'totalSupply', + outputs: [ + { + name: '', + type: 'uint256' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + constant: false, + inputs: [ + { + name: '_from', + type: 'address' + }, + { + name: '_to', + type: 'address' + }, + { + name: '_value', + type: 'uint256' + } + ], + name: 'transferFrom', + outputs: [ + { + name: '', + type: 'bool' + } + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function' + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address' + } + ], + name: 'balanceOf', + outputs: [ + { + name: 'balance', + type: 'uint256' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + constant: false, + inputs: [ + { + name: '_to', + type: 'address' + }, + { + name: '_value', + type: 'uint256' + } + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool' + } + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function' + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address' + }, + { + name: '_spender', + type: 'address' + } + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256' + } + ], + payable: false, + stateMutability: 'view', + type: 'function' + }, + { + payable: true, + stateMutability: 'payable', + type: 'fallback' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'owner', + type: 'address' + }, + { + indexed: true, + name: 'spender', + type: 'address' + }, + { + indexed: false, + name: 'value', + type: 'uint256' + } + ], + name: 'Approval', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'from', + type: 'address' + }, + { + indexed: true, + name: 'to', + type: 'address' + }, + { + indexed: false, + name: 'value', + type: 'uint256' + } + ], + name: 'Transfer', + type: 'event' + } +] as AbiItem[] diff --git a/test/integration/ComputeFlow.test.ts b/test/integration/ComputeFlow.test.ts index e09013c3..5e35dbb9 100644 --- a/test/integration/ComputeFlow.test.ts +++ b/test/integration/ComputeFlow.test.ts @@ -8,10 +8,9 @@ import { Erc20CreateParams } from '../../src/interfaces' import { getHash } from '../../src/utils' import { Nft } from '../../src/tokens/NFT' import Web3 from 'web3' -import { algo, SHA256 } from 'crypto-js' +import { SHA256 } from 'crypto-js' import { homedir } from 'os' import fs from 'fs' -import { downloadFile } from '../../src/utils/FetchHelper' import console from 'console' import { ProviderFees } from '../../src/@types' @@ -179,7 +178,6 @@ describe('Simple compute tests', async () => { encryptedResponse, '0x' + metadataHash ) - console.log('setMetadata tx', res) // let's publish the algorithm as well const nftParamsAlgo: NftCreateData = { name: 'testNFT', @@ -229,7 +227,6 @@ describe('Simple compute tests', async () => { '0x' + metadataHash ) - console.log('starting to wait for aqua') // let's wait const resolvedDDOAsset = await aquarius.waitForAqua(ddo.id) assert(resolvedDDOAsset, 'Cannot fetch DDO from Aquarius') diff --git a/test/integration/SimplePublishConsumeFlow.test.ts b/test/integration/SimplePublishConsumeFlow.test.ts index a12f8c1c..3538241a 100644 --- a/test/integration/SimplePublishConsumeFlow.test.ts +++ b/test/integration/SimplePublishConsumeFlow.test.ts @@ -11,7 +11,6 @@ import { SHA256 } from 'crypto-js' import { homedir } from 'os' import fs from 'fs' import { downloadFile } from '../../src/utils/FetchHelper' -import console from 'console' import { ProviderFees } from '../../src/@types/Provider' const data = JSON.parse( @@ -23,7 +22,6 @@ const data = JSON.parse( ) const addresses = data.development -console.log(addresses) const aquarius = new Aquarius('http://127.0.0.1:5000') const web3 = new Web3('http://127.0.0.1:8545') const providerUrl = 'http://172.15.0.4:8030' @@ -161,7 +159,7 @@ describe('Simple Publish & consume test', async () => { ) assert(downloadURL, 'Provider getDownloadUrl failed') try { - await downloadFile(downloadURL, './tmpfile') + const fileData = await downloadFile(downloadURL) } catch (e) { assert.fail('Download failed') } diff --git a/test/unit/NftFactory.test.ts b/test/unit/NftFactory.test.ts index a32585c2..b0a2b308 100644 --- a/test/unit/NftFactory.test.ts +++ b/test/unit/NftFactory.test.ts @@ -411,7 +411,6 @@ describe('Nft Factory test', () => { _providerFees: providerFees } ] - console.log('orders', orders) await nftFactory.startMultipleTokenOrder(user2, orders) // we check user2 has no more DTs expect(await dtContract.methods.balanceOf(user2).call()).to.equal('0') diff --git a/test/unit/pools/balancer/Pool.test.ts b/test/unit/pools/balancer/Pool.test.ts index 334c991e..969daabc 100644 --- a/test/unit/pools/balancer/Pool.test.ts +++ b/test/unit/pools/balancer/Pool.test.ts @@ -12,7 +12,7 @@ import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispen import FixedRate from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json' import OPFCollector from '@oceanprotocol/contracts/artifacts/contracts/communityFee/OPFCommunityFeeCollector.sol/OPFCommunityFeeCollector.json' -import { LoggerInstance } from '../../../../src/utils' +import { allowance, amountToUnits, approve, LoggerInstance } from '../../../../src/utils' import { NftFactory, NftCreateData } from '../../../../src/factories/NFTFactory' import { Pool } from '../../../../src/pools/balancer/Pool' import { @@ -86,27 +86,31 @@ describe('Pool unit test', () => { contracts.MockERC20.options.jsonInterface, contracts.usdcAddress ) - await pool.approve( + await approve( + web3, contracts.accounts[0], contracts.daiAddress, contracts.factory721Address, '2000' ) - await pool.approve( + await approve( + web3, contracts.accounts[0], contracts.usdcAddress, contracts.factory721Address, '10000' ) expect( - await pool.allowance( + await allowance( + web3, contracts.daiAddress, contracts.accounts[0], contracts.factory721Address ) ).to.equal('2000') expect( - await pool.allowance( + await allowance( + web3, contracts.usdcAddress, contracts.accounts[0], contracts.factory721Address @@ -116,7 +120,7 @@ describe('Pool unit test', () => { web3.utils.toWei('100000') ) - await pool.amountToUnits(contracts.usdcAddress, '20') + await amountToUnits(web3, contracts.usdcAddress, '20') }) describe('Test a pool with DAI (18 Decimals)', () => { @@ -142,7 +146,7 @@ describe('Pool unit test', () => { symbol: 'ERC20DT1Symbol' } - const baseTokenInitialLiq = await pool.amountToUnits(contracts.daiAddress, '2000') + const baseTokenInitialLiq = await amountToUnits(web3, contracts.daiAddress, '2000') const poolParams: PoolCreationParams = { ssContract: contracts.sideStakingAddress, @@ -270,7 +274,7 @@ describe('Pool unit test', () => { web3.utils.toWei('1000') ) expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') - await pool.approve(user2, contracts.daiAddress, poolAddress, '10') + await approve(web3, user2, contracts.daiAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.daiAddress, @@ -294,7 +298,7 @@ describe('Pool unit test', () => { }) it('#swapExactAmountOut - should swap', async () => { - await pool.approve(user2, contracts.daiAddress, poolAddress, '100') + await approve(web3, user2, contracts.daiAddress, poolAddress, '100') expect(await daiContract.methods.balanceOf(user2).call()).to.equal( web3.utils.toWei('990') ) @@ -324,8 +328,8 @@ describe('Pool unit test', () => { '50' // Amounts IN ] - await pool.approve(user2, erc20Token, poolAddress, '50') - await pool.approve(user2, contracts.daiAddress, poolAddress, '50') + await approve(web3, user2, erc20Token, poolAddress, '50') + await approve(web3, user2, contracts.daiAddress, poolAddress, '50') const tx = await pool.joinPool(user2, poolAddress, BPTAmountOut, maxAmountsIn) assert(tx != null) expect(await pool.sharesBalance(user2, poolAddress)).to.equal(BPTAmountOut) @@ -335,8 +339,8 @@ describe('Pool unit test', () => { it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { const daiAmountIn = '100' const minBPTOut = '0.1' - await pool.approve(user2, contracts.daiAddress, poolAddress, '100', true) - expect(await pool.allowance(contracts.daiAddress, user2, poolAddress)).to.equal( + await approve(web3, user2, contracts.daiAddress, poolAddress, '100', true) + expect(await allowance(web3, contracts.daiAddress, user2, poolAddress)).to.equal( '100' ) const tx = await pool.joinswapExternAmountIn( @@ -361,7 +365,7 @@ describe('Pool unit test', () => { const BPTAmountOut = '0.1' const maxDAIIn = '100' - await pool.approve(user2, contracts.daiAddress, poolAddress, '100') + await approve(web3, user2, contracts.daiAddress, poolAddress, '100') const tx = await pool.joinswapPoolAmountOut( user2, @@ -627,7 +631,7 @@ describe('Pool unit test', () => { vestingAmount: '10000', vestedBlocks: 2500000, initialBaseTokenLiquidity: web3.utils.fromWei( - await pool.amountToUnits(contracts.usdcAddress, '2000') + await amountToUnits(web3, contracts.usdcAddress, '2000') ), swapFeeLiquidityProvider: 1e15, swapFeeMarketRunner: 1e15 @@ -807,7 +811,7 @@ describe('Pool unit test', () => { }) it('#swapExactAmountIn - should swap', async () => { - const transferAmount = await pool.amountToUnits(contracts.usdcAddress, '1000') // 1000 USDC + const transferAmount = await amountToUnits(web3, contracts.usdcAddress, '1000') // 1000 USDC await usdcContract.methods .transfer(user2, transferAmount) .send({ from: contracts.accounts[0] }) @@ -816,7 +820,7 @@ describe('Pool unit test', () => { ) expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') - await pool.approve(user2, contracts.usdcAddress, poolAddress, '10') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -840,9 +844,9 @@ describe('Pool unit test', () => { it('#swapExactAmountOut - should swap', async () => { expect(await usdcContract.methods.balanceOf(user2).call()).to.equal( - (await pool.amountToUnits(contracts.usdcAddress, '990')).toString() + (await amountToUnits(web3, contracts.usdcAddress, '990')).toString() ) - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -870,8 +874,8 @@ describe('Pool unit test', () => { '50' // Amounts IN ] - await pool.approve(user2, erc20Token, poolAddress, '50') - await pool.approve(user2, contracts.usdcAddress, poolAddress, '50') + await approve(web3, user2, erc20Token, poolAddress, '50') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '50') const tx = await pool.joinPool(user2, poolAddress, BPTAmountOut, maxAmountsIn) assert(tx != null) expect(await pool.sharesBalance(user2, poolAddress)).to.equal(BPTAmountOut) @@ -885,7 +889,7 @@ describe('Pool unit test', () => { it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { const usdcAmountIn = '100' const minBPTOut = '0.1' - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100', true) + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100', true) const tx = await pool.joinswapExternAmountIn( user2, @@ -909,7 +913,7 @@ describe('Pool unit test', () => { const BPTAmountOut = '0.1' const maxUSDCIn = '100' - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100') const tx = await pool.joinswapPoolAmountOut( user2, diff --git a/test/unit/pools/fixedRate/FixedRateExchange.test.ts b/test/unit/pools/fixedRate/FixedRateExchange.test.ts index dfb2b2d1..7f8181e3 100644 --- a/test/unit/pools/fixedRate/FixedRateExchange.test.ts +++ b/test/unit/pools/fixedRate/FixedRateExchange.test.ts @@ -86,11 +86,6 @@ describe('Fixed Rate unit test', () => { contracts.MockERC20.options.jsonInterface, contracts.usdcAddress ) - - console.log( - await usdcContract.methods.decimals().call(), - 'USDC DECIMALS IN THIS TEST' - ) }) describe('Test a Fixed Rate Exchange with DAI (18 Decimals)', () => { diff --git a/test/unit/pools/ssContracts/SideStaking.test.ts b/test/unit/pools/ssContracts/SideStaking.test.ts index bcd52b9c..0abdf197 100644 --- a/test/unit/pools/ssContracts/SideStaking.test.ts +++ b/test/unit/pools/ssContracts/SideStaking.test.ts @@ -12,7 +12,7 @@ import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispen import FixedRate from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json' import OPFCollector from '@oceanprotocol/contracts/artifacts/contracts/communityFee/OPFCommunityFeeCollector.sol/OPFCommunityFeeCollector.json' -import { LoggerInstance } from '../../../../src/utils' +import { allowance, amountToUnits, approve, LoggerInstance } from '../../../../src/utils' import { NftFactory, NftCreateData } from '../../../../src/factories/NFTFactory' import { Pool } from '../../../../src/pools/balancer/Pool' import { SideStaking } from '../../../../src/pools/ssContracts/SideStaking' @@ -93,13 +93,15 @@ describe('SideStaking unit test', () => { contracts.MockERC20.options.jsonInterface, contracts.usdcAddress ) - await pool.approve( + await approve( + web3, contracts.accounts[0], contracts.daiAddress, contracts.factory721Address, '2000' ) - await pool.approve( + await approve( + web3, contracts.accounts[0], contracts.usdcAddress, contracts.factory721Address, @@ -107,14 +109,16 @@ describe('SideStaking unit test', () => { ) expect( - await pool.allowance( + await allowance( + web3, contracts.daiAddress, contracts.accounts[0], contracts.factory721Address ) ).to.equal('2000') expect( - await pool.allowance( + await allowance( + web3, contracts.usdcAddress, contracts.accounts[0], contracts.factory721Address @@ -129,7 +133,7 @@ describe('SideStaking unit test', () => { 'USDC DECIMALS IN THIS TEST' ) - await pool.amountToUnits(contracts.usdcAddress, '20') + await amountToUnits(web3, contracts.usdcAddress, '20') }) describe('Test a pool with DAI (18 Decimals)', () => { @@ -291,7 +295,7 @@ describe('SideStaking unit test', () => { web3.utils.toWei('1000') ) expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') - await pool.approve(user2, contracts.daiAddress, poolAddress, '10') + await approve(web3, user2, contracts.daiAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.daiAddress, tokenOut: erc20Token, @@ -315,7 +319,7 @@ describe('SideStaking unit test', () => { }) it('#swapExactAmountOut - should swap', async () => { - await pool.approve(user2, contracts.daiAddress, poolAddress, '100') + await approve(web3, user2, contracts.daiAddress, poolAddress, '100') expect(await daiContract.methods.balanceOf(user2).call()).to.equal( web3.utils.toWei('990') ) @@ -341,8 +345,8 @@ describe('SideStaking unit test', () => { it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { const daiAmountIn = '100' const minBPTOut = '0.1' - await pool.approve(user2, contracts.daiAddress, poolAddress, '100', true) - expect(await pool.allowance(contracts.daiAddress, user2, poolAddress)).to.equal( + await approve(web3, user2, contracts.daiAddress, poolAddress, '100', true) + expect(await allowance(web3, contracts.daiAddress, user2, poolAddress)).to.equal( '100' ) const tx = await pool.joinswapExternAmountIn( @@ -367,7 +371,7 @@ describe('SideStaking unit test', () => { const BPTAmountOut = '0.1' const maxDAIIn = '100' - await pool.approve(user2, contracts.daiAddress, poolAddress, '100') + await approve(web3, user2, contracts.daiAddress, poolAddress, '100') const tx = await pool.joinswapPoolAmountOut( user2, @@ -465,7 +469,7 @@ describe('SideStaking unit test', () => { vestingAmount: '10000', vestedBlocks: 2500000, initialBaseTokenLiquidity: web3.utils.fromWei( - await pool.amountToUnits(contracts.usdcAddress, '2000') + await amountToUnits(web3, contracts.usdcAddress, '2000') ), swapFeeLiquidityProvider: 1e15, swapFeeMarketRunner: 1e15 @@ -544,7 +548,7 @@ describe('SideStaking unit test', () => { }) it('#swapExactAmountIn - should swap', async () => { - const transferAmount = await pool.amountToUnits(contracts.usdcAddress, '1000') // 1000 USDC + const transferAmount = await amountToUnits(web3, contracts.usdcAddress, '1000') // 1000 USDC await usdcContract.methods .transfer(user2, transferAmount) .send({ from: contracts.accounts[0] }) @@ -553,7 +557,7 @@ describe('SideStaking unit test', () => { ) expect(await erc20Contract.methods.balanceOf(user2).call()).to.equal('0') - await pool.approve(user2, contracts.usdcAddress, poolAddress, '10') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '10') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -577,9 +581,9 @@ describe('SideStaking unit test', () => { it('#swapExactAmountOut - should swap', async () => { expect(await usdcContract.methods.balanceOf(user2).call()).to.equal( - (await pool.amountToUnits(contracts.usdcAddress, '990')).toString() + (await amountToUnits(web3, contracts.usdcAddress, '990')).toString() ) - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100') const tokenInOutMarket: TokenInOutMarket = { tokenIn: contracts.usdcAddress, tokenOut: erc20Token, @@ -603,7 +607,7 @@ describe('SideStaking unit test', () => { it('#joinswapExternAmountIn- user2 should add liquidity, receiving LP tokens', async () => { const usdcAmountIn = '100' const minBPTOut = '0.1' - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100', true) + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100', true) const tx = await pool.joinswapExternAmountIn( user2, @@ -627,7 +631,7 @@ describe('SideStaking unit test', () => { const BPTAmountOut = '0.1' const maxUSDCIn = '100' - await pool.approve(user2, contracts.usdcAddress, poolAddress, '100') + await approve(web3, user2, contracts.usdcAddress, poolAddress, '100') const tx = await pool.joinswapPoolAmountOut( user2,