From 417fa9a7aacdc4d1daf0c1a8e603031f85a8155f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:43:37 +0000 Subject: [PATCH 01/45] Update package.json dependencies and fix version path for deployment scripts --- package.json | 24 +- yarn.lock | 6130 +++++++++++++++----------------------------------- 2 files changed, 1837 insertions(+), 4317 deletions(-) diff --git a/package.json b/package.json index c5fd351ac..e964fe613 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "compile": "npx hardhat compile", "cleanCompile": "npx hardhat clean && yarn compile", "deploy-to-both-chains": "yarn deploy-to-mainnet && yarn deploy-to-schain", - "deploy-to-mainnet": "VERSION=$(cat ../VERSION) npx hardhat run migrations/deployMainnet.ts --network mainnet", - "deploy-to-schain": "VERSION=$(cat ../VERSION) npx hardhat run migrations/deploySchain.ts --network schain", + "deploy-to-mainnet": "VERSION=$(cat ./VERSION) npx hardhat run migrations/deployMainnet.ts --network mainnet", + "deploy-to-schain": "VERSION=$(cat ./VERSION) npx hardhat run migrations/deploySchain.ts --network schain", "deploy-skale-manager-components": "npx hardhat run migrations/deploySkaleManagerComponents.ts --network mainnet", "eslint": "npx eslint .", "lint": "npx solhint \"contracts/**/*.sol\"", @@ -21,23 +21,24 @@ "no-hooks": "git config core.hooksPath .git/hooks" }, "dependencies": { - "@nomiclabs/hardhat-ethers": "^2.1.0", + "@nomicfoundation/hardhat-ethers": "^3.0.8", "@openzeppelin/contracts-upgradeable": "^4.7.1", - "@openzeppelin/hardhat-upgrades": "^1.14.0", + "@openzeppelin/hardhat-upgrades": "^3.1.1", + "@safe-global/api-kit": "2.5.4", "@skalenetwork/etherbase-interfaces": "^0.0.1-develop.20", "@skalenetwork/ima-interfaces": "2.0.0", "@skalenetwork/skale-manager-interfaces": "2.0.0", - "@skalenetwork/upgrade-tools": "^2.0.2", + "@skalenetwork/upgrade-tools": "3.0.0-develop.33", "axios": "^0.21.4", "dotenv": "^16.0.0", - "ethers": "^5.7.2", - "hardhat": "2.11.0 - 2.16.1" + "ethers": "^6.1.0", + "hardhat": "^2.22.15" }, "devDependencies": { - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "@nomiclabs/hardhat-waffle": "^2.0.2", - "@typechain/ethers-v5": "^11.1.1", - "@typechain/hardhat": "^7.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.8", + "@nomicfoundation/hardhat-verify": "^1.1.1", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", "@types/chai": "^4.2.12", "@types/chai-almost": "^1.0.1", "@types/chai-as-promised": "^7.1.3", @@ -52,7 +53,6 @@ "chai-as-promised": "^7.1.1", "cspell": "^8.14.4", "eslint": "^8.46.0", - "ethereum-waffle": "^4.0.10", "ganache": "7.9.2", "solhint": "3.3.6", "solidity-coverage": "^0.8.4", diff --git a/yarn.lock b/yarn.lock index bbb75f7d8..c1516f97e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,15 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@adraffy/ens-normalize@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== "@aws-crypto/sha256-js@1.2.2": version "1.2.2" @@ -26,12 +31,12 @@ tslib "^1.11.1" "@aws-sdk/types@^3.1.0": - version "3.378.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.378.0.tgz#93a811ccdf15c81b1947f1cd67922c4690792189" - integrity sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w== + version "3.664.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.664.0.tgz#e6de1c0a2cdfe4f1e43271223dc0b55e613ced58" + integrity sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw== dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" + "@smithy/types" "^3.5.0" + tslib "^2.6.2" "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" @@ -41,443 +46,409 @@ tslib "^2.3.1" "@babel/code-frame@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.9.tgz#895b6c7e04a7271a0cbfd575d2e8131751914cc7" + integrity sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ== dependencies: - "@babel/highlight" "^7.14.5" + "@babel/highlight" "^7.25.9" + picocolors "^1.0.0" -"@babel/helper-validator-identifier@^7.14.5": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/highlight@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" + integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.25.9" + chalk "^2.4.2" js-tokens "^4.0.0" - -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - -"@cspell/cspell-bundled-dicts@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.14.4.tgz#61e116fb3c505d4ebf2f842f24ea1e39bc47d469" - integrity sha512-JHZOpCJzN6fPBapBOvoeMxZbr0ZA11ZAkwcqM4w0lKoacbi6TwK8GIYf66hHvwLmMeav75TNXWE6aPTvBLMMqA== - dependencies: - "@cspell/dict-ada" "^4.0.2" - "@cspell/dict-aws" "^4.0.4" - "@cspell/dict-bash" "^4.1.4" - "@cspell/dict-companies" "^3.1.4" - "@cspell/dict-cpp" "^5.1.16" - "@cspell/dict-cryptocurrencies" "^5.0.0" - "@cspell/dict-csharp" "^4.0.2" - "@cspell/dict-css" "^4.0.13" - "@cspell/dict-dart" "^2.2.1" - "@cspell/dict-django" "^4.1.0" - "@cspell/dict-docker" "^1.1.7" - "@cspell/dict-dotnet" "^5.0.5" - "@cspell/dict-elixir" "^4.0.3" - "@cspell/dict-en-common-misspellings" "^2.0.4" + picocolors "^1.0.0" + +"@cspell/cspell-bundled-dicts@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.15.4.tgz#dcba969630b8ce132e649721027a2e67ff483174" + integrity sha512-t5b2JwGeUmzmjl319mCuaeKGxTvmzLLRmrpdHr+ZZGRO4nf7L48Lbe9A6uwNUvsZe0cXohiNXsrrsuzRVXswVA== + dependencies: + "@cspell/dict-ada" "^4.0.5" + "@cspell/dict-aws" "^4.0.7" + "@cspell/dict-bash" "^4.1.8" + "@cspell/dict-companies" "^3.1.7" + "@cspell/dict-cpp" "^5.1.22" + "@cspell/dict-cryptocurrencies" "^5.0.3" + "@cspell/dict-csharp" "^4.0.5" + "@cspell/dict-css" "^4.0.16" + "@cspell/dict-dart" "^2.2.4" + "@cspell/dict-django" "^4.1.3" + "@cspell/dict-docker" "^1.1.11" + "@cspell/dict-dotnet" "^5.0.8" + "@cspell/dict-elixir" "^4.0.6" + "@cspell/dict-en-common-misspellings" "^2.0.7" "@cspell/dict-en-gb" "1.1.33" - "@cspell/dict-en_us" "^4.3.23" - "@cspell/dict-filetypes" "^3.0.4" - "@cspell/dict-flutter" "^1.0.0" - "@cspell/dict-fonts" "^4.0.0" - "@cspell/dict-fsharp" "^1.0.1" - "@cspell/dict-fullstack" "^3.2.0" - "@cspell/dict-gaming-terms" "^1.0.5" - "@cspell/dict-git" "^3.0.0" - "@cspell/dict-golang" "^6.0.12" - "@cspell/dict-google" "^1.0.1" - "@cspell/dict-haskell" "^4.0.1" - "@cspell/dict-html" "^4.0.5" - "@cspell/dict-html-symbol-entities" "^4.0.0" - "@cspell/dict-java" "^5.0.7" - "@cspell/dict-julia" "^1.0.1" - "@cspell/dict-k8s" "^1.0.6" - "@cspell/dict-latex" "^4.0.0" - "@cspell/dict-lorem-ipsum" "^4.0.0" - "@cspell/dict-lua" "^4.0.3" - "@cspell/dict-makefile" "^1.0.0" - "@cspell/dict-monkeyc" "^1.0.6" - "@cspell/dict-node" "^5.0.1" - "@cspell/dict-npm" "^5.1.4" - "@cspell/dict-php" "^4.0.10" - "@cspell/dict-powershell" "^5.0.8" - "@cspell/dict-public-licenses" "^2.0.8" - "@cspell/dict-python" "^4.2.6" - "@cspell/dict-r" "^2.0.1" - "@cspell/dict-ruby" "^5.0.3" - "@cspell/dict-rust" "^4.0.5" - "@cspell/dict-scala" "^5.0.3" - "@cspell/dict-software-terms" "^4.1.3" - "@cspell/dict-sql" "^2.1.5" - "@cspell/dict-svelte" "^1.0.2" - "@cspell/dict-swift" "^2.0.1" - "@cspell/dict-terraform" "^1.0.1" - "@cspell/dict-typescript" "^3.1.6" - "@cspell/dict-vue" "^3.0.0" - -"@cspell/cspell-json-reporter@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.14.4.tgz#4646c1963b9b02fea3faae3c5ee04fb6dda8548e" - integrity sha512-gJ6tQbGCNLyHS2iIimMg77as5MMAFv3sxU7W6tjLlZp8htiNZS7fS976g24WbT/hscsTT9Dd0sNHkpo8K3nvVw== - dependencies: - "@cspell/cspell-types" "8.14.4" - -"@cspell/cspell-pipe@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.14.4.tgz#5e81509d7c2763ac0e8c09b7989fe95e36fe0a05" - integrity sha512-CLLdouqfrQ4rqdQdPu0Oo+HHCU/oLYoEsK1nNPb28cZTFxnn0cuSPKB6AMPBJmMwdfJ6fMD0BCKNbEe1UNLHcw== - -"@cspell/cspell-resolver@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.14.4.tgz#839258970996c8262b290f6e8fbbac27d43fb0b8" - integrity sha512-s3uZyymJ04yn8+zlTp7Pt1WRSlAel6XVo+iZRxls3LSvIP819KK64DoyjCD2Uon0Vg9P/K7aAPt8GcxDcnJtgA== + "@cspell/dict-en_us" "^4.3.26" + "@cspell/dict-filetypes" "^3.0.7" + "@cspell/dict-flutter" "^1.0.3" + "@cspell/dict-fonts" "^4.0.3" + "@cspell/dict-fsharp" "^1.0.4" + "@cspell/dict-fullstack" "^3.2.3" + "@cspell/dict-gaming-terms" "^1.0.8" + "@cspell/dict-git" "^3.0.3" + "@cspell/dict-golang" "^6.0.16" + "@cspell/dict-google" "^1.0.4" + "@cspell/dict-haskell" "^4.0.4" + "@cspell/dict-html" "^4.0.9" + "@cspell/dict-html-symbol-entities" "^4.0.3" + "@cspell/dict-java" "^5.0.10" + "@cspell/dict-julia" "^1.0.4" + "@cspell/dict-k8s" "^1.0.9" + "@cspell/dict-latex" "^4.0.3" + "@cspell/dict-lorem-ipsum" "^4.0.3" + "@cspell/dict-lua" "^4.0.6" + "@cspell/dict-makefile" "^1.0.3" + "@cspell/dict-monkeyc" "^1.0.9" + "@cspell/dict-node" "^5.0.4" + "@cspell/dict-npm" "^5.1.8" + "@cspell/dict-php" "^4.0.13" + "@cspell/dict-powershell" "^5.0.13" + "@cspell/dict-public-licenses" "^2.0.11" + "@cspell/dict-python" "^4.2.12" + "@cspell/dict-r" "^2.0.4" + "@cspell/dict-ruby" "^5.0.7" + "@cspell/dict-rust" "^4.0.9" + "@cspell/dict-scala" "^5.0.6" + "@cspell/dict-software-terms" "^4.1.11" + "@cspell/dict-sql" "^2.1.8" + "@cspell/dict-svelte" "^1.0.5" + "@cspell/dict-swift" "^2.0.4" + "@cspell/dict-terraform" "^1.0.5" + "@cspell/dict-typescript" "^3.1.10" + "@cspell/dict-vue" "^3.0.3" + +"@cspell/cspell-json-reporter@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.15.4.tgz#f8902234bd000040d40ae3574860d221c991aff9" + integrity sha512-solraYhZG4l++NeVCOtpc8DMvwHc46TmJt8DQbgvKtk6wOjTEcFrwKfA6Ei9YKbvyebJlpWMenO3goOll0loYg== + dependencies: + "@cspell/cspell-types" "8.15.4" + +"@cspell/cspell-pipe@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.15.4.tgz#c3c958d3b900ccdcc4f2a8610fe464882e3f1759" + integrity sha512-WfCmZVFC6mX6vYlf02hWwelcSBTbDQgc5YqY+1miuMk+OHSUAHSACjZId6/a4IAID94xScvFfj7jgrdejUVvIQ== + +"@cspell/cspell-resolver@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.15.4.tgz#83ade61a1e11b88be756a805138ec8b31191e0d0" + integrity sha512-Zr428o+uUTqywrdKyjluJVnDPVAJEqZ1chQLKIrHggUah1cgs5aQ7rZ+0Rv5euYMlC2idZnP7IL6TDaIib80oA== dependencies: global-directory "^4.0.1" -"@cspell/cspell-service-bus@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.14.4.tgz#3c081578c7a369e4a737311e8ee31e709a48abb8" - integrity sha512-i3UG+ep63akNsDXZrtGgICNF3MLBHtvKe/VOIH6+L+NYaAaVHqqQvOY9MdUwt1HXh8ElzfwfoRp36wc5aAvt6g== +"@cspell/cspell-service-bus@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.15.4.tgz#76a0c380e0102a4521ce96a64ade580331ca8404" + integrity sha512-pXYofnV/V9Y3LZdfFGbmhdxPX/ABjiD3wFjGHt5YhIU9hjVVuvjFlgY7pH2AvRjs4F8xKXv1ReWl44BJOL9gLA== -"@cspell/cspell-types@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.14.4.tgz#93ceff0bcefe75c259ae3475961f580f3de36e79" - integrity sha512-VXwikqdHgjOVperVVCn2DOe8W3rPIswwZtMHfRYnagpzZo/TOntIjkXPJSfTtl/cFyx5DnCBsDH8ytKGlMeHkw== +"@cspell/cspell-types@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.15.4.tgz#307db2055ff669d99487c1772edb393243bb5098" + integrity sha512-1hDtgYDQVW11zgtrr12EmGW45Deoi7IjZOhzPFLb+3WkhZ46ggWdbrRalWwBolQPDDo6+B2Q6WXz5hdND+Tpwg== -"@cspell/dict-ada@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.0.2.tgz#8da2216660aeb831a0d9055399a364a01db5805a" - integrity sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA== +"@cspell/dict-ada@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.0.5.tgz#c14aae2faaecbad2d99f0d701e4700a48c68ef60" + integrity sha512-6/RtZ/a+lhFVmrx/B7bfP7rzC4yjEYe8o74EybXcvu4Oue6J4Ey2WSYj96iuodloj1LWrkNCQyX5h4Pmcj0Iag== -"@cspell/dict-aws@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.4.tgz#638a38df18c93d5cb74607b24ab4e1498825d565" - integrity sha512-6AWI/Kkf+RcX/J81VX8+GKLeTgHWEr/OMhGk3dHQzWK66RaqDJCGDqi7494ghZKcBB7dGa3U5jcKw2FZHL/u3w== +"@cspell/dict-aws@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.7.tgz#f96f3b70cd52a25b895eb08e297de5a5cc3fc5b6" + integrity sha512-PoaPpa2NXtSkhGIMIKhsJUXB6UbtTt6Ao3x9JdU9kn7fRZkwD4RjHDGqulucIOz7KeEX/dNRafap6oK9xHe4RA== -"@cspell/dict-bash@^4.1.4": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.1.4.tgz#a7942df189d3cc5ebced5b877d64ddbb24301137" - integrity sha512-W/AHoQcJYn3Vn/tUiXX2+6D/bhfzdDshwcbQWv9TdiNlXP9P6UJjDKWbxyA5ogJCsR2D0X9Kx11oV8E58siGKQ== +"@cspell/dict-bash@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.1.8.tgz#26dc898e06eddea069cf1ad475ee0e867c89e632" + integrity sha512-I2CM2pTNthQwW069lKcrVxchJGMVQBzru2ygsHCwgidXRnJL/NTjAPOFTxN58Jc1bf7THWghfEDyKX/oyfc0yg== -"@cspell/dict-companies@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.1.4.tgz#2e7094416432b8547ec335683f5aac9a49dce47e" - integrity sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q== +"@cspell/dict-companies@^3.1.7": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.1.7.tgz#c9abd6f5293f103062f54dde01f2bee939189f79" + integrity sha512-ncVs/efuAkP1/tLDhWbXukBjgZ5xOUfe03neHMWsE8zvXXc5+Lw6TX5jaJXZLOoES/f4j4AhRE20jsPCF5pm+A== -"@cspell/dict-cpp@^5.1.16": - version "5.1.16" - resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.1.16.tgz#e6557d5b916ebff02045b60f7016749e085921b0" - integrity sha512-32fU5RkuOM55IRcxjByiSoKbjr+C4danDfYjHaQNRWdvjzJzci3fLDGA2wTXiclkgDODxGiV8LCTUwCz+3TNWA== +"@cspell/dict-cpp@^5.1.22": + version "5.1.22" + resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.1.22.tgz#ee14d2b193c0a25dc58c609979f1500cd2f6e870" + integrity sha512-g1/8P5/Q+xnIc8Js4UtBg3XOhcFrFlFbG3UWVtyEx49YTf0r9eyDtDt1qMMDBZT91pyCwLcAEbwS+4i5PIfNZw== -"@cspell/dict-cryptocurrencies@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.0.tgz#19fbc7bdbec76ce64daf7d53a6d0f3cfff7d0038" - integrity sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA== +"@cspell/dict-cryptocurrencies@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.3.tgz#502f9fffcb2835a3379668ddebdc487678ce6207" + integrity sha512-bl5q+Mk+T3xOZ12+FG37dB30GDxStza49Rmoax95n37MTLksk9wBo1ICOlPJ6PnDUSyeuv4SIVKgRKMKkJJglA== -"@cspell/dict-csharp@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz#e55659dbe594e744d86b1baf0f3397fe57b1e283" - integrity sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g== +"@cspell/dict-csharp@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.5.tgz#c677c50be09ca5bb3a2cc0be15f3cd05141fd2f7" + integrity sha512-c/sFnNgtRwRJxtC3JHKkyOm+U3/sUrltFeNwml9VsxKBHVmvlg4tk4ar58PdpW9/zTlGUkWi2i85//DN1EsUCA== -"@cspell/dict-css@^4.0.13": - version "4.0.13" - resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.0.13.tgz#b95310ba67694d25bcb055786dde65e091621d14" - integrity sha512-WfOQkqlAJTo8eIQeztaH0N0P+iF5hsJVKFuhy4jmARPISy8Efcv8QXk2/IVbmjJH0/ZV7dKRdnY5JFVXuVz37g== +"@cspell/dict-css@^4.0.16": + version "4.0.16" + resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.0.16.tgz#b7b87b5ea0f1157b023205bdb00070a7d231e367" + integrity sha512-70qu7L9z/JR6QLyJPk38fNTKitlIHnfunx0wjpWQUQ8/jGADIhMCrz6hInBjqPNdtGpYm8d1dNFyF8taEkOgrQ== -"@cspell/dict-dart@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.2.1.tgz#d5ef7632240cb19c8892e66ba5ed1089ab8e46a3" - integrity sha512-yriKm7QkoPx3JPSSOcw6iX9gOb2N50bOo/wqWviqPYbhpMRh9Xiv6dkUy3+ot+21GuShZazO8X6U5+Vw67XEwg== +"@cspell/dict-dart@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.2.4.tgz#8b877161ccdc65cead912b742b71aa55099c1706" + integrity sha512-of/cVuUIZZK/+iqefGln8G3bVpfyN6ZtH+LyLkHMoR5tEj+2vtilGNk9ngwyR8L4lEqbKuzSkOxgfVjsXf5PsQ== -"@cspell/dict-data-science@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-2.0.1.tgz#ef8040821567786d76c6153ac3e4bc265ca65b59" - integrity sha512-xeutkzK0eBe+LFXOFU2kJeAYO6IuFUc1g7iRLr7HeCmlC4rsdGclwGHh61KmttL3+YHQytYStxaRBdGAXWC8Lw== +"@cspell/dict-data-science@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-2.0.5.tgz#816e9b394c2a423d14cdc9a5de5d6fc6141d3900" + integrity sha512-nNSILXmhSJox9/QoXICPQgm8q5PbiSQP4afpbkBqPi/u/b3K9MbNH5HvOOa6230gxcGdbZ9Argl2hY/U8siBlg== -"@cspell/dict-django@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.0.tgz#2d4b765daf3c83e733ef3e06887ea34403a4de7a" - integrity sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w== +"@cspell/dict-django@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.3.tgz#a02a4a9ef8c9f47344f2d4a0c3964bcb62069ef5" + integrity sha512-yBspeL3roJlO0a1vKKNaWABURuHdHZ9b1L8d3AukX0AsBy9snSggc8xCavPmSzNfeMDXbH+1lgQiYBd3IW03fg== -"@cspell/dict-docker@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.7.tgz#bcf933283fbdfef19c71a642e7e8c38baf9014f2" - integrity sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A== +"@cspell/dict-docker@^1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.11.tgz#6fce86eb6d86d73f77e18d3e7b9747bad3ca98de" + integrity sha512-s0Yhb16/R+UT1y727ekbR/itWQF3Qz275DR1ahOa66wYtPjHUXmhM3B/LT3aPaX+hD6AWmK23v57SuyfYHUjsw== -"@cspell/dict-dotnet@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.5.tgz#0f614ef6fa052e7598a6fe20770a1e5bb19f0de1" - integrity sha512-gjg0L97ee146wX47dnA698cHm85e7EOpf9mVrJD8DmEaqoo/k1oPy2g7c7LgKxK9XnqwoXxhLNnngPrwXOoEtQ== +"@cspell/dict-dotnet@^5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.8.tgz#8a110ca302946025e0273a9940079483ec33a88a" + integrity sha512-MD8CmMgMEdJAIPl2Py3iqrx3B708MbCIXAuOeZ0Mzzb8YmLmiisY7QEYSZPg08D7xuwARycP0Ki+bb0GAkFSqg== -"@cspell/dict-elixir@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz#57c25843e46cf3463f97da72d9ef8e37c818296f" - integrity sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q== +"@cspell/dict-elixir@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.6.tgz#3d8965c558d8afd190356e9a900b02c546741feb" + integrity sha512-TfqSTxMHZ2jhiqnXlVKM0bUADtCvwKQv2XZL/DI0rx3doG8mEMS8SGPOmiyyGkHpR/pGOq18AFH3BEm4lViHIw== -"@cspell/dict-en-common-misspellings@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.4.tgz#725c5b2c83faff71fcd2183dd04a154c78eed674" - integrity sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ== +"@cspell/dict-en-common-misspellings@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.7.tgz#62861cc9e813c947ebd71c7a50fc720767b4b543" + integrity sha512-qNFo3G4wyabcwnM+hDrMYKN9vNVg/k9QkhqSlSst6pULjdvPyPs1mqz1689xO/v9t8e6sR4IKc3CgUXDMTYOpA== "@cspell/dict-en-gb@1.1.33": version "1.1.33" resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz#7f1fd90fc364a5cb77111b5438fc9fcf9cc6da0e" integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== -"@cspell/dict-en_us@^4.3.23": - version "4.3.23" - resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.23.tgz#3362b75a5051405816728ea1bb5ce997582ed383" - integrity sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg== +"@cspell/dict-en_us@^4.3.26": + version "4.3.26" + resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.26.tgz#f0d2c9492715e85b60a78f62f03918525639aa48" + integrity sha512-hDbHYJsi3UgU1J++B0WLiYhWQdsmve3CH53FIaMRAdhrWOHcuw7h1dYkQXHFEP5lOjaq53KUHp/oh5su6VkIZg== -"@cspell/dict-filetypes@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.4.tgz#aca71c7bb8c8805b54f382d98ded5ec75ebc1e36" - integrity sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg== - -"@cspell/dict-flutter@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-flutter/-/dict-flutter-1.0.0.tgz#9179aeb5e7544c061ffa3e5080a4c015f88efee3" - integrity sha512-W7k1VIc4KeV8BjEBxpA3cqpzbDWjfb7oXkEb0LecBCBp5Z7kcfnjT1YVotTx/U9PGyAOBhDaEdgZACVGNQhayw== +"@cspell/dict-filetypes@^3.0.7": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.8.tgz#016d523ca2c34dea972ea0ca931255868348d81a" + integrity sha512-D3N8sm/iptzfVwsib/jvpX+K/++rM8SRpLDFUaM4jxm8EyGmSIYRbKZvdIv5BkAWmMlTWoRqlLn7Yb1b11jKJg== -"@cspell/dict-fonts@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.0.tgz#9bc8beb2a7b068b4fdb45cb994b36fd184316327" - integrity sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q== +"@cspell/dict-flutter@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-flutter/-/dict-flutter-1.0.3.tgz#23e552209ab2238733d30ca3f2a141359756af51" + integrity sha512-52C9aUEU22ptpgYh6gQyIdA4MP6NPwzbEqndfgPh3Sra191/kgs7CVqXiO1qbtZa9gnYHUoVApkoxRE7mrXHfg== -"@cspell/dict-fsharp@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.0.1.tgz#d62c699550a39174f182f23c8c1330a795ab5f53" - integrity sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ== +"@cspell/dict-fonts@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.3.tgz#abf578c10a2e7b2bd8f4374002677625288560d9" + integrity sha512-sPd17kV5qgYXLteuHFPn5mbp/oCHKgitNfsZLFC3W2fWEgZlhg4hK+UGig3KzrYhhvQ8wBnmZrAQm0TFKCKzsA== -"@cspell/dict-fullstack@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.2.0.tgz#16dd2bd3f03166c8f48600ef032ae1ce184c7b8e" - integrity sha512-sIGQwU6G3rLTo+nx0GKyirR5dQSFeTIzFTOrURw51ISf+jKG9a3OmvsVtc2OANfvEAOLOC9Wfd8WYhmsO8KRDQ== +"@cspell/dict-fsharp@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.0.4.tgz#19a7263a61ca89cd3ec9c17537e424907b81ef38" + integrity sha512-G5wk0o1qyHUNi9nVgdE1h5wl5ylq7pcBjX8vhjHcO4XBq20D5eMoXjwqMo/+szKAqzJ+WV3BgAL50akLKrT9Rw== -"@cspell/dict-gaming-terms@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.5.tgz#d6ca40eb34a4c99847fd58a7354cd2c651065156" - integrity sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw== +"@cspell/dict-fullstack@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.2.3.tgz#f6fff74eff00c6759cba510168acada0619004cc" + integrity sha512-62PbndIyQPH11mAv0PyiyT0vbwD0AXEocPpHlCHzfb5v9SspzCCbzQ/LIBiFmyRa+q5LMW35CnSVu6OXdT+LKg== -"@cspell/dict-git@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-3.0.0.tgz#c275af86041a2b59a7facce37525e2af05653b95" - integrity sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw== +"@cspell/dict-gaming-terms@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.8.tgz#fb8a737f61e7cf560b4de7b2aaeae952f2550398" + integrity sha512-7OL0zTl93WFWhhtpXFrtm9uZXItC3ncAs8d0iQDMMFVNU1rBr6raBNxJskxE5wx2Ant12fgI66ZGVagXfN+yfA== -"@cspell/dict-golang@^6.0.12": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.12.tgz#a9d4c53edfec34d06a226a9af6af0df899bd720f" - integrity sha512-LEPeoqd+4O+vceHF73S7D7+LYfrAjOvp4Dqzh4MT30ruzlQ77yHRSuYOJtrFN1GK5ntAt/ILSVOKg9sgsz1Llg== +"@cspell/dict-git@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-3.0.3.tgz#3a3805ab9902bffc9255ec48f648145b957eb30b" + integrity sha512-LSxB+psZ0qoj83GkyjeEH/ZViyVsGEF/A6BAo8Nqc0w0HjD2qX/QR4sfA6JHUgQ3Yi/ccxdK7xNIo67L2ScW5A== -"@cspell/dict-google@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-google/-/dict-google-1.0.1.tgz#34701471a616011aeaaf480d4834436b6b6b1da5" - integrity sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ== +"@cspell/dict-golang@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.16.tgz#b247a801404f9a65e7c8674893bdb5aad42353a2" + integrity sha512-hZOBlgcguv2Hdc93n2zjdAQm1j3grsN9T9WhPnQ1wh2vUDoCLEujg+6gWhjcLb8ECOcwZTWgNyQLWeOxEsAj/w== -"@cspell/dict-haskell@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz#e9fca7c452411ff11926e23ffed2b50bb9b95e47" - integrity sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ== +"@cspell/dict-google@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-google/-/dict-google-1.0.4.tgz#e15a7ea2dee73800231a81840a59d3b50d49346f" + integrity sha512-JThUT9eiguCja1mHHLwYESgxkhk17Gv7P3b1S7ZJzXw86QyVHPrbpVoMpozHk0C9o+Ym764B7gZGKmw9uMGduQ== -"@cspell/dict-html-symbol-entities@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz#4d86ac18a4a11fdb61dfb6f5929acd768a52564f" - integrity sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw== +"@cspell/dict-haskell@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.4.tgz#37e9cb9a7f5be337a697bcffd0a0d25e80aab50d" + integrity sha512-EwQsedEEnND/vY6tqRfg9y7tsnZdxNqOxLXSXTsFA6JRhUlr8Qs88iUUAfsUzWc4nNmmzQH2UbtT25ooG9x4nA== -"@cspell/dict-html@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.5.tgz#03a5182148d80e6c25f71339dbb2b7c5b9894ef8" - integrity sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w== +"@cspell/dict-html-symbol-entities@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz#bf2887020ca4774413d8b1f27c9b6824ba89e9ef" + integrity sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A== -"@cspell/dict-java@^5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.7.tgz#c0b32d3c208b6419a5eddd010e87196976be2694" - integrity sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ== +"@cspell/dict-html@^4.0.9": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.10.tgz#7b536b2adca4b58ed92752c9d3c7ffc724dd5991" + integrity sha512-I9uRAcdtHbh0wEtYZlgF0TTcgH0xaw1B54G2CW+tx4vHUwlde/+JBOfIzird4+WcMv4smZOfw+qHf7puFUbI5g== -"@cspell/dict-julia@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.0.1.tgz#900001417f1c4ea689530adfcc034c848458a0aa" - integrity sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ== +"@cspell/dict-java@^5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.10.tgz#e6383ca645046b9f05a04a2c2e858fcc80c6fc63" + integrity sha512-pVNcOnmoGiNL8GSVq4WbX/Vs2FGS0Nej+1aEeGuUY9CU14X8yAVCG+oih5ZoLt1jaR8YfR8byUF8wdp4qG4XIw== -"@cspell/dict-k8s@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.6.tgz#d46c97136f1504b65dfb6a188005d4ac81d3f461" - integrity sha512-srhVDtwrd799uxMpsPOQqeDJY+gEocgZpoK06EFrb4GRYGhv7lXo9Fb+xQMyQytzOW9dw4DNOEck++nacDuymg== +"@cspell/dict-julia@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.0.4.tgz#e478c20d742cd6857b6de41dc61a92036dafb4bc" + integrity sha512-bFVgNX35MD3kZRbXbJVzdnN7OuEqmQXGpdOi9jzB40TSgBTlJWA4nxeAKV4CPCZxNRUGnLH0p05T/AD7Aom9/w== -"@cspell/dict-latex@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-4.0.0.tgz#85054903db834ea867174795d162e2a8f0e9c51e" - integrity sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ== +"@cspell/dict-k8s@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.9.tgz#e9392a002797c67ffc3e96893156cc15af3774d1" + integrity sha512-Q7GELSQIzo+BERl2ya/nBEnZeQC+zJP19SN1pI6gqDYraM51uYJacbbcWLYYO2Y+5joDjNt/sd/lJtLaQwoSlA== -"@cspell/dict-lorem-ipsum@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.0.tgz#2793a5dbfde474a546b0caecc40c38fdf076306e" - integrity sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw== +"@cspell/dict-latex@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-4.0.3.tgz#a1254c7d9c3a2d70cd6391a9f2f7694431b1b2cb" + integrity sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw== -"@cspell/dict-lua@^4.0.3": +"@cspell/dict-lorem-ipsum@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.3.tgz#2d23c8f7e74b4e62000678d80e7d1ebb10b003e0" - integrity sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg== + resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.3.tgz#c5fc631d934f1daf8b10c88b795278701a2469ec" + integrity sha512-WFpDi/PDYHXft6p0eCXuYnn7mzMEQLVeqpO+wHSUd+kz5ADusZ4cpslAA4wUZJstF1/1kMCQCZM6HLZic9bT8A== -"@cspell/dict-makefile@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-makefile/-/dict-makefile-1.0.0.tgz#5afb2910873ebbc01ab8d9c38661c4c93d0e5a40" - integrity sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ== +"@cspell/dict-lua@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.6.tgz#7de412bfaead794445e26d566aec222e20ad69ba" + integrity sha512-Jwvh1jmAd9b+SP9e1GkS2ACbqKKRo9E1f9GdjF/ijmooZuHU0hPyqvnhZzUAxO1egbnNjxS/J2T6iUtjAUK2KQ== -"@cspell/dict-monkeyc@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.6.tgz#042d042fc34a20194c8de032130808f44b241375" - integrity sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA== +"@cspell/dict-makefile@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-makefile/-/dict-makefile-1.0.3.tgz#08d3349bf7cbd8f5dacf8641f3d35092ca0b8b38" + integrity sha512-R3U0DSpvTs6qdqfyBATnePj9Q/pypkje0Nj26mQJ8TOBQutCRAJbr2ZFAeDjgRx5EAJU/+8txiyVF97fbVRViw== -"@cspell/dict-node@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-5.0.1.tgz#77e17c576a897a3391fce01c1cc5da60bb4c2268" - integrity sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg== +"@cspell/dict-monkeyc@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.9.tgz#58b5f6f15fc7c11ce0eeffd0742fba4b39fc0b8b" + integrity sha512-Jvf6g5xlB4+za3ThvenYKREXTEgzx5gMUSzrAxIiPleVG4hmRb/GBSoSjtkGaibN3XxGx5x809gSTYCA/IHCpA== -"@cspell/dict-npm@^5.1.4": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.1.5.tgz#f3a7317988052494f776a6b60e3bffb3f063a006" - integrity sha512-oAOGWuJYU3DlO+cAsStKMWN8YEkBue25cRC9EwdiL5Z84nchU20UIoYrLfIQejMlZca+1GyrNeyxRAgn4KiivA== +"@cspell/dict-node@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-5.0.4.tgz#dfe1f159a1ffb1c4f389ec43b15f705123113658" + integrity sha512-Hz5hiuOvZTd7Cp1IBqUZ7/ChwJeQpD5BJuwCaDn4mPNq4iMcQ1iWBYMThvNVqCEDgKv63X52nT8RAWacss98qg== -"@cspell/dict-php@^4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.10.tgz#e2ad4d3e30ec009824d9663a795f6281ae39caaf" - integrity sha512-NfTZdp6kcZDF1PvgQ6cY0zE4FUO5rSwNmBH/iwCBuaLfJAFQ97rgjxo+D2bic4CFwNjyHutnHPtjJBRANO5XQw== +"@cspell/dict-npm@^5.1.8": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.1.8.tgz#d179e555d351aecd4c7e5a87756f3b1192701ee8" + integrity sha512-AJELYXeB4fQdIoNfmuaQxB1Hli3cX6XPsQCjfBxlu0QYXhrjB/IrCLLQAjWIywDqJiWyGUFTz4DqaANm8C/r9Q== -"@cspell/dict-powershell@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.8.tgz#185c454c633e72ebd708328f2cf6dbbc5028ae0a" - integrity sha512-Eg64BccQp5oEJ+V/O2G27KaLWmuOL2AWMOs2470adUihOleRfW8j9XwAEGCS+JKSnDb2mksWA72Z6kDqH138IQ== +"@cspell/dict-php@^4.0.13": + version "4.0.13" + resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.13.tgz#86f1e6fb2174b2b0fa012baf86c448b2730f04f9" + integrity sha512-P6sREMZkhElzz/HhXAjahnICYIqB/HSGp1EhZh+Y6IhvC15AzgtDP8B8VYCIsQof6rPF1SQrFwunxOv8H1e2eg== -"@cspell/dict-public-licenses@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.8.tgz#ed8c3b5b22f28129cf3517821740599f05733b68" - integrity sha512-Sup+tFS7cDV0fgpoKtUqEZ6+fA/H+XUgBiqQ/Fbs6vUE3WCjJHOIVsP+udHuyMH7iBfJ4UFYOYeORcY4EaKdMg== +"@cspell/dict-powershell@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.13.tgz#f557aa04ee9bda4fe091308a0bcaea09ed12fa76" + integrity sha512-0qdj0XZIPmb77nRTynKidRJKTU0Fl+10jyLbAhFTuBWKMypVY06EaYFnwhsgsws/7nNX8MTEQuewbl9bWFAbsg== + +"@cspell/dict-public-licenses@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.11.tgz#37550c4e0cd445991caba528bf4ba58ce7a935c3" + integrity sha512-rR5KjRUSnVKdfs5G+gJ4oIvQvm8+NJ6cHWY2N+GE69/FSGWDOPHxulCzeGnQU/c6WWZMSimG9o49i9r//lUQyA== -"@cspell/dict-python@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.2.6.tgz#fce9950d59c6707442af04701d4ed7c7be333901" - integrity sha512-Hkz399qDGEbfXi9GYa2hDl7GahglI86JmS2F1KP8sfjLXofUgtnknyC5NWc86nzHcP38pZiPqPbTigyDYw5y8A== +"@cspell/dict-python@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.2.12.tgz#ea6298bb72a6bcf2c188d5c55142e0afab8a6c1c" + integrity sha512-U25eOFu+RE0aEcF2AsxZmq3Lic7y9zspJ9SzjrC0mfJz+yr3YmSCw4E0blMD3mZoNcf7H/vMshuKIY5AY36U+Q== dependencies: - "@cspell/dict-data-science" "^2.0.1" + "@cspell/dict-data-science" "^2.0.5" -"@cspell/dict-r@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.0.1.tgz#73474fb7cce45deb9094ebf61083fbf5913f440a" - integrity sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA== +"@cspell/dict-r@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.0.4.tgz#31b5abd91cc12aebfffdde4be4d2902668789311" + integrity sha512-cBpRsE/U0d9BRhiNRMLMH1PpWgw+N+1A2jumgt1if9nBGmQw4MUpg2u9I0xlFVhstTIdzXiLXMxP45cABuiUeQ== -"@cspell/dict-ruby@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.0.3.tgz#614e9a3d4dcd720e750c037b9dfb6001da8b25e0" - integrity sha512-V1xzv9hN6u8r6SM4CkYdsxs4ov8gjXXo0Twfx5kWhLXbEVxTXDMt7ohLTqpy2XlF5mutixZdbHMeFiAww8v+Ug== +"@cspell/dict-ruby@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.0.7.tgz#3593a955baaffe3c5d28fb178b72fdf93c7eec71" + integrity sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q== -"@cspell/dict-rust@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.5.tgz#41f3e26fdd3d121c3a24c122d4a703abbb48c4c3" - integrity sha512-DIvlPRDemjKQy8rCqftAgGNZxY5Bg+Ps7qAIJjxkSjmMETyDgl0KTVuaJPt7EK4jJt6uCZ4ILy96npsHDPwoXA== +"@cspell/dict-rust@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.9.tgz#8af5e405f3280afffe41f212da3ae0e777243842" + integrity sha512-Dhr6TIZsMV92xcikKIWei6p/qswS4M+gTkivpWwz4/1oaVk2nRrxJmCdRoVkJlZkkAc17rjxrS12mpnJZI0iWw== -"@cspell/dict-scala@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.3.tgz#85a469b2d139766b6307befc89243928e3d82b39" - integrity sha512-4yGb4AInT99rqprxVNT9TYb1YSpq58Owzq7zi3ZS5T0u899Y4VsxsBiOgHnQ/4W+ygi+sp+oqef8w8nABR2lkg== +"@cspell/dict-scala@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.6.tgz#5e925def2fe6dc27ee2ad1c452941c3d6790fb6d" + integrity sha512-tl0YWAfjUVb4LyyE4JIMVE8DlLzb1ecHRmIWc4eT6nkyDqQgHKzdHsnusxFEFMVLIQomgSg0Zz6hJ5S1E4W4ww== -"@cspell/dict-software-terms@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-4.1.4.tgz#9b0da3e0674230d757e82ef67171db0764e17a16" - integrity sha512-AHS25sYEzWze/aFglp9ODKSu+phjkuGx+OLwIcmOnvyn8axtSq5GCn9UqS4XG1/Qn0UG2Lgb4i5PJbZ0QNPNXQ== +"@cspell/dict-software-terms@^4.1.11": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-4.1.11.tgz#54e1cfcda53f308135215f7163797d7ed8f69ee4" + integrity sha512-77CTHxWFTVw6tVoMN8WBMrlNW2F2FbgATwD/6vcOuiyrJUmh8klN5ZK3m+yyK3ZzsnaW2Bduoc0fw2Ckcm/riQ== -"@cspell/dict-sql@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.1.5.tgz#068c7a8840d75418fd46a0b062c0ed2d5742f2b8" - integrity sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg== +"@cspell/dict-sql@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.1.8.tgz#45ea53b3e57fd2cc5f839f49b644aa743dac4990" + integrity sha512-dJRE4JV1qmXTbbGm6WIcg1knmR6K5RXnQxF4XHs5HA3LAjc/zf77F95i5LC+guOGppVF6Hdl66S2UyxT+SAF3A== -"@cspell/dict-svelte@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz#0c866b08a7a6b33bbc1a3bdbe6a1b484ca15cdaa" - integrity sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q== +"@cspell/dict-svelte@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.5.tgz#09752e01ff6667e737566d9dfc704c8dcc9a6492" + integrity sha512-sseHlcXOqWE4Ner9sg8KsjxwSJ2yssoJNqFHR9liWVbDV+m7kBiUtn2EB690TihzVsEmDr/0Yxrbb5Bniz70mA== -"@cspell/dict-swift@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.1.tgz#06ec86e52e9630c441d3c19605657457e33d7bb6" - integrity sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw== +"@cspell/dict-swift@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.4.tgz#bc19522418ed68cf914736b612c4e4febbf07e8d" + integrity sha512-CsFF0IFAbRtYNg0yZcdaYbADF5F3DsM8C4wHnZefQy8YcHP/qjAF/GdGfBFBLx+XSthYuBlo2b2XQVdz3cJZBw== -"@cspell/dict-terraform@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.0.1.tgz#81648af2e7f19e8b3188be5e7b1a2d2b6627f58b" - integrity sha512-29lmUUnZgPh+ieZ5hunick8hzNIpNRtiJh9vAusNskPCrig3RTW6u7F+GG1a8uyslbzSw+Irjf40PTOan1OJJA== +"@cspell/dict-terraform@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.0.5.tgz#14c427ae47d2f78b4acd6fe9ed12bcae53aec441" + integrity sha512-qH3epPB2d6d5w1l4hR2OsnN8qDQ4P0z6oDB7+YiNH+BoECXv4Z38MIV1H8cxIzD2wkzkt2JTcFYaVW72MDZAlg== -"@cspell/dict-typescript@^3.1.6": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.1.6.tgz#2d5351786787bf3609da65ba17d9bc345995a36d" - integrity sha512-1beC6O4P/j23VuxX+i0+F7XqPVc3hhiAzGJHEKqnWf5cWAXQtg0xz3xQJ5MvYx2a7iLaSa+lu7+05vG9UHyu9Q== +"@cspell/dict-typescript@^3.1.10": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.1.11.tgz#40586f13b0337bd9cba958e0661b35888580b249" + integrity sha512-FwvK5sKbwrVpdw0e9+1lVTl8FPoHYvfHRuQRQz2Ql5XkC0gwPPkpoyD1zYImjIyZRoYXk3yp9j8ss4iz7A7zoQ== -"@cspell/dict-vue@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.0.tgz#68ccb432ad93fcb0fd665352d075ae9a64ea9250" - integrity sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A== +"@cspell/dict-vue@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.3.tgz#295c288f6fd363879898223202ec3be048663b98" + integrity sha512-akmYbrgAGumqk1xXALtDJcEcOMYBYMnkjpmGzH13Ozhq1mkPF4VgllFQlm1xYde+BUKNnzMgPEzxrL2qZllgYA== -"@cspell/dynamic-import@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.14.4.tgz#c3a8a9f5a8c6d6f8ccd2612a367bcc870dd07244" - integrity sha512-GjKsBJvPXp4dYRqsMn7n1zpnKbnpfJnlKLOVeoFBh8fi4n06G50xYr+G25CWX1WT3WFaALAavvVICEUPrVsuqg== +"@cspell/dynamic-import@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.15.4.tgz#6aee2c81a3a45d3ec6c3f225fbe24557d46e0f85" + integrity sha512-tr0F6EYN6qtniNvt1Uib+PgYQHeo4dQHXE2Optap+hYTOoQ2VoQ+SwBVjZ+Q2bmSAB0fmOyf0AvgsUtnWIpavw== dependencies: import-meta-resolve "^4.1.0" -"@cspell/filetypes@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/filetypes/-/filetypes-8.14.4.tgz#2f8b705d5b7df68817702899f9a94282ac4eef40" - integrity sha512-qd68dD7xTA4Mnf/wjIKYz2SkiTBshIM+yszOUtLa06YJm0aocoNQ25FHXyYEQYm9NQXCYnRWWA02sFMGs8Sv/w== +"@cspell/filetypes@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/filetypes/-/filetypes-8.15.4.tgz#cdc64f21f5b1b824490aa003d53b9a07703c5818" + integrity sha512-sNl6jr3ym/4151EY76qlI/00HHsiLZBqW7Vb1tqCzsgSg3EpL30ddjr74So6Sg2PN26Yf09hvxGTJzXn1R4aYw== -"@cspell/strong-weak-map@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.14.4.tgz#31a34bc7963d2c18d6cda391b2ddda58b9cb3061" - integrity sha512-Uyfck64TfVU24wAP3BLGQ5EsAfzIZiLfN90NhttpEM7GlOBmbGrEJd4hNOwfpYsE/TT80eGWQVPRTLr5SDbXFA== +"@cspell/strong-weak-map@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.15.4.tgz#0e5419862e0a8634e2db20a9e660b827321a6436" + integrity sha512-m5DeQksbhJFqcSYF8Q0Af/WXmXCMAJocCUShkzOXK+uZNXnvhBZN7VyQ9hL+GRzX8JTPEPdVcz2lFyVE5p+LzQ== -"@cspell/url@8.14.4": - version "8.14.4" - resolved "https://registry.yarnpkg.com/@cspell/url/-/url-8.14.4.tgz#46c17d7da0f04fe032ece932ed8137852062341c" - integrity sha512-htHhNF8WrM/NfaLSWuTYw0NqVgFRVHYSyHlRT3i/Yv5xvErld8Gw7C6ldm+0TLjoGlUe6X1VV72JSir7+yLp/Q== +"@cspell/url@8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@cspell/url/-/url-8.15.4.tgz#759a9832e9fd6f9fd022c4eb3031c1b28c272faa" + integrity sha512-K2oZu/oLQPs5suRpLS8uu04O3YMUioSlEU1D66fRoOxzI5NzLt7i7yMg3HQHjChGa09N5bzqmrVdhmQrRZXwGg== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -487,14 +458,14 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== -"@eslint/eslintrc@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" - integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -506,139 +477,26 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" - integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@ethereum-waffle/chai@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-4.0.10.tgz#6f600a40b6fdaed331eba42b8625ff23f3a0e59a" - integrity sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw== - dependencies: - "@ethereum-waffle/provider" "4.0.5" - debug "^4.3.4" - json-bigint "^1.0.0" - -"@ethereum-waffle/compiler@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz#069e2df24b879b8a7b78857bad6f8bf6ebc8a5b1" - integrity sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw== - dependencies: - "@resolver-engine/imports" "^0.3.3" - "@resolver-engine/imports-fs" "^0.3.3" - "@typechain/ethers-v5" "^10.0.0" - "@types/mkdirp" "^0.5.2" - "@types/node-fetch" "^2.6.1" - mkdirp "^0.5.1" - node-fetch "^2.6.7" - -"@ethereum-waffle/ens@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-4.0.3.tgz#4a46ac926414f3c83b4e8cc2562c8e2aee06377a" - integrity sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw== - -"@ethereum-waffle/mock-contract@4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz#f13fea29922d87a4d2e7c4fc8fe72ea04d2c13de" - integrity sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA== - -"@ethereum-waffle/provider@4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-4.0.5.tgz#8a65dbf0263f4162c9209608205dee1c960e716b" - integrity sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw== - dependencies: - "@ethereum-waffle/ens" "4.0.3" - "@ganache/ethereum-options" "0.1.4" - debug "^4.3.4" - ganache "7.4.3" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.0": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" - integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.3" - -"@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" - integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== - dependencies: - "@ethereumjs/common" "^2.6.0" - ethereumjs-util "^7.1.3" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/vm@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" - integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== - dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/blockchain" "^5.5.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^2.2.0" - ethereumjs-util "^7.1.3" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.2" - rustbn.js "~0.2.0" + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -653,22 +511,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abi@^5.1.2": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.1.tgz#6ac28fafc9ef6f5a7a37e30356a2eb31fa05d39b" - integrity sha512-9mhbjUk76BiSluiiW4BaYyI58KSbDMMQpCLdsAR+RsT2GyATiNYxVv+pGWRrekmsIdY3I+hOqsYQSTkc8L/mcg== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -681,20 +524,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-provider@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" - integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -705,18 +535,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/abstract-signer@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" - integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -727,40 +546,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" - integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/base64@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" - integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== - dependencies: - "@ethersproject/bytes" "^5.4.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -769,60 +562,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bignumber@^5.4.0": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" - integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - bn.js "^4.11.9" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/bytes@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" - integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/constants@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" - integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -837,58 +591,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hash@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" - integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -896,95 +599,26 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" - integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== - dependencies: - "@ethersproject/bytes" "^5.4.0" - js-sha3 "0.5.7" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/logger@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.1.tgz#503bd33683538b923c578c07d1c2c0dd18672054" - integrity sha512-DZ+bRinnYLPw1yAC64oRl0QyVZj43QeHIhVKfD/+YwSz4wsv1pfwb5SOFjz+r710YEWzU6LrhuSjpSO+6PeE4A== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/networks@^5.4.0": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" - integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/properties@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.1.tgz#9f051f976ce790142c6261ccb7b826eaae1f2f36" - integrity sha512-cyCGlF8wWlIZyizsj2PpbJ9I7rIlUAfnHYwy/T90pdkSn/NFTa5YWZx2wTJBe9V7dD65dcrrEMisCRUJiq6n3w== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -992,24 +626,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" - integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -1021,31 +638,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" - integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -1054,16 +647,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/strings@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" - integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -1078,52 +662,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/transactions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" - integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -1134,97 +673,18 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/web@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" - integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== - dependencies: - "@ethersproject/base64" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ganache/ethereum-address@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz#0e6d66f4a24f64bf687cb3ff7358fb85b9d9005e" - integrity sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw== - dependencies: - "@ganache/utils" "0.1.4" - -"@ganache/ethereum-options@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz#6a559abb44225e2b8741a8f78a19a46714a71cd6" - integrity sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw== - dependencies: - "@ganache/ethereum-address" "0.1.4" - "@ganache/ethereum-utils" "0.1.4" - "@ganache/options" "0.1.4" - "@ganache/utils" "0.1.4" - bip39 "3.0.4" - seedrandom "3.0.5" - -"@ganache/ethereum-utils@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz#fae4b5b9e642e751ff1fa0cd7316c92996317257" - integrity sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg== - dependencies: - "@ethereumjs/common" "2.6.0" - "@ethereumjs/tx" "3.4.0" - "@ethereumjs/vm" "5.6.0" - "@ganache/ethereum-address" "0.1.4" - "@ganache/rlp" "0.1.4" - "@ganache/utils" "0.1.4" - emittery "0.10.0" - ethereumjs-abi "0.6.8" - ethereumjs-util "7.1.3" - -"@ganache/options@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/options/-/options-0.1.4.tgz#325b07e6de85094667aaaaf3d653e32404a04b78" - integrity sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw== - dependencies: - "@ganache/utils" "0.1.4" - bip39 "3.0.4" - seedrandom "3.0.5" - -"@ganache/rlp@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/rlp/-/rlp-0.1.4.tgz#f4043afda83e1a14a4f80607b103daf166a9b374" - integrity sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ== - dependencies: - "@ganache/utils" "0.1.4" - rlp "2.2.6" - -"@ganache/utils@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@ganache/utils/-/utils-0.1.4.tgz#25d60d7689e3dda6a8a7ad70e3646f07c2c39a1f" - integrity sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w== - dependencies: - emittery "0.10.0" - keccak "3.0.1" - seedrandom "3.0.5" - optionalDependencies: - "@trufflesuite/bigint-buffer" "1.1.9" +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1232,10 +692,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@metamask/eth-sig-util@^4.0.0": version "4.0.1" @@ -1248,11 +708,47 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/curves@1.6.0", "@noble/curves@^1.4.0", "@noble/curves@~1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" + integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== + dependencies: + "@noble/hashes" "1.5.0" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.5.0", "@noble/hashes@^1.3.3", "@noble/hashes@^1.4.0", "@noble/hashes@~1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" + integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -1279,389 +775,375 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" - integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" - integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-ethash" "3.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" - integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== +"@nomicfoundation/edr-darwin-arm64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz#6eaa64a6ea5201e4c92b121f2b7fd197b26e450a" + integrity sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ== + +"@nomicfoundation/edr-darwin-x64@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz#d15ca89e9deef7d0a710cf90e79f3cc270a5a999" + integrity sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz#e73c41ca015dfddb5f4cb6cd3d9b2cbe5cc28989" + integrity sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz#90906f733e4ad26657baeb22d28855d934ab7541" + integrity sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz#11b8bd73df145a192e5a08199e5e81995fcde502" + integrity sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA== + +"@nomicfoundation/edr-linux-x64-musl@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz#a34b9a2c9e34853207824dc81622668a069ca642" + integrity sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz#ca035c6f66ae9f88fa3ef123a1f3a2099cce7a5a" + integrity sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw== + +"@nomicfoundation/edr@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.4.tgz#1cd336c46a60f5af774e6cf0f1943f49f63dded6" + integrity sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.4" + "@nomicfoundation/edr-darwin-x64" "0.6.4" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.4" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.4" + "@nomicfoundation/edr-linux-x64-musl" "0.6.4" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.4" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.1" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" - integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" - integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-rlp@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" - integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" - integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - debug "^4.3.3" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" - integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" - integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" - integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== +"@nomicfoundation/hardhat-chai-matchers@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz#9c7cfc4ad0f0a5e9cf16aba8ab668c02f6e273aa" + integrity sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg== dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" - integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - -"@nomiclabs/hardhat-ethers@^2.1.0": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" - integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== +"@nomicfoundation/hardhat-ethers@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz#af078f566373abeb77e11cbe69fe3dd47f8bfc27" + integrity sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" -"@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" - integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== +"@nomicfoundation/hardhat-verify@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz#6a433d777ce0172d1f0edf7f2d3e1df14b3ecfc1" + integrity sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" cbor "^8.1.0" chalk "^2.4.2" debug "^4.1.1" - fs-extra "^7.0.1" - lodash "^4.17.11" + lodash.clonedeep "^4.5.0" semver "^6.3.0" table "^6.8.0" undici "^5.14.0" -"@nomiclabs/hardhat-waffle@^2.0.2": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz#d11cb063a5f61a77806053e54009c40ddee49a54" - integrity sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg== +"@nomicfoundation/slang-darwin-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.17.0.tgz#8cded3c24322624e3b6618760caba8e840bd1c1d" + integrity sha512-O0q94EUtoWy9A5kOTOa9/khtxXDYnLqmuda9pQELurSiwbQEVCPQL8kb34VbOW+ifdre66JM/05Xw9JWhIZ9sA== + +"@nomicfoundation/slang-darwin-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.17.0.tgz#6ebeb33a2ced89fc6023f6cda4af96403486038a" + integrity sha512-IaDbHzvT08sBK2HyGzonWhq1uu8IxdjmTqAWHr25Oh/PYnamdi8u4qchZXXYKz/DHLoYN3vIpBXoqLQIomhD/g== + +"@nomicfoundation/slang-linux-arm64-gnu@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.17.0.tgz#41c7e57a9b1a3aee6911f0cab22e683c149fb470" + integrity sha512-Lj4anvOsQZxs1SycG8VyT2Rl2oqIhyLSUCgGepTt3CiJ/bM+8r8bLJIgh8vKkki4BWz49YsYIgaJB2IPv8FFTw== + +"@nomicfoundation/slang-linux-arm64-musl@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.17.0.tgz#9c4b51689274ae75c2c8a4cddd2e1cc0a79c191d" + integrity sha512-/xkTCa9d5SIWUBQE3BmLqDFfJRr4yUBwbl4ynPiGUpRXrD69cs6pWKkwjwz/FdBpXqVo36I+zY95qzoTj/YhOA== + +"@nomicfoundation/slang-linux-x64-gnu@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.17.0.tgz#c3a3b6a7b775fc617832958d10e6664bf86d39d0" + integrity sha512-oe5IO5vntOqYvTd67deCHPIWuSuWm6aYtT2/0Kqz2/VLtGz4ClEulBSRwfnNzBVtw2nksWipE1w8BzhImI7Syg== + +"@nomicfoundation/slang-linux-x64-musl@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.17.0.tgz#725118ff99a7217b9f1d1bd84411d9442084077d" + integrity sha512-PpYCI5K/kgLAMXaPY0V4VST5gCDprEOh7z/47tbI8kJQumI5odjsj/Cs8MpTo7/uRH6flKYbVNgUzcocWVYrAQ== + +"@nomicfoundation/slang-win32-arm64-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.17.0.tgz#9c8bc4ccf21eaaac0cfcb6d3954ede4e2dea4c02" + integrity sha512-u/Mkf7OjokdBilP7QOJj6QYJU4/mjkbKnTX21wLyCIzeVWS7yafRPYpBycKIBj2pRRZ6ceAY5EqRpb0aiCq+0Q== + +"@nomicfoundation/slang-win32-ia32-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.17.0.tgz#3fc5d00a3f8c1d85a5e94146af78a5526a4f3d27" + integrity sha512-XJBVQfNnZQUv0tP2JSJ573S+pmgrLWgqSZOGaMllnB/TL1gRci4Z7dYRJUF2s82GlRJE+FHSI2Ro6JISKmlXCg== + +"@nomicfoundation/slang-win32-x64-msvc@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.17.0.tgz#f6a5e3250fa07cbda49151edeb80f09090e5b71a" + integrity sha512-zPGsAeiTfqfPNYHD8BfrahQmYzA78ZraoHKTGraq/1xwJwzBK4bu/NtvVA4pJjBV+B4L6DCxVhSbpn40q26JQA== + +"@nomicfoundation/slang@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.17.0.tgz#d9c25cd711ebf3490c9d0c99e9b4ca2481341a6b" + integrity sha512-1GlkGRcGpVnjFw9Z1vvDKOKo2mzparFt7qrl2pDxWp+jrVtlvej98yCMX52pVyrYE7ZeOSZFnx/DtsSgoukStQ== + dependencies: + "@nomicfoundation/slang-darwin-arm64" "0.17.0" + "@nomicfoundation/slang-darwin-x64" "0.17.0" + "@nomicfoundation/slang-linux-arm64-gnu" "0.17.0" + "@nomicfoundation/slang-linux-arm64-musl" "0.17.0" + "@nomicfoundation/slang-linux-x64-gnu" "0.17.0" + "@nomicfoundation/slang-linux-x64-musl" "0.17.0" + "@nomicfoundation/slang-win32-arm64-msvc" "0.17.0" + "@nomicfoundation/slang-win32-ia32-msvc" "0.17.0" + "@nomicfoundation/slang-win32-x64-msvc" "0.17.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== -"@openzeppelin/contracts-upgradeable@^4.4.2": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.0.tgz#26688982f46969018e3ed3199e72a07c8d114275" - integrity sha512-5GeFgqMiDlqGT8EdORadp1ntGF0qzWZLmEY7Wbp/yVhN7/B3NNzCxujuI77ktlyG81N3CUZP8cZe3ZAQ/cW10w== +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" "@openzeppelin/contracts-upgradeable@^4.7.1": - version "4.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.1.tgz#f63fc384255d6ac139e0a2561aa207fd7c14183c" - integrity sha512-5EFiZld3DYFd8aTL8eeMnhnaWh1/oXLXFNuFMrgF3b1DNPshF3LCyO7VR6lc+gac2URJ0BlVcZoCfkk/3MoEfg== + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz#38b21708a719da647de4bb0e4802ee235a0d24df" + integrity sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA== -"@openzeppelin/defender-base-client@^1.46.0": - version "1.47.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.47.1.tgz#2044fd048d73778a42eb0c5ae6f1370d0ab4bac9" - integrity sha512-xnopi1tZIh1zY9KF3mo9S2YgMP0I3T11r6jiO1teAw6M0U5Fx2SCjfCVoKV7CLAQGH1VHmAZ7w2CmcEsFvlQng== +"@openzeppelin/defender-sdk-base-client@^1.14.4", "@openzeppelin/defender-sdk-base-client@^1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.15.0.tgz#5c6af6929c399dd7ef9ca1eb4ca042ae7e772367" + integrity sha512-nuf/xegMIuKCO0hMrxI1KQKTzQw1iCl/9kew2nJM9MrFIohhfEXItc5rbJRoV/jehmK/Jhi9ATF9OHH09StEsQ== dependencies: - amazon-cognito-identity-js "^6.0.1" + amazon-cognito-identity-js "^6.3.6" async-retry "^1.3.3" - axios "^1.4.0" - lodash "^4.17.19" - node-fetch "^2.6.0" -"@openzeppelin/hardhat-upgrades@^1.14.0": - version "1.28.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.28.0.tgz#6361f313a8a879d8a08a5e395acf0933bc190950" - integrity sha512-7sb/Jf+X+uIufOBnmHR0FJVWuxEs2lpxjJnLNN6eCJCP8nD0v+Ot5lTOW2Qb/GFnh+fLvJtEkhkowz4ZQ57+zQ== +"@openzeppelin/defender-sdk-deploy-client@^1.14.4": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.15.0.tgz#affbeb93bf633ab9914ae7ca6326ff9dcdbbb670" + integrity sha512-2ODMN4j5pPYWyIOvA/zRQmJ0tJyqi6NV3S/PyvufBXa3oj/MDnVO5bMGSQFH0M2VE3bg+i/rcUb0hdbX9Rtm5Q== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.15.0" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/defender-sdk-network-client@^1.14.4": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-1.15.0.tgz#43eb2bb06fa69a127305f073089fa3201a65367c" + integrity sha512-tNynCqFB1XYancq/8yGuj0HCSIyNLSRSuH53Hp2Tl+DpM7W5vIkzSRfvJJxC+8Sld83bVavyNJzTN9xid992Ag== dependencies: - "@openzeppelin/defender-base-client" "^1.46.0" - "@openzeppelin/platform-deploy-client" "^0.8.0" - "@openzeppelin/upgrades-core" "^1.27.0" + "@openzeppelin/defender-sdk-base-client" "^1.15.0" + axios "^1.7.2" + lodash "^4.17.21" + +"@openzeppelin/hardhat-upgrades@^3.1.1": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.5.0.tgz#90ed0508fed8415b7fa9ee1c04ade8ec57091d46" + integrity sha512-Ju/JnT7NRiOMi5m5Y0dGiz37d8wnjVBep1v5Vr7+6+MFNuQa1yddUEVWhWhoEw4udI3/mYwyw4Sfz3sq7vhicQ== + dependencies: + "@openzeppelin/defender-sdk-base-client" "^1.14.4" + "@openzeppelin/defender-sdk-deploy-client" "^1.14.4" + "@openzeppelin/defender-sdk-network-client" "^1.14.4" + "@openzeppelin/upgrades-core" "^1.40.0" chalk "^4.1.0" debug "^4.1.1" + ethereumjs-util "^7.1.5" proper-lockfile "^4.1.1" + undici "^6.11.1" -"@openzeppelin/platform-deploy-client@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.8.0.tgz#af6596275a19c283d6145f0128cc1247d18223c1" - integrity sha512-POx3AsnKwKSV/ZLOU/gheksj0Lq7Is1q2F3pKmcFjGZiibf+4kjGxr4eSMrT+2qgKYZQH1ZLQZ+SkbguD8fTvA== +"@openzeppelin/upgrades-core@^1.40.0": + version "1.40.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.40.0.tgz#f01647afb99b46356b3e7b98e3b2c7f864d85add" + integrity sha512-4bPSXdEqHsNRL5T1ybPLneWGYjzGl6XWGWkv7aUoFFgz8mOdarstRBX1Wi4XJFw6IeHPUI7mMSQr2jdz8Y2ypQ== dependencies: - "@ethersproject/abi" "^5.6.3" - "@openzeppelin/defender-base-client" "^1.46.0" - axios "^0.21.2" - lodash "^4.17.19" - node-fetch "^2.6.0" - -"@openzeppelin/upgrades-core@^1.27.0": - version "1.27.3" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.27.3.tgz#d5578e3a3ccd18a61fc585945be67951480238b5" - integrity sha512-IqlSMUkno1XKF4L46aUqZ4BqHxj4dF0BRGrFcKeG2Q0vrsKoazhY67JG9bO+wMYG4zxl6jgmG0bd5ef9HLcLmw== - dependencies: - cbor "^8.0.0" + "@nomicfoundation/slang" "^0.17.0" + cbor "^9.0.0" chalk "^4.1.0" compare-versions "^6.0.0" debug "^4.1.1" ethereumjs-util "^7.0.3" + minimatch "^9.0.5" minimist "^1.2.7" proper-lockfile "^4.1.1" - solidity-ast "^0.4.15" - -"@resolver-engine/core@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" - integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== - dependencies: - debug "^3.1.0" - is-url "^1.2.4" - request "^2.85.0" - -"@resolver-engine/fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" - integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== - dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" - -"@resolver-engine/imports-fs@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" - integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== - dependencies: - "@resolver-engine/fs" "^0.3.3" - "@resolver-engine/imports" "^0.3.3" - debug "^3.1.0" + solidity-ast "^0.4.51" + +"@renovatebot/pep440@^3.0.20": + version "3.0.20" + resolved "https://registry.yarnpkg.com/@renovatebot/pep440/-/pep440-3.0.20.tgz#eac961dec19ac7dca488c1ec20a91df17161f0e2" + integrity sha512-Jw8jzHh2r1LAPTrjQlIwh/+8J3N2MqXZgPuTt6HdNeJIBjJskV8bsEfGs9rBzXi/omeHob3BXnvlECu2rCCUYw== + +"@safe-global/api-kit@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@safe-global/api-kit/-/api-kit-2.5.4.tgz#1759f5f04aee82656f826a9a067be0c01c4ec77c" + integrity sha512-L12qTaEQdQqdlPhsjC+JCpH5qxphyegPptrc98cRFnxsES0Dz3i/2df7kSAIntaYIP4aFEbulpVwOjOgWf+hDQ== + dependencies: + "@safe-global/protocol-kit" "^5.0.4" + "@safe-global/types-kit" "^1.0.0" + node-fetch "^2.7.0" + viem "^2.21.8" + +"@safe-global/api-kit@^2.4.1": + version "2.5.3" + resolved "https://registry.yarnpkg.com/@safe-global/api-kit/-/api-kit-2.5.3.tgz#8b0e996836a55e1c4cac6609b97a46c48bcb58fc" + integrity sha512-BHKKKohtM6cqtWmu2BIBl5YVMFeIzE1kBe2kfDi0JG9UbzTKYUYU8d/RnteFe5Nj/KiO7F7bJ708Z7ZxQ9Ap0g== + dependencies: + "@safe-global/protocol-kit" "^5.0.3" + "@safe-global/types-kit" "^1.0.0" + node-fetch "^2.7.0" + viem "^2.21.8" + +"@safe-global/protocol-kit@^5.0.1", "@safe-global/protocol-kit@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-5.0.3.tgz#187cfdeaf892c832265cb356d0ef5e230cb8fc4f" + integrity sha512-xVpuj1Ge/XYdLucPe36MXl09yK83f3drPqFK0UPhrONg//SP/K/sgyXnKy5o4zJrjidNV9V0PV7Xw84HOqOxtg== + dependencies: + "@noble/hashes" "^1.3.3" + "@safe-global/safe-deployments" "^1.37.12" + "@safe-global/safe-modules-deployments" "^2.2.4" + "@safe-global/types-kit" "^1.0.0" + abitype "^1.0.2" + semver "^7.6.3" + viem "^2.21.8" + +"@safe-global/protocol-kit@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-5.0.4.tgz#bd1b02520f0a68183de83bcd474e2dc3881c8c28" + integrity sha512-e2BhyiS/7jMzJY8oNpkMIHWAViENyL42/SAvFOcFsEc6JBvnh+4GGvLRwLVEiQ8e+54sJinRjo1/iTCrTIoqOQ== + dependencies: + "@noble/hashes" "^1.3.3" + "@safe-global/safe-deployments" "^1.37.14" + "@safe-global/safe-modules-deployments" "^2.2.4" + "@safe-global/types-kit" "^1.0.0" + abitype "^1.0.2" + semver "^7.6.3" + viem "^2.21.8" -"@resolver-engine/imports@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" - integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== +"@safe-global/safe-core-sdk-types@^5.0.1": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-5.1.0.tgz#af8d877b9af231242d023c7182f78ff4223bc3f4" + integrity sha512-UzXR4zWmVzux25FcIm4H049QhZZpVpIBL5HE+V0p5gHpArZROL+t24fZmsKUf403CtBxIJM5zZSVQL0nFJi+IQ== dependencies: - "@resolver-engine/core" "^0.3.3" - debug "^3.1.0" - hosted-git-info "^2.6.0" - path-browserify "^1.0.0" - url "^0.11.0" + abitype "^1.0.2" -"@safe-global/safe-core-sdk-types@^1.9.0", "@safe-global/safe-core-sdk-types@^1.9.2": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-1.10.1.tgz#94331b982671d2f2b8cc23114c58baf63d460c81" - integrity sha512-BKvuYTLOlY16Rq6qCXglmnL6KxInDuXMFqZMaCzwDKiEh+uoHu3xCumG5tVtWOkCgBF4XEZXMqwZUiLcon7IsA== +"@safe-global/safe-deployments@^1.37.12": + version "1.37.12" + resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.37.12.tgz#c01b0a272991ae0e63a37d506024a809de53c370" + integrity sha512-6UM5wS6b0h4Uu2BCK6sWLNC5UYFBd1Xu4YsuZpoSjlo/6UDbbK6lzYVEgtqbsy8p1z2ZO+Z73WgRo3mlh7awig== dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@safe-global/safe-deployments" "^1.20.2" - web3-core "^1.8.1" - web3-utils "^1.8.1" - -"@safe-global/safe-core-sdk-utils@^1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-utils/-/safe-core-sdk-utils-1.7.4.tgz#810d36cf9629129a28eb1b9c6e690b163834b572" - integrity sha512-ITocwSWlFUA1K9VMP/eJiMfgbP/I9qDxAaFz7ukj5N5NZD3ihVQZkmqML6hjse5UhrfjCnfIEcLkNZhtB2XC2Q== - dependencies: - "@safe-global/safe-core-sdk-types" "^1.9.2" - semver "^7.3.8" - web3-utils "^1.8.1" - -"@safe-global/safe-core-sdk@^3.3.2": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk/-/safe-core-sdk-3.3.4.tgz#d404287f9b910feab3e692243aaf62494ff2d2a9" - integrity sha512-tgcK7VWo66Z8632xaYDzUHQ8InPOaI10ELk1wCrO/C3QjPwxjIozbMGOMzF4RZPCSJX2YAHowAvOgmEukgSkxA== - dependencies: - "@ethersproject/solidity" "^5.7.0" - "@safe-global/safe-core-sdk-types" "^1.9.2" - "@safe-global/safe-core-sdk-utils" "^1.7.4" - "@safe-global/safe-deployments" "^1.25.0" - ethereumjs-util "^7.1.5" - semver "^7.3.8" - web3-utils "^1.8.1" + semver "^7.6.2" -"@safe-global/safe-deployments@^1.20.2", "@safe-global/safe-deployments@^1.25.0": - version "1.26.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.26.0.tgz#b83615b3b5a66e736e08f8ecf2801ed988e9e007" - integrity sha512-Tw89O4/paT19ieMoiWQbqRApb0Bef/DxweS9rxodXAM5EQModkbyFXGZca+YxXE67sLvWjLr2jJUOxwze8mhGw== +"@safe-global/safe-deployments@^1.37.14": + version "1.37.14" + resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.37.14.tgz#31c1d1ff924d94ce639c136bef154de3adf5f75e" + integrity sha512-uHpYizq52j1arwWRxHbEbrZsECD5tG87NwLo/xDViRVw/GIrkRC6HerkzfZwiHVjVrC8gN8o3ApLsknYbxrF4w== dependencies: - semver "^7.3.7" + semver "^7.6.2" -"@safe-global/safe-ethers-lib@^1.9.2": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@safe-global/safe-ethers-lib/-/safe-ethers-lib-1.9.4.tgz#049989a302c6f2010c574cf3a834b0cfb9cf67c5" - integrity sha512-WhzcmNun0s0VxeVQKRqaapV0vEpdm76zZBR2Du+S+58u1r57OjZkOSL2Gru0tdwkt3FIZZtE3OhDu09M70pVkA== - dependencies: - "@safe-global/safe-core-sdk-types" "^1.9.2" - "@safe-global/safe-core-sdk-utils" "^1.7.4" - ethers "5.7.2" +"@safe-global/safe-modules-deployments@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@safe-global/safe-modules-deployments/-/safe-modules-deployments-2.2.4.tgz#6e3b22af3a4eeba8e0a8f0952e575d25c5be216e" + integrity sha512-m396ZrBPhZVYkapTTIuizyOOtoZsCKbicl0ztgDFfDbi7KbS6AtDP6cV89AYosQxUQS+v0q4ksQd30/j3L1BtQ== -"@safe-global/safe-service-client@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@safe-global/safe-service-client/-/safe-service-client-2.0.2.tgz#85e00017cb7f63d4cc9c9bf9702bd9cb7b27e62e" - integrity sha512-UFmA53EMRU++2mzo547+tCWaw2BknpbuMDjR786pPgm5dhB4ADattTdV7pYqYBMWn4uGoGgb2kaImEq097bATQ== +"@safe-global/types-kit@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@safe-global/types-kit/-/types-kit-1.0.0.tgz#d1f29d65a8ac22f03b0cd3ab54fb518dcf7a85c3" + integrity sha512-jZNUeHbWobeVrURbcEvfas4Q1IDasQni5UYm2umUtAR6SBDazp1kGni8IjZPRKq3+8q+fYwu9FmKpX50rUYn3w== dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@safe-global/safe-core-sdk-types" "^1.9.2" - node-fetch "^2.6.6" + abitype "^1.0.2" -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== +"@scure/base@~1.1.0", "@scure/base@~1.1.6", "@scure/base@~1.1.7", "@scure/base@~1.1.8": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.1.5": version "1.1.5" @@ -1672,6 +1154,24 @@ "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip32@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.5.0.tgz#dd4a2e1b8a9da60e012e776d954c4186db6328e6" + integrity sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw== + dependencies: + "@noble/curves" "~1.6.0" + "@noble/hashes" "~1.5.0" + "@scure/base" "~1.1.7" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" @@ -1680,6 +1180,22 @@ "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.4.0.tgz#664d4f851564e2e1d4bffa0339f9546ea55960a6" + integrity sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw== + dependencies: + "@noble/hashes" "~1.5.0" + "@scure/base" "~1.1.8" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1748,24 +1264,10 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" - integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== - dependencies: - "@sinonjs/commons" "^1.7.0" - "@skalenetwork/etherbase-interfaces@^0.0.1-develop.20": - version "0.0.1-develop.20" - resolved "https://registry.yarnpkg.com/@skalenetwork/etherbase-interfaces/-/etherbase-interfaces-0.0.1-develop.20.tgz#33f61e18d695fd47063aa39dce4df335d26b9528" - integrity sha512-j3xnuQtOtjvjAoUMJgSUFxRa9/Egkg1RyA8r6PjcEb33VksE4LWLBy0PNFUFehLZv48595JROTcViGeXXwg5HQ== + version "0.0.1" + resolved "https://registry.yarnpkg.com/@skalenetwork/etherbase-interfaces/-/etherbase-interfaces-0.0.1.tgz#97ed2069256a835efa1b088a58de17e2783a9e71" + integrity sha512-CgAo41sSL1KT9e1d3sUTxW5WPbEvHQwoqo3hLt+VW/6kGYukCuW4AHWMyDr5Jjw9KtjDKSOySDcoukhaeKxToQ== "@skalenetwork/ima-interfaces@2.0.0": version "2.0.0" @@ -1774,6 +1276,23 @@ dependencies: "@skalenetwork/skale-manager-interfaces" "^0.1.2" +"@skalenetwork/skale-contracts-ethers-v6@^1.0.2-develop.0": + version "1.0.2-develop.19" + resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts-ethers-v6/-/skale-contracts-ethers-v6-1.0.2-develop.19.tgz#d5db311220ea12f6717898e9418b595081dca448" + integrity sha512-eVuCT/BLZtMpbvcSLGuxSqZzTX0XsdlCvqp86n6MrgDQLx7NSXiaPmPr459xpXMxkSZX6gwJTWjO9zGb3ss67Q== + dependencies: + "@skalenetwork/skale-contracts" "1.0.2-develop.19" + ethers "^6.13.3" + +"@skalenetwork/skale-contracts@1.0.2-develop.19": + version "1.0.2-develop.19" + resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts/-/skale-contracts-1.0.2-develop.19.tgz#d32bbb210b60757486f14b2352c4835ece41da0f" + integrity sha512-0+g46+9dbHkWL2kwXVlywEGPLrIrrGsiFsSe7blflcDcvN5zu4dNZX/WwV1gP8wcN7bZOGLNI6fOOtx5LEY9Aw== + dependencies: + "@renovatebot/pep440" "^3.0.20" + axios "^1.4.0" + semver "^7.6.0" + "@skalenetwork/skale-manager-interfaces@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@skalenetwork/skale-manager-interfaces/-/skale-manager-interfaces-2.0.0.tgz#afb63131e5c498cfa69219567f9f52b85f0856c9" @@ -1784,25 +1303,25 @@ resolved "https://registry.yarnpkg.com/@skalenetwork/skale-manager-interfaces/-/skale-manager-interfaces-0.1.2.tgz#88e543c8cc298cd0cc9559892d746d2d74786da8" integrity sha512-gapSQJahwWMlTB/xp/kMzB6k+9+Skx/N0fvEloiW4CUrkGkSa8+fj16YmUXX45p1hOc45W+JydiJPNgZtx32Dg== -"@skalenetwork/upgrade-tools@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@skalenetwork/upgrade-tools/-/upgrade-tools-2.0.2.tgz#533a2d43d43706fc1898e003523464cee49ec11e" - integrity sha512-by5I3TM7RBi4G8FsicwxQE13rqx+XbPYf75x+CJnTELAFxg5UqMaPArG+YlHT2kBjl6O5OsESkCRtwbPcbIjsg== - dependencies: - "@openzeppelin/contracts-upgradeable" "^4.4.2" - "@safe-global/safe-core-sdk" "^3.3.2" - "@safe-global/safe-core-sdk-types" "^1.9.0" - "@safe-global/safe-ethers-lib" "^1.9.2" - "@safe-global/safe-service-client" "^2.0.0" - axios "^0.27.2" +"@skalenetwork/upgrade-tools@3.0.0-develop.33": + version "3.0.0-develop.33" + resolved "https://registry.yarnpkg.com/@skalenetwork/upgrade-tools/-/upgrade-tools-3.0.0-develop.33.tgz#fb61d2fa680e5fd2bddd782e6175652ffd39378b" + integrity sha512-KGeJ9CosJBljoveKik++aZB41OJ0tu8gUrJzu90p/+p/i+huPnL/zHoUZVJ8hpf4xpRIUhvyZfFfiDHSz0vcNQ== + dependencies: + "@safe-global/api-kit" "^2.4.1" + "@safe-global/protocol-kit" "^5.0.1" + "@safe-global/safe-core-sdk-types" "^5.0.1" + "@skalenetwork/skale-contracts-ethers-v6" "^1.0.2-develop.0" + axios "^1.4.0" ethereumjs-util "^7.1.4" + semaphore-async-await "^1.5.1" -"@smithy/types@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.0.2.tgz#49d42724c909e845bfd80a2e195740614ce497f3" - integrity sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw== +"@smithy/types@^3.5.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.6.0.tgz#03a52bfd62ee4b7b2a1842c8ae3ada7a0a5ff3a4" + integrity sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" "@solidity-parser/parser@^0.13.2": version "0.13.2" @@ -1811,13 +1330,11 @@ dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.16.0": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" - integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== - dependencies: - antlr4ts "^0.5.0-alpha.4" - +"@solidity-parser/parser@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" + integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== + "@trufflesuite/bigint-buffer@1.1.10": version "1.1.10" resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" @@ -1825,13 +1342,6 @@ dependencies: node-gyp-build "4.4.0" -"@trufflesuite/bigint-buffer@1.1.9": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz#e2604d76e1e4747b74376d68f1312f9944d0d75d" - integrity sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw== - dependencies: - node-gyp-build "4.3.0" - "@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": version "20.30.0-unofficial.0" resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" @@ -1842,38 +1352,25 @@ bufferutil "4.0.7" utf-8-validate "6.0.3" -"@typechain/ethers-v5@^10.0.0": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" - integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== - dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" - -"@typechain/ethers-v5@^11.1.1": - version "11.1.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-11.1.1.tgz#23a358135a302140cf89a186592464dd6bbf1f98" - integrity sha512-D9WyUrCJ4Z5Gg8T00HWLpuqn1CqSDXlCiUOOpLaWoCbnZrE2jSIOUwR9blBZNo6LE5058e3niVu6xk205Et7tg== +"@typechain/ethers-v6@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== dependencies: lodash "^4.17.15" ts-essentials "^7.0.1" -"@typechain/hardhat@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-7.0.0.tgz#ffa7465328150e793007fee616ae7b76ed20784d" - integrity sha512-XB79i5ewg9Met7gMVGfgVkmypicbnI25T5clJBEooMoW2161p4zvKFpoS2O+lBppQyMrPIZkdvl2M3LMDayVcA== +"@typechain/hardhat@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== dependencies: fs-extra "^9.1.0" -"@types/abstract-leveldown@*": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz#bb16403c17754b0c4d5772d71d03b924a03d4c80" - integrity sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ== - -"@types/bn.js@*": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== dependencies: "@types/node" "*" @@ -1884,65 +1381,49 @@ dependencies: "@types/node" "*" -"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - "@types/chai-almost@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/chai-almost/-/chai-almost-1.0.1.tgz#e8a2de03b53c22e9a2dd2c85ef98bde5f19b685c" - integrity sha512-UwJTbGAP8Jc84JwpSeCEiE50LBvE7MD4pWYsWdwgZG/umPjUlAYCEMK4WnzbEQO/08HH2jDJ+Ikm9CPzHWdGGQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/chai-almost/-/chai-almost-1.0.3.tgz#bfd9767d5816895dc18c1b453ee07b4626a9a8f2" + integrity sha512-NMLjvnFjgxS0Z36whNuoma2p/2Fu6m+dV8eddO8tRAztMAqTqYxFYGyJNsAsOlwx89siUMfxQ1Wdqew2xXsiEg== dependencies: "@types/chai" "*" "@types/chai-as-promised@^7.1.3": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz#caf64e76fb056b8c8ced4b761ed499272b737601" - integrity sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA== + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.2.12": - version "4.2.22" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7" - integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ== +"@types/chai@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.0.tgz#7f981e71e69c9b2d422f58f78de1c59179782133" + integrity sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA== + +"@types/chai@^4.2.12": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== "@types/elliptic@^6.4.14": - version "6.4.14" - resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.14.tgz#7bbaad60567a588c1f08b10893453e6b9b4de48e" - integrity sha512-z4OBcDAU0GVwDTuwJzQCiL6188QvZMkvoERgcVjq0/mPM8jCfdwZ3x5zQEVoL9WCAru3aG5wl3Z5Ww5wBWn7ZQ== + version "6.4.18" + resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.18.tgz#bc96e26e1ccccbabe8b6f0e409c85898635482e1" + integrity sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw== dependencies: "@types/bn.js" "*" "@types/glob@^7.1.1": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/json-schema@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": version "5.1.1" @@ -1950,14 +1431,14 @@ integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -1971,48 +1452,31 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== -"@types/node-fetch@^2.6.1": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - "@types/node@*": - version "20.4.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" - integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== - -"@types/node@11.11.6": - version "11.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" - integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== + version "22.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.8.tgz#a1dbf0dc5f71bdd2642fc89caef65d58747ce825" + integrity sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg== + dependencies: + undici-types "~6.19.2" -"@types/node@^12.12.6": - version "12.20.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.27.tgz#4141fcad57c332a120591de883e26fe4bb14aaea" - integrity sha512-qZdePUDSLAZRXXV234bLBEUM0nAQjoxbcSwp1rqSMUe1rZ47mwU6OjciR/JvF1Oo8mc0ys6GE0ks0HGgqAZoGg== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" "@types/prettier@^2.1.1": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.0.tgz#900b13362610ccd3570fb6eefb911a6732973d00" - integrity sha512-WHRsy5nMpjXfU9B0LqOqPT06EI2+8Xv5NERy0pLxJLbU98q7uhcGogQzfX+rXpU7S5mgHsLxHrLCufZcV/P8TQ== - -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/resolve@^0.0.8": version "0.0.8" @@ -2022,9 +1486,9 @@ "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" @@ -2034,111 +1498,121 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/sinon-chai@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.5.tgz#df21ae57b10757da0b26f512145c065f2ad45c48" - integrity sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ== + version "3.2.12" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.12.tgz#c7cb06bee44a534ec84f3a5534c3a3a46fd779b6" + integrity sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ== dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - version "10.0.5" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.5.tgz#01e7037ac0c6c5c54c1606463421ad5c6afc43e7" - integrity sha512-BrAUy0yq3n84XOykYGvGbDir9nBIYwQm2NdBNQT0DbtDLqh/5nMUsjz5XfwrefFNLPE9B6g8yLOZREpvw0J40A== + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa" + integrity sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw== dependencies: - "@sinonjs/fake-timers" "^7.1.0" + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.5" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== "@typescript-eslint/eslint-plugin@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz#41b79923fee46a745a3a50cba1c33c622aa3c79a" - integrity sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw== + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.2.1" - "@typescript-eslint/type-utils" "6.2.1" - "@typescript-eslint/utils" "6.2.1" - "@typescript-eslint/visitor-keys" "6.2.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" natural-compare "^1.4.0" - natural-compare-lite "^1.4.0" semver "^7.5.4" ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.2.1.tgz#e18a31eea1cca8841a565f1701960c8123ed07f9" - integrity sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg== - dependencies: - "@typescript-eslint/scope-manager" "6.2.1" - "@typescript-eslint/types" "6.2.1" - "@typescript-eslint/typescript-estree" "6.2.1" - "@typescript-eslint/visitor-keys" "6.2.1" + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz#b6f43a867b84e5671fe531f2b762e0b68f7cf0c4" - integrity sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.2.1" - "@typescript-eslint/visitor-keys" "6.2.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz#8eb8a2cccdf39cd7cf93e02bd2c3782dc90b0525" - integrity sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "6.2.1" - "@typescript-eslint/utils" "6.2.1" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.2.1.tgz#7fcdeceb503aab601274bf5e210207050d88c8ab" - integrity sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz#2af6e90c1e91cb725a5fe1682841a3f74549389e" - integrity sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.2.1" - "@typescript-eslint/visitor-keys" "6.2.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.2.1.tgz#2aa4279ec13053d05615bcbde2398e1e8f08c334" - integrity sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ== +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.2.1" - "@typescript-eslint/types" "6.2.1" - "@typescript-eslint/typescript-estree" "6.2.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz#442e7c09fe94b715a54ebe30e967987c3c41fbf4" - integrity sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.2.1" + "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -2147,21 +1621,14 @@ abbrev@1: abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== -abortcontroller-polyfill@^1.7.3: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== +abitype@1.0.6, abitype@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.6.tgz#76410903e1d88e34f1362746e2d407513c38565b" + integrity sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A== -abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: +abstract-level@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== @@ -2186,28 +1653,6 @@ abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: level-supports "^2.0.1" queue-microtask "^1.2.3" -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -2219,24 +1664,19 @@ acorn@^6.0.7: integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + version "8.13.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" + integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== agent-base@6: version "6.0.2" @@ -2253,7 +1693,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: +ajv@^6.10.2, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2264,19 +1704,19 @@ ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: uri-js "^4.2.2" ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" -amazon-cognito-identity-js@^6.0.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.1.tgz#d9a4c1a92f4b059330df8ea075f65106d2605409" - integrity sha512-PxBdufgS8uZShrcIFAsRjmqNXsh/4fXOWUGQOUhKLHWWK1pcp/y+VeFF48avXIWefM8XwsT3JlN6m9J2eHt4LA== +amazon-cognito-identity-js@^6.3.6: + version "6.3.12" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz#af73df033094ad4c679c19cf6122b90058021619" + integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== dependencies: "@aws-crypto/sha256-js" "1.2.2" buffer "4.9.2" @@ -2287,17 +1727,19 @@ amazon-cognito-identity-js@^6.0.1: amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" -ansi-colors@4.1.1, ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^3.2.0: version "3.2.0" @@ -2312,25 +1754,20 @@ ansi-escapes@^4.3.0: type-fest "^0.21.3" ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -2355,7 +1792,7 @@ antlr4ts@^0.5.0-alpha.4: resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== -anymatch@~3.1.1: +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2363,14 +1800,6 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2398,14 +1827,6 @@ array-back@^4.0.1, array-back@^4.0.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - array-timsort@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" @@ -2416,41 +1837,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -2459,7 +1845,7 @@ assertion-error@^1.1.0: ast-parents@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha1-UI/Q8F0MSHddnszaLhdEIyYejdM= + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== astral-regex@^1.0.0: version "1.0.0" @@ -2471,7 +1857,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@0.2.4, async-eventemitter@^0.2.4: +async-eventemitter@0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -2488,61 +1874,38 @@ async-retry@^1.3.3: async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== async@^2.4.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios@^0.21.2, axios@^0.21.4: +axios@^0.21.4: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -axios@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== +axios@^1.4.0, axios@^1.7.2: + version "1.7.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -2552,9 +1915,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" @@ -2563,42 +1926,10 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bigint-crypto-utils@^3.0.23: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - -bignumber.js@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" - integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bip39@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" - integrity sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw== - dependencies: - "@types/node" "11.11.6" - create-hash "^1.1.0" - pbkdf2 "^3.0.9" - randombytes "^2.0.1" + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== blakejs@^1.1.0: version "1.2.1" @@ -2608,9 +1939,9 @@ blakejs@^1.1.0: bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.8, bn.js@^4.11.9: +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== @@ -2620,6 +1951,20 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2635,36 +1980,19 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -brorand@^1.0.1, brorand@^1.1.0: +brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -2707,13 +2035,6 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - buffer@4.9.2: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -2723,14 +2044,6 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -2753,89 +2066,45 @@ bufferutil@4.0.7: dependencies: node-gyp-build "^4.3.0" -bufferutil@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.4.tgz#ab81373d313a6ead0d734e98c448c722734ae7bb" - integrity sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw== - dependencies: - node-gyp-build "^4.2.0" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -cbor@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.0.0.tgz#51657d26a99a6a1866f8c3258e948576eb17d709" - integrity sha512-nMmaLWbj7+bC6MsApKRIig8h+yjgNLhPLXaCelq5+C7mpWsHgIcseZSdvgexSY5uE1Q3m2uPvIDZwSdxdo7qig== - dependencies: - nofilter "^3.0.2" - cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" @@ -2843,32 +2112,40 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" +cbor@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + chai-almost@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chai-almost/-/chai-almost-1.0.1.tgz#43d026cf3be79a1cd513cf15af840a81243a4b60" - integrity sha1-Q9AmzzvnmhzVE88Vr4QKgSQ6S2A= + integrity sha512-UrNSx5f2B1/ESrOz0a4iLpDnQvDnK/3O0ZE/KGYQ+NcndKy0VQkMkv8yoGIHNSbjzKBid3EAMdDMA5wb9CxvSA== dependencies: deep-eql "^2.0.2" type-detect "^4.0.3" chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + version "7.1.2" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== dependencies: check-error "^1.0.2" chai@^4.2.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.1.0" chalk-template@^1.1.0: version "1.1.0" @@ -2877,7 +2154,7 @@ chalk-template@^1.1.0: dependencies: chalk "^5.2.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2904,30 +2181,17 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" + get-func-name "^2.0.2" -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2939,20 +2203,12 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.4.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" + readdirp "^4.0.1" ci-info@^2.0.0: version "2.0.0" @@ -2967,17 +2223,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -classic-level@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" - integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2991,10 +2236,15 @@ clear-module@^4.1.2: parent-module "^2.0.0" resolve-from "^5.0.0" +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: restore-cursor "^2.0.0" @@ -3003,15 +2253,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3038,14 +2279,14 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3082,11 +2323,6 @@ commander@2.18.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - commander@^12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" @@ -3109,29 +2345,19 @@ comment-json@^4.2.5: repeat-string "^1.6.1" compare-versions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.0.0.tgz#a3edb527e4487bfab9a8b62ffe70cebc9b87675b" - integrity sha512-s2MzYxfRsE9f/ow8hjn7ysa7pod1xhHdQMsgiJtKx6XSNf4x2N1KG4fjrkUmXcP/e9Y2ZX4zB6sHIso0Lm6evQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== cookie@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -core-js-pure@^3.0.1: - version "3.32.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.0.tgz#5d79f85da7a4373e9a06494ccbef995a4c639f8b" - integrity sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== core-util-is@^1.0.3: version "1.0.3" @@ -3148,14 +2374,6 @@ cosmiconfig@^5.0.7: js-yaml "^3.13.1" parse-json "^4.0.0" -crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3179,13 +2397,6 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-fetch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3206,80 +2417,80 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -cspell-config-lib@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.14.4.tgz#4642d22c4db22dd1b8923005ff369a24ff541f62" - integrity sha512-cnUeJfniTiebqCaQmIUnbSrPrTH7xzKRQjJDHAEV0WYnOG2MhRXI13OzytdFdhkVBdStmgTzTCJKE7x+kmU2NA== +cspell-config-lib@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.15.4.tgz#c9530304e072cbc8d9d4cd76fdb3abcf45dab8af" + integrity sha512-vUgikQTRkRMTdkZqSs7F2cTdPpX61cTjr/9L/VCkXkbW38ObCr4650ioiF1Wq3zDF3Gy2bc4ECTpD2PZUXX5SA== dependencies: - "@cspell/cspell-types" "8.14.4" + "@cspell/cspell-types" "8.15.4" comment-json "^4.2.5" - yaml "^2.5.1" + yaml "^2.6.0" -cspell-dictionary@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.14.4.tgz#d6bfaa972785b184499d7f81791c913440229de4" - integrity sha512-pZvQHxpAW5fZAnt3ZKKy3s7M+3CX2t8tCS3uJrpEHIynlCawpG0fPF78rVE5o+g0dON36Lguc/BUuSN4IWKLmQ== +cspell-dictionary@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.15.4.tgz#be701af741a0be1a8680674bcbd3dadd7bc5c1fe" + integrity sha512-8+p/l9Saac7qyCbqtELneDoT7CwHu9gYmnI8uXMu34/lPGjhVhy10ZeI0+t1djaO2YyASK400YFKq5uP/5KulA== dependencies: - "@cspell/cspell-pipe" "8.14.4" - "@cspell/cspell-types" "8.14.4" - cspell-trie-lib "8.14.4" + "@cspell/cspell-pipe" "8.15.4" + "@cspell/cspell-types" "8.15.4" + cspell-trie-lib "8.15.4" fast-equals "^5.0.1" -cspell-gitignore@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.14.4.tgz#bb53748ed93af980ed7c5772577ccdedada85293" - integrity sha512-RwfQEW5hD7CpYwS7m3b0ONG0nTLKP6bL2tvMdl7qtaYkL7ztGdsBTtLD1pmwqUsCbiN5RuaOxhYOYeRcpFRIkQ== +cspell-gitignore@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.15.4.tgz#79bcfcc343466cc483c1805baf0c53f6bdef1753" + integrity sha512-9n5PpQ8gEf8YcvEtoZGZ2Ma6wnqSFkD2GrmyjISy39DfIX/jNLN7GX2wJm6OD2P4FjXer95ypmIb/JWTlfmbTw== dependencies: - "@cspell/url" "8.14.4" - cspell-glob "8.14.4" - cspell-io "8.14.4" + "@cspell/url" "8.15.4" + cspell-glob "8.15.4" + cspell-io "8.15.4" find-up-simple "^1.0.0" -cspell-glob@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.14.4.tgz#b5abbaa291f3d17d5e52a33d26193a29761e30c8" - integrity sha512-C/xTS5nujMRMuguibq92qMVP767mtxrur7DcVolCvpzcivm1RB5NtIN0OctQxTyMbnmKeQv1t4epRKQ9A8vWRg== +cspell-glob@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.15.4.tgz#24934982f3ecf664a32618f0fdf3965de63f05da" + integrity sha512-TTfRRHRAN+PN9drIz4MAEgKKYnPThBOlPMdFddyuisvU33Do1sPAnqkkOjTEFdi3jAA5KwnSva68SVH6IzzMBQ== dependencies: - "@cspell/url" "8.14.4" + "@cspell/url" "8.15.4" micromatch "^4.0.8" -cspell-grammar@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.14.4.tgz#a047c9d365127f9e7688eebb649b14a8a7b0ce9e" - integrity sha512-yaSKAAJDiamsw3FChbw4HXb2RvTQrDsLelh1+T4MavarOIcAxXrqAJ8ysqm++g+S/ooJz2YO8YWIyzJKxcMf8g== - dependencies: - "@cspell/cspell-pipe" "8.14.4" - "@cspell/cspell-types" "8.14.4" - -cspell-io@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.14.4.tgz#fa80333f473fd04973b850c25116b6392f6c88a3" - integrity sha512-o6OTWRyx/Az+PFhr1B0wMAwqG070hFC9g73Fkxd8+rHX0rfRS69QZH7LgSmZytqbZIMxCTDGdsLl33MFGWCbZQ== - dependencies: - "@cspell/cspell-service-bus" "8.14.4" - "@cspell/url" "8.14.4" - -cspell-lib@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.14.4.tgz#f59f3141c3b9b44b46defc927365e484a1f7d1cc" - integrity sha512-qdkUkKtm+nmgpA4jQbmQTuepDfjHBDWvs3zDuEwVIVFq/h8gnXrRr75gJ3RYdTy+vOOqHPoLLqgxyqkUUrUGXA== - dependencies: - "@cspell/cspell-bundled-dicts" "8.14.4" - "@cspell/cspell-pipe" "8.14.4" - "@cspell/cspell-resolver" "8.14.4" - "@cspell/cspell-types" "8.14.4" - "@cspell/dynamic-import" "8.14.4" - "@cspell/filetypes" "8.14.4" - "@cspell/strong-weak-map" "8.14.4" - "@cspell/url" "8.14.4" +cspell-grammar@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.15.4.tgz#28619d564f4c128618fcecb1d71e31e30b69d213" + integrity sha512-MKiKyYi05mRtXOxPoTv3Ksi0GwYLiK84Uq0C+5PaMrnIjXeed0bsddSFXCT+7ywFJc7PdjhTtz0M/9WWK3UgbA== + dependencies: + "@cspell/cspell-pipe" "8.15.4" + "@cspell/cspell-types" "8.15.4" + +cspell-io@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.15.4.tgz#5d55471cbcff9f2d061a6f3504cd525152da754e" + integrity sha512-rXIEREPTFV9dwwg4EKfvzqlCNOvT6910AYED5YrSt8Y68usRJ9lbqdx0BrDndVCd33bp1o+9JBfHuRiFIQC81g== + dependencies: + "@cspell/cspell-service-bus" "8.15.4" + "@cspell/url" "8.15.4" + +cspell-lib@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.15.4.tgz#ebab39a5e9f74d2a50c588cd8397f0a2f5f7c4d0" + integrity sha512-iLp/625fvCyFFxSyZYLMgqHIKcrhN4hT7Hw5+ySa38Bp/OfA81ANqWHpsDQ0bGsALTRn/DHBpQYj4xCW/aN9tw== + dependencies: + "@cspell/cspell-bundled-dicts" "8.15.4" + "@cspell/cspell-pipe" "8.15.4" + "@cspell/cspell-resolver" "8.15.4" + "@cspell/cspell-types" "8.15.4" + "@cspell/dynamic-import" "8.15.4" + "@cspell/filetypes" "8.15.4" + "@cspell/strong-weak-map" "8.15.4" + "@cspell/url" "8.15.4" clear-module "^4.1.2" comment-json "^4.2.5" - cspell-config-lib "8.14.4" - cspell-dictionary "8.14.4" - cspell-glob "8.14.4" - cspell-grammar "8.14.4" - cspell-io "8.14.4" - cspell-trie-lib "8.14.4" + cspell-config-lib "8.15.4" + cspell-dictionary "8.15.4" + cspell-glob "8.15.4" + cspell-grammar "8.15.4" + cspell-io "8.15.4" + cspell-trie-lib "8.15.4" env-paths "^3.0.0" fast-equals "^5.0.1" gensequence "^7.0.0" @@ -3289,99 +2500,50 @@ cspell-lib@8.14.4: vscode-uri "^3.0.8" xdg-basedir "^5.1.0" -cspell-trie-lib@8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.14.4.tgz#1cc1d1110edc0d208a027b1bdc3cbec1a15ea7f8" - integrity sha512-zu8EJ33CH+FA5lwTRGqS//Q6phO0qtgEmODMR1KPlD7WlrfTFMb3bWFsLo/tiv5hjpsn7CM6dYDAAgBOSkoyhQ== +cspell-trie-lib@8.15.4: + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.15.4.tgz#48027e9bddc311f4b578b47286fc5d530c6da14a" + integrity sha512-sg9klsNHyrfos0Boiio+qy5d6fI9cCNjBqFYrNxvpKpwZ4gEzDzjgEKdZY1C76RD2KoBQ8I1NF5YcGc0+hhhCw== dependencies: - "@cspell/cspell-pipe" "8.14.4" - "@cspell/cspell-types" "8.14.4" + "@cspell/cspell-pipe" "8.15.4" + "@cspell/cspell-types" "8.15.4" gensequence "^7.0.0" cspell@^8.14.4: - version "8.14.4" - resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.14.4.tgz#a160fefcaf7158b8fa435245936b4f0426dc8736" - integrity sha512-R5Awb3i/RKaVVcZzFt8dkN3M6VnifIEDYBcbzbmYjZ/Eq+ASF+QTmI0E9WPhMEcFM1nd7YOyXnETo560yRdoKw== - dependencies: - "@cspell/cspell-json-reporter" "8.14.4" - "@cspell/cspell-pipe" "8.14.4" - "@cspell/cspell-types" "8.14.4" - "@cspell/dynamic-import" "8.14.4" - "@cspell/url" "8.14.4" + version "8.15.4" + resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.15.4.tgz#8292a6ece4ef05f0602c4ba6fb9ef8e962cb0433" + integrity sha512-hUOxcwmNWuHzVeGHyN5v/T9MkyCE5gi0mvatxsM794B2wOuR1ZORgjZH62P2HY1uBkXe/x5C6ITWrSyh0WgAcg== + dependencies: + "@cspell/cspell-json-reporter" "8.15.4" + "@cspell/cspell-pipe" "8.15.4" + "@cspell/cspell-types" "8.15.4" + "@cspell/dynamic-import" "8.15.4" + "@cspell/url" "8.15.4" chalk "^5.3.0" chalk-template "^1.1.0" commander "^12.1.0" - cspell-dictionary "8.14.4" - cspell-gitignore "8.14.4" - cspell-glob "8.14.4" - cspell-io "8.14.4" - cspell-lib "8.14.4" - fast-glob "^3.3.2" + cspell-dictionary "8.15.4" + cspell-gitignore "8.15.4" + cspell-glob "8.15.4" + cspell-io "8.15.4" + cspell-lib "8.15.4" fast-json-stable-stringify "^2.1.0" file-entry-cache "^9.1.0" get-stdin "^9.0.0" semver "^7.6.3" - strip-ansi "^7.1.0" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" + tinyglobby "^0.2.9" death@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: - ms "^2.1.1" - -debug@4, debug@^4.0.1, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -debug@4.3.4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.6.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" @@ -3391,14 +2553,14 @@ decamelize@^4.0.0: deep-eql@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a" - integrity sha1-sbrAblbwp2d3aG1Qyf63XC7XZ5o= + integrity sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw== dependencies: type-detect "^3.0.0" -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" @@ -3412,62 +2574,26 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-properties@^1.1.2, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + difflib@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -3490,19 +2616,11 @@ doctrine@^3.0.0: esutils "^2.0.2" dotenv@^16.0.0: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: +elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3515,6 +2633,19 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@^6.5.2, elliptic@^6.5.4, elliptic@^6.5.7: + version "6.5.7" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b" + integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" @@ -3530,22 +2661,13 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" env-paths@^2.2.0: version "2.2.1" @@ -3557,13 +2679,6 @@ env-paths@^3.0.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-3.0.0.tgz#2f1e89c2f6dbd3408e1b1711dd82d62e317f58da" integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -3571,140 +2686,17 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.5: - version "1.18.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" - integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-string "^1.0.7" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -3712,7 +2704,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== dependencies: esprima "^2.7.1" estraverse "^1.9.1" @@ -3749,10 +2741,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" - integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^5.6.0: version "5.16.0" @@ -3797,17 +2789,18 @@ eslint@^5.6.0: text-table "^0.2.0" eslint@^8.46.0: - version "8.46.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" - integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.1" - "@eslint/js" "^8.46.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3815,7 +2808,7 @@ eslint@^8.46.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.2" + eslint-visitor-keys "^3.4.3" espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" @@ -3860,24 +2853,17 @@ espree@^9.6.0, espree@^9.6.1: esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== +esquery@^1.0.1, esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -3891,7 +2877,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== estraverse@^4.1.1: version "4.3.0" @@ -3899,9 +2885,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -3909,11 +2895,11 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" @@ -3946,19 +2932,17 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" -ethereum-waffle@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz#f1ef1564c0155236f1a66c6eae362a5d67c9f64c" - integrity sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ== +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== dependencies: - "@ethereum-waffle/chai" "4.0.10" - "@ethereum-waffle/compiler" "4.0.3" - "@ethereum-waffle/mock-contract" "4.0.4" - "@ethereum-waffle/provider" "4.0.5" - solc "0.8.15" - typechain "^8.0.0" + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" -ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: +ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== @@ -3966,17 +2950,6 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-util@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" - integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" @@ -3990,19 +2963,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.1.tgz#236ef435f46820f0c420a708c0559b5897952069" - integrity sha512-1CGBmCp3m8IMGHhAJF/icH8qjCJrfQtaZ9KW+cAVV8kyN5Lc1IRq3KjV77ILOutrCwiyf5y2gMyCrAUMoCf2Ag== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.4" - -ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -4013,57 +2974,23 @@ ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.5: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethereumjs-util@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" - integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== +ethers@^6.1.0, ethers@^6.13.3: + version "6.13.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@5.7.2, ethers@^5.7.1, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== dependencies: bn.js "4.11.6" number-to-bn "1.7.0" @@ -4076,16 +3003,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -4094,23 +3011,6 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.0" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -4120,16 +3020,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-base64-decode@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" @@ -4141,38 +3031,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-equals@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== -fast-glob@^3.0.3: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: +fast-glob@^3.0.3, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -4191,19 +3059,29 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" +fdir@^6.4.0: + version "6.4.2" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" @@ -4228,13 +3106,6 @@ file-entry-cache@^9.1.0: dependencies: flat-cache "^5.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -4254,14 +3125,14 @@ find-up-simple@^1.0.0: resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368" integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw== -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: - locate-path "^3.0.0" + locate-path "^2.0.0" -find-up@5.0.0, find-up@^5.0.0: +find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -4269,13 +3140,6 @@ find-up@5.0.0, find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -4286,11 +3150,12 @@ flat-cache@^2.0.1: write "1.0.3" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" flat-cache@^5.0.0: @@ -4301,13 +3166,6 @@ flat-cache@^5.0.0: flatted "^3.3.1" keyv "^4.5.4" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -4318,70 +3176,25 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -flatted@^3.3.1: +flatted@^3.2.9, flatted@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.14.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" - integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== - -follow-redirects@^1.14.9, follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -4392,17 +3205,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -4434,59 +3236,22 @@ fs-extra@^9.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: +functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -functions-have-names@^1.2.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache@7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.4.3.tgz#e995f1250697264efbb34d4241c374a2b0271415" - integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== ganache@7.9.2: version "7.9.2" @@ -4514,55 +3279,21 @@ gensequence@^7.0.0: resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-7.0.0.tgz#bb6aedec8ff665e3a6c42f92823121e3a6ea7718" integrity sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== get-stdin@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - ghost-testrpc@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" @@ -4571,7 +3302,7 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4585,18 +3316,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -4609,7 +3328,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: +glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -4624,7 +3343,7 @@ glob@7.2.0, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== dependencies: inflight "^1.0.4" inherits "2" @@ -4632,6 +3351,29 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-directory@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" @@ -4661,19 +3403,12 @@ globals@^11.7.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^10.0.1: version "10.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -4700,80 +3435,49 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -"hardhat@2.11.0 - 2.16.1": - version "2.16.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.16.1.tgz#fd2288ce44f6846a70ba332b3d8158522447262a" - integrity sha512-QpBjGXFhhSYoYBGEHyoau/A63crZOP+i3GbNxzLGkL6IklzT+piN14+wGnINNCg5BLSKisQI/RAySPzaWRcx/g== +hardhat@^2.22.15: + version "2.22.15" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.15.tgz#319b4948f875968fde3f0d09a7edfe74e16b1365" + integrity sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/edr" "^0.6.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" + boxen "^5.1.2" chalk "^2.4.2" - chokidar "^3.4.0" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" @@ -4786,6 +3490,7 @@ har-validator@~5.1.3: glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + json-stream-stringify "^3.1.4" keccak "^3.0.2" lodash "^4.17.11" mnemonist "^0.38.0" @@ -4794,7 +3499,7 @@ har-validator@~5.1.3: raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" @@ -4802,25 +3507,15 @@ har-validator@~5.1.3: uuid "^8.3.2" ws "^7.4.6" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -4828,45 +3523,9 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-own-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" - integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.0, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" + integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== hash-base@^3.0.0: version "3.1.0" @@ -4885,7 +3544,14 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.2.0: +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -4904,40 +3570,21 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.6.0: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -http-errors@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - depd "~1.1.2" + depd "2.0.0" inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -4949,7 +3596,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4959,35 +3606,20 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@^4.0.0-rc.12: - version "4.0.0-rc.15" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.15.tgz#c30056f05eaaf5650fd15230586688fdd15c54bc" - integrity sha512-v8+A3sNyaieoP9dHegl3tEYnIZa7vqNiSv0U6D7YddiZi34VjKy4GsIxrRHj2d8+CS3MeiVja5QyNe4JO/aEXA== + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" @@ -5008,7 +3640,7 @@ import-meta-resolve@^4.1.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -5018,12 +3650,12 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5057,24 +3689,6 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -5087,34 +3701,10 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" @@ -5123,105 +3713,49 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^2.0.5, is-buffer@~2.0.3: +is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" - integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: - has-tostringtag "^1.0.0" + hasown "^2.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.2.tgz#859fc2e731e58c902f99fcabccb75a7dd07d29d8" - integrity sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg== - dependencies: - is-extglob "^2.1.1" - is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-number@^7.0.0: version "7.0.0" @@ -5238,89 +3772,20 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typed-array@^1.1.3, is-typed-array@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" - integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isomorphic-unfetch@^3.0.0: version "3.1.0" @@ -5330,26 +3795,16 @@ isomorphic-unfetch@^3.0.0: node-fetch "^2.6.1" unfetch "^4.2.0" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha3@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -5360,14 +3815,6 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -5376,25 +3823,13 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -5415,32 +3850,20 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -5454,27 +3877,9 @@ jsonfile@^6.0.1: graceful-fs "^4.1.6" jsonschema@^1.2.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== keccak@3.0.2: version "3.0.2" @@ -5486,15 +3891,15 @@ keccak@3.0.2: readable-stream "^3.6.0" keccak@^3.0.0, keccak@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keyv@^4.5.4: +keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -5506,20 +3911,6 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - level-concat-iterator@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" @@ -5527,43 +3918,6 @@ level-concat-iterator@^3.0.0: dependencies: catering "^2.1.0" -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - level-supports@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" @@ -5574,13 +3928,6 @@ level-supports@^4.0.0: resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - level-transcoder@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" @@ -5589,23 +3936,6 @@ level-transcoder@^1.0.1: buffer "^6.0.3" module-error "^1.0.1" -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - leveldown@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" @@ -5615,21 +3945,10 @@ leveldown@6.1.0: napi-macros "~2.0.0" node-gyp-build "^4.3.0" -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -5645,19 +3964,11 @@ levn@^0.4.1: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5668,7 +3979,17 @@ locate-path@^6.0.0: lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.merge@^4.6.2: version "4.6.2" @@ -5680,19 +4001,12 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -5700,40 +4014,23 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - yallist "^4.0.0" + get-func-name "^2.0.1" lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= - -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5743,58 +4040,22 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== -micromatch@^4.0.8: +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -5802,32 +4063,12 @@ micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.49.0: - version "1.49.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== - dependencies: - mime-db "1.49.0" - -mime-types@~2.1.19: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -5849,43 +4090,45 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.5, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" -minimist@^1.2.7: +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp@0.5.x, mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mkdirp@^1.0.4: version "1.0.4" @@ -5893,90 +4136,44 @@ mkdirp@^1.0.4: integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mnemonist@^0.38.0: - version "0.38.4" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.4.tgz#5d2f2dc4386aef78bfadeea60ce704dcf0ef8f3d" - integrity sha512-mflgW0gEWmVLbDDE2gJbOh3+RltTN7CgV9jV25qyCnyLN9FtoltWr7ZtAEDeD9u8W4oFAoolR6fBWieXdn3u8Q== - dependencies: - obliterator "^1.6.1" + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" + integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" -mocha@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.2.tgz#8e40d198acf91a52ace122cd7599c9ab857b29e6" - integrity sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -module-error@^1.0.1, module-error@^1.0.2: +module-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5984,43 +4181,23 @@ ms@2.1.3, ms@^2.1.1: mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -6031,6 +4208,11 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -6038,47 +4220,22 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.5" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" - integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.12, node-fetch@^2.6.6, node-fetch@^2.6.7: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== +node-fetch@^2.6.1, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-gyp-build@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== - node-gyp-build@4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -nofilter@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.0.3.tgz#3ff3b142efdccb403434ccae4a0c2c835cb9b522" - integrity sha512-TN/MCrQmXQk5DyUJ8TGUq1Il8rv4fTsjddLmMopV006QP8DMkglmGgYfQKD5620vXLRXfr8iGI6ZZ4/ZWld2cQ== + version "4.8.2" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.2.tgz#4f802b71c1ab2ca16af830e6c1ea7dd1ad9496fa" + integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== nofilter@^3.1.0: version "3.1.0" @@ -6088,7 +4245,7 @@ nofilter@^3.1.0: nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" @@ -6100,95 +4257,27 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== dependencies: bn.js "4.11.6" strip-hex-prefix "1.0.0" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.6" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" - integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - safe-array-concat "^1.0.0" - -obliterator@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" - integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= - dependencies: - http-https "^1.0.0" +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== once@1.x, once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== dependencies: mimic-fn "^1.0.0" @@ -6205,21 +4294,26 @@ optionator@^0.8.1, optionator@^0.8.2: word-wrap "~1.2.3" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-limit@^1.1.0: version "1.3.0" @@ -6228,13 +4322,6 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -6245,17 +4332,10 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -6273,12 +4353,7 @@ p-map@^4.0.0: p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== parent-module@^1.0.0: version "1.0.1" @@ -6297,20 +4372,15 @@ parent-module@^2.0.0: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -6320,24 +4390,24 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -6352,7 +4422,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.9: +pbkdf2@^3.0.17: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -6363,21 +4433,21 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.9: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picocolors@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -6391,28 +4461,18 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.1.2: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== - -prettier@^2.3.1: +prettier@^2.1.2, prettier@^2.3.1: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -6432,49 +4492,17 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@^6.11.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.0.1, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -6482,16 +4510,16 @@ randombytes@^2.0.1, randombytes@^2.1.0: safe-buffer "^5.1.0" raw-body@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6500,12 +4528,10 @@ readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== readdirp@~3.6.0: version "3.6.0" @@ -6517,31 +4543,22 @@ readdirp@~3.6.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== dependencies: - minimatch "3.0.4" + minimatch "^3.0.5" reduce-flatten@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -6552,51 +4569,20 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -request@^2.85.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -6611,7 +4597,7 @@ resolve-from@^5.0.0: resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== resolve@1.17.0: version "1.17.0" @@ -6621,17 +4607,18 @@ resolve@1.17.0: path-parse "^1.0.6" resolve@^1.1.6, resolve@^1.8.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -6644,7 +4631,7 @@ retry@0.13.1: retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" @@ -6658,13 +4645,6 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6680,14 +4660,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@2.2.6, rlp@^2.2.3: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" - integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== - dependencies: - bn.js "^4.11.1" - -rlp@^2.2.4: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -6699,13 +4672,6 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6713,11 +4679,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - rxjs@^6.4.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -6725,36 +4686,12 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - has-symbols "^1.0.3" - isarray "^2.0.5" - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -6779,12 +4716,12 @@ sc-istanbul@^0.4.5: which "^1.1.1" wordwrap "^1.0.0" -scrypt-js@3.0.1, scrypt-js@^3.0.0: +scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@4.0.3, secp256k1@^4.0.1: +secp256k1@4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== @@ -6793,10 +4730,14 @@ secp256k1@4.0.3, secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -seedrandom@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" - integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" semaphore-async-await@^1.5.1: version "1.5.1" @@ -6804,60 +4745,36 @@ semaphore-async-await@^1.5.1: integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== semver@^5.5.0, semver@^5.5.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^5.7.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7, semver@^7.3.8, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.6.3: +semver@^7.3.4, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -6870,7 +4787,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -6884,7 +4801,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -6892,27 +4809,18 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.4.tgz#366a4684d175b9cab2081e3681fda3747b6c51d7" - integrity sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: version "3.0.0" @@ -6937,25 +4845,10 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.15.tgz#d274dca4d5a8b7d3c9295d4cbdc9291ee1c52152" - integrity sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w== +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== dependencies: command-exists "^1.2.8" commander "^8.1.0" @@ -6987,29 +4880,28 @@ solhint@3.3.6: optionalDependencies: prettier "^1.14.3" -solidity-ast@^0.4.15: - version "0.4.49" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.49.tgz#ecba89d10c0067845b7848c3a3e8cc61a4fc5b82" - integrity sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ== +solidity-ast@^0.4.51: + version "0.4.59" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.59.tgz#290a2815aef70a61092591ab3e991da080ae5931" + integrity sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g== solidity-coverage@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.4.tgz#c57a21979f5e86859c5198de9fbae2d3bc6324a5" - integrity sha512-xeHOfBOjdMF6hWTbt42iH4x+7j1Atmrf5OldDPMxI+i/COdExUxszOswD9qqvcBTaLGiOrrpnh9UZjSpt4rBsg== + version "0.8.13" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.13.tgz#8eeada2e82ae19d25568368aa782a2baad0e0ce7" + integrity sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA== dependencies: "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.16.0" + "@solidity-parser/parser" "^0.18.0" chalk "^2.4.2" death "^1.1.0" - detect-port "^1.3.0" difflib "^0.2.4" fs-extra "^8.1.0" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" jsonschema "^1.2.4" - lodash "^4.17.15" - mocha "7.1.2" + lodash "^4.17.21" + mocha "^10.2.0" node-emoji "^1.10.0" pify "^4.0.1" recursive-readdir "^2.2.2" @@ -7019,9 +4911,9 @@ solidity-coverage@^0.8.4: web3-utils "^1.3.6" source-map-support@^0.5.13, source-map-support@^0.5.17: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -7034,29 +4926,14 @@ source-map@^0.6.0, source-map@^0.6.1: source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== dependencies: amdefine ">=0.0.4" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stacktrace-parser@^0.1.10: version "0.1.10" @@ -7065,22 +4942,17 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== string-format@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -"string-width@^1.0.2 || 2", string-width@^2.1.0: +string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -7088,7 +4960,7 @@ string-format@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -7097,7 +4969,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7106,49 +4978,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7159,11 +4988,11 @@ string_decoder@^1.1.1: strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -7177,48 +5006,27 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1, strip-json-comments@^2.0.1: +strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== dependencies: has-flag "^1.0.0" @@ -7236,6 +5044,18 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" @@ -7257,9 +5077,9 @@ table@^5.2.3: string-width "^3.0.0" table@^6.8.0: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -7270,12 +5090,20 @@ table@^6.8.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinyglobby@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.9.tgz#6baddd1b0fe416403efb0dd40442c7d7c03c1c66" + integrity sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw== + dependencies: + fdir "^6.4.0" + picomatch "^4.0.2" tmp@0.0.33, tmp@^0.0.33: version "0.0.33" @@ -7291,33 +5119,25 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-command-line-args@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz#fd6913e542099012c0ffb2496126a8f38305c7d6" - integrity sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ== + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: chalk "^4.1.0" command-line-args "^5.1.1" @@ -7360,38 +5180,31 @@ ts-node@^8.10.2: source-map-support "^0.5.17" yn "3.1.1" +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tslib@^1.11.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1, tslib@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== +tslib@^2.3.1, tslib@^2.6.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -7407,19 +5220,19 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.3, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-detect@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-3.0.0.tgz#46d0cc8553abb7b13a352b0d6dea2fd58f2d9b55" - integrity sha1-RtDMhVOrt7E6NSsNbeov1Y8tm1U= + integrity sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw== + +type-detect@^4.0.0, type-detect@^4.0.3, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== type-fest@^0.20.2: version "0.20.2" @@ -7436,20 +5249,10 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== - -typechain@^8.0.0, typechain@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.1.tgz#dccbc839b94877997536c356380eff7325395cfb" - integrity sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ== +typechain@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== dependencies: "@types/prettier" "^2.1.1" debug "^4.3.1" @@ -7462,56 +5265,10 @@ typechain@^8.0.0, typechain@^8.3.1: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typescript@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== typical@^4.0.0: version "4.0.0" @@ -7524,36 +5281,26 @@ typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.14.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.2.tgz#d7dd6a46ca57214f54a2d0a43cad0f35db82ac99" - integrity sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== undici@^5.14.0: - version "5.22.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" - integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" + +undici@^6.11.1: + version "6.20.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.20.1.tgz#fbb87b1e2b69d963ff2d5410a40ffb4c9e81b621" + integrity sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA== unfetch@^4.2.0: version "4.2.0" @@ -7566,14 +5313,14 @@ universalify@^0.1.0: integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: version "4.4.1" @@ -7582,14 +5329,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.1.tgz#26f90f615427eca1b9f4d6a28288c147e2302a32" - integrity sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA== - dependencies: - punycode "^1.4.1" - qs "^6.11.0" - utf-8-validate@5.0.7: version "5.0.7" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" @@ -7604,13 +5343,6 @@ utf-8-validate@6.0.3: dependencies: node-gyp-build "^4.3.0" -utf-8-validate@^5.0.2: - version "5.0.6" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.6.tgz#e1b3e0a5cc8648a3b44c1799fbb170d1aaaffe80" - integrity sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA== - dependencies: - node-gyp-build "^4.2.0" - utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -7621,35 +5353,25 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" +viem@^2.21.8: + version "2.21.32" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.32.tgz#b7f43b2004967036f83500260290cee45189f62a" + integrity sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ== + dependencies: + "@adraffy/ens-normalize" "1.11.0" + "@noble/curves" "1.6.0" + "@noble/hashes" "1.5.0" + "@scure/bip32" "1.5.0" + "@scure/bip39" "1.4.0" + abitype "1.0.6" + isows "1.0.6" + webauthn-p256 "0.0.10" + ws "8.18.0" vscode-languageserver-textdocument@^1.0.12: version "1.0.12" @@ -7661,177 +5383,42 @@ vscode-uri@^3.0.8: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== -web3-core-helpers@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz#1016534c51a5df77ed4f94d1fcce31de4af37fad" - integrity sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g== - dependencies: - web3-eth-iban "1.10.0" - web3-utils "1.10.0" - -web3-core-method@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.0.tgz#82668197fa086e8cc8066742e35a9d72535e3412" - integrity sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-core-subscriptions "1.10.0" - web3-utils "1.10.0" - -web3-core-promievent@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz#cbb5b3a76b888df45ed3a8d4d8d4f54ccb66a37b" - integrity sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz#4b34f6e05837e67c70ff6f6993652afc0d54c340" - integrity sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ== - dependencies: - util "^0.12.5" - web3-core-helpers "1.10.0" - web3-providers-http "1.10.0" - web3-providers-ipc "1.10.0" - web3-providers-ws "1.10.0" - -web3-core-subscriptions@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz#b534592ee1611788fc0cb0b95963b9b9b6eacb7c" - integrity sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" - -web3-core@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.0.tgz#9aa07c5deb478cf356c5d3b5b35afafa5fa8e633" - integrity sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-requestmanager "1.10.0" - web3-utils "1.10.0" - -web3-eth-iban@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" - integrity sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.10.0" - -web3-providers-http@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" - integrity sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.10.0" - -web3-providers-ipc@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" - integrity sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.10.0" - -web3-providers-ws@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" - integrity sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" - websocket "^1.0.32" - -web3-utils@1.10.0, web3-utils@^1.3.6, web3-utils@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" - integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: + "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" + ethereum-cryptography "^2.1.2" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" utf8 "3.0.0" +webauthn-p256@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/webauthn-p256/-/webauthn-p256-0.0.10.tgz#877e75abe8348d3e14485932968edf3325fd2fdd" + integrity sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA== + dependencies: + "@noble/curves" "^1.4.0" + "@noble/hashes" "^1.4.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-typed-array@^1.1.10, which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which-typed-array@^1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" - integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.7" - -which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: +which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -7845,22 +5432,22 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: - string-width "^1.0.2 || 2" + string-width "^4.0.0" -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word-wrap@^1.2.5, word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== wordwrapjs@^4.0.0: version "4.0.1" @@ -7870,19 +5457,10 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" @@ -7896,7 +5474,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write@1.0.3: version "1.0.3" @@ -7905,89 +5483,47 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + ws@^7.4.6: - version "7.5.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" - integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xdg-basedir@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== -xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" - integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yaml@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" + integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -7997,23 +5533,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 0bd9c2e1c40f3fc2ed5ed7522172b4e6582fd824 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:47:00 +0000 Subject: [PATCH 02/45] Replace hardhat plugins with updated versions for verification and matchers --- hardhat.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index ebd01cb73..f162b3f81 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,6 +1,6 @@ import { HardhatUserConfig } from "hardhat/config"; -import "@nomiclabs/hardhat-etherscan"; -import "@nomiclabs/hardhat-waffle"; +import "@nomicfoundation/hardhat-verify"; +import "@nomicfoundation/hardhat-chai-matchers"; import "@openzeppelin/hardhat-upgrades"; import "@typechain/hardhat"; import "solidity-coverage"; From 6245de6514ef887b5076d872ecdef1bf983a7bf3 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:48:14 +0000 Subject: [PATCH 03/45] Refactor helper scripts for deployment in tests --- test/utils/deploy/mainnet/communityPool.ts | 8 ++++---- test/utils/deploy/mainnet/depositBoxERC1155.ts | 10 +++++++--- test/utils/deploy/mainnet/depositBoxERC20.ts | 10 +++++++--- test/utils/deploy/mainnet/depositBoxERC721.ts | 10 +++++++--- .../mainnet/depositBoxERC721WithMetadata.ts | 10 +++++++--- test/utils/deploy/mainnet/depositBoxEth.ts | 10 +++++++--- test/utils/deploy/mainnet/linker.ts | 9 ++++++--- .../deploy/mainnet/messageProxyForMainnet.ts | 4 ++-- test/utils/deploy/schain/communityLocker.ts | 4 ++-- test/utils/deploy/schain/ethErc20.ts | 2 +- .../deploy/schain/messageProxyForSchain.ts | 2 +- .../utils/deploy/schain/tokenManagerERC1155.ts | 6 +++--- test/utils/deploy/schain/tokenManagerERC20.ts | 6 +++--- test/utils/deploy/schain/tokenManagerERC721.ts | 6 +++--- .../schain/tokenManagerERC721WithMetadata.ts | 6 +++--- test/utils/deploy/schain/tokenManagerEth.ts | 6 +++--- test/utils/deploy/schain/tokenManagerLinker.ts | 2 +- test/utils/deploy/test/communityPoolTester.ts | 12 ++++++++---- test/utils/deploy/test/fallbackEthTester.ts | 6 +++++- .../test/messageProxyForMainnetTester.ts | 6 +++--- test/utils/helper.ts | 17 ++++++++++++----- .../skale-manager-utils/contractManager.ts | 18 +++++++++--------- test/utils/skale-manager-utils/keyStorage.ts | 2 +- .../skale-manager-utils/schainsInternal.ts | 6 +++--- test/utils/skale-manager-utils/wallets.ts | 4 ++-- test/utils/time.ts | 9 ++++++++- 26 files changed, 118 insertions(+), 73 deletions(-) diff --git a/test/utils/deploy/mainnet/communityPool.ts b/test/utils/deploy/mainnet/communityPool.ts index 21fe02723..7aa5fd879 100644 --- a/test/utils/deploy/mainnet/communityPool.ts +++ b/test/utils/deploy/mainnet/communityPool.ts @@ -10,10 +10,10 @@ export async function deployCommunityPool( const factory = await ethers.getContractFactory("CommunityPool"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [await contractManager.getAddress(), await linker.getAddress(), await messageProxy.getAddress()], {"initializer": "initialize(address,address,address)"} - ) as CommunityPool; - await linker.registerMainnetContract(instance.address); - await messageProxy.setCommunityPool(instance.address); + ) as unknown as CommunityPool; + await linker.registerMainnetContract(await instance.getAddress()); + await messageProxy.setCommunityPool(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/depositBoxERC1155.ts b/test/utils/deploy/mainnet/depositBoxERC1155.ts index 840ba18fc..346859af5 100644 --- a/test/utils/deploy/mainnet/depositBoxERC1155.ts +++ b/test/utils/deploy/mainnet/depositBoxERC1155.ts @@ -10,9 +10,13 @@ export async function deployDepositBoxERC1155( const factory = await ethers.getContractFactory("DepositBoxERC1155"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as DepositBoxERC1155; - await linker.registerMainnetContract(instance.address); + ) as unknown as DepositBoxERC1155; + await linker.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/depositBoxERC20.ts b/test/utils/deploy/mainnet/depositBoxERC20.ts index d8242d76e..8c4043220 100644 --- a/test/utils/deploy/mainnet/depositBoxERC20.ts +++ b/test/utils/deploy/mainnet/depositBoxERC20.ts @@ -10,9 +10,13 @@ export async function deployDepositBoxERC20( const factory = await ethers.getContractFactory("DepositBoxERC20"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as DepositBoxERC20; - await linker.registerMainnetContract(instance.address); + ) as unknown as DepositBoxERC20; + await linker.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/depositBoxERC721.ts b/test/utils/deploy/mainnet/depositBoxERC721.ts index d88cb6ebe..8173630e9 100644 --- a/test/utils/deploy/mainnet/depositBoxERC721.ts +++ b/test/utils/deploy/mainnet/depositBoxERC721.ts @@ -10,9 +10,13 @@ export async function deployDepositBoxERC721( const factory = await ethers.getContractFactory("DepositBoxERC721"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as DepositBoxERC721; - await linker.registerMainnetContract(instance.address); + ) as unknown as DepositBoxERC721; + await linker.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts b/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts index 3e99eae15..dbba0d6ac 100644 --- a/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts +++ b/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts @@ -10,9 +10,13 @@ export async function deployDepositBoxERC721WithMetadata( const factory = await ethers.getContractFactory("DepositBoxERC721WithMetadata"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as DepositBoxERC721WithMetadata; - await linker.registerMainnetContract(instance.address); + ) as unknown as DepositBoxERC721WithMetadata; + await linker.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/depositBoxEth.ts b/test/utils/deploy/mainnet/depositBoxEth.ts index c203b4e35..727f782c9 100644 --- a/test/utils/deploy/mainnet/depositBoxEth.ts +++ b/test/utils/deploy/mainnet/depositBoxEth.ts @@ -10,9 +10,13 @@ export async function deployDepositBoxEth( const factory = await ethers.getContractFactory("DepositBoxEth"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as DepositBoxEth; - await linker.registerMainnetContract(instance.address); + ) as unknown as DepositBoxEth; + await linker.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/linker.ts b/test/utils/deploy/mainnet/linker.ts index 4602ff154..875b4023f 100644 --- a/test/utils/deploy/mainnet/linker.ts +++ b/test/utils/deploy/mainnet/linker.ts @@ -8,9 +8,12 @@ export async function deployLinker( const factory = await ethers.getContractFactory("Linker"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, messageProxy.address], + [ + await contractManager.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address)"} - ) as Linker; - await instance.registerMainnetContract(instance.address); + ) as unknown as Linker; + await instance.registerMainnetContract(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/mainnet/messageProxyForMainnet.ts b/test/utils/deploy/mainnet/messageProxyForMainnet.ts index adbca47fd..228d42625 100644 --- a/test/utils/deploy/mainnet/messageProxyForMainnet.ts +++ b/test/utils/deploy/mainnet/messageProxyForMainnet.ts @@ -10,8 +10,8 @@ export async function deployMessageProxyForMainnet( if (await contractManager.getContract(name) !== "0x0000000000000000000000000000000000000000") { return factory.attach(await contractManager.getContract(name)) as MessageProxyForMainnet; } else { - const instance = await upgrades.deployProxy(factory, [contractManager.address]) as MessageProxyForMainnet; - await contractManager.setContractsAddress(name, instance.address); + const instance = await upgrades.deployProxy(factory, [await contractManager.getAddress()]) as unknown as MessageProxyForMainnet; + await contractManager.setContractsAddress(name, await instance.getAddress()); return instance; } } \ No newline at end of file diff --git a/test/utils/deploy/schain/communityLocker.ts b/test/utils/deploy/schain/communityLocker.ts index 07ae96d76..f46f67fb2 100644 --- a/test/utils/deploy/schain/communityLocker.ts +++ b/test/utils/deploy/schain/communityLocker.ts @@ -12,7 +12,7 @@ export async function deployCommunityLocker( const factory = await ethers.getContractFactory(name); const instance = await upgrades.deployProxy( factory, - [schainName, messageProxyForSchain, tokenManagerLinker.address, communityPool] - ) as CommunityLocker; + [schainName, messageProxyForSchain, await tokenManagerLinker.getAddress(), communityPool] + ) as unknown as CommunityLocker; return instance; } diff --git a/test/utils/deploy/schain/ethErc20.ts b/test/utils/deploy/schain/ethErc20.ts index 566f4743a..8cef065c5 100644 --- a/test/utils/deploy/schain/ethErc20.ts +++ b/test/utils/deploy/schain/ethErc20.ts @@ -5,6 +5,6 @@ export async function deployEthErc20( tokenManagerEth: TokenManagerEth ) { const factory = await ethers.getContractFactory("EthErc20"); - const instance = await upgrades.deployProxy(factory, [tokenManagerEth.address]) as EthErc20; + const instance = await upgrades.deployProxy(factory, [await tokenManagerEth.getAddress()]) as unknown as EthErc20; return instance; } diff --git a/test/utils/deploy/schain/messageProxyForSchain.ts b/test/utils/deploy/schain/messageProxyForSchain.ts index a64829039..e2c9aa765 100644 --- a/test/utils/deploy/schain/messageProxyForSchain.ts +++ b/test/utils/deploy/schain/messageProxyForSchain.ts @@ -8,6 +8,6 @@ export async function deployMessageProxyForSchain(keyStorageAddress: string, sch const instance = await upgrades.deployProxy( factory, [keyStorageAddress, schainName] - ) as MessageProxyForSchain; + ) as unknown as MessageProxyForSchain; return instance; } \ No newline at end of file diff --git a/test/utils/deploy/schain/tokenManagerERC1155.ts b/test/utils/deploy/schain/tokenManagerERC1155.ts index 49c7cb204..ee2f2636f 100644 --- a/test/utils/deploy/schain/tokenManagerERC1155.ts +++ b/test/utils/deploy/schain/tokenManagerERC1155.ts @@ -16,10 +16,10 @@ export async function deployTokenManagerERC1155( [ schainName, messageProxyForSchain, - tokenManagerLinker.address, - communityLocker.address, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), newDepositBox ] - ) as TokenManagerERC1155; + ) as unknown as TokenManagerERC1155; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerERC20.ts b/test/utils/deploy/schain/tokenManagerERC20.ts index 1849dd686..2e582520f 100644 --- a/test/utils/deploy/schain/tokenManagerERC20.ts +++ b/test/utils/deploy/schain/tokenManagerERC20.ts @@ -16,10 +16,10 @@ export async function deployTokenManagerERC20( [ schainName, messageProxyForSchain, - tokenManagerLinker.address, - communityLocker.address, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), newDepositBox ] - ) as TokenManagerERC20; + ) as unknown as TokenManagerERC20; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerERC721.ts b/test/utils/deploy/schain/tokenManagerERC721.ts index f811d1658..3e788fe0b 100644 --- a/test/utils/deploy/schain/tokenManagerERC721.ts +++ b/test/utils/deploy/schain/tokenManagerERC721.ts @@ -16,10 +16,10 @@ export async function deployTokenManagerERC721( [ schainName, messageProxyForSchain, - tokenManagerLinker.address, - communityLocker.address, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), newDepositBox ] - ) as TokenManagerERC721; + ) as unknown as TokenManagerERC721; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts b/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts index d8c7ce15e..c9510508c 100644 --- a/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts +++ b/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts @@ -16,10 +16,10 @@ export async function deployTokenManagerERC721WithMetadata( [ schainName, messageProxyForSchain, - tokenManagerLinker.address, - communityLocker.address, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), newDepositBox ] - ) as TokenManagerERC721WithMetadata; + ) as unknown as TokenManagerERC721WithMetadata; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerEth.ts b/test/utils/deploy/schain/tokenManagerEth.ts index 0903ac4a0..50b814317 100644 --- a/test/utils/deploy/schain/tokenManagerEth.ts +++ b/test/utils/deploy/schain/tokenManagerEth.ts @@ -17,11 +17,11 @@ export async function deployTokenManagerEth( [ schainName, messageProxyForSchain, - tokenManagerLinker.address, - communityLocker.address, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), newDepositBox, ethErc20Address ] - ) as TokenManagerEth; + ) as unknown as TokenManagerEth; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerLinker.ts b/test/utils/deploy/schain/tokenManagerLinker.ts index 4d181c11c..b569d79b2 100644 --- a/test/utils/deploy/schain/tokenManagerLinker.ts +++ b/test/utils/deploy/schain/tokenManagerLinker.ts @@ -6,6 +6,6 @@ export async function deployTokenManagerLinker( newLinkerAddress: string ) { const factory = await ethers.getContractFactory("TokenManagerLinker"); - const instance = await upgrades.deployProxy(factory, [messageProxyForSchain.address, newLinkerAddress]) as TokenManagerLinker; + const instance = await upgrades.deployProxy(factory, [await messageProxyForSchain.getAddress(), newLinkerAddress]) as unknown as TokenManagerLinker; return instance; } diff --git a/test/utils/deploy/test/communityPoolTester.ts b/test/utils/deploy/test/communityPoolTester.ts index 1fcaf8a00..da44bc793 100644 --- a/test/utils/deploy/test/communityPoolTester.ts +++ b/test/utils/deploy/test/communityPoolTester.ts @@ -10,10 +10,14 @@ export async function deployCommunityPoolTester( const factory = await ethers.getContractFactory("CommunityPool"); const instance = await upgrades.deployProxy( factory, - [contractManager.address, linker.address, messageProxy.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} - ) as CommunityPool; - await linker.registerMainnetContract(instance.address); - await messageProxy.setCommunityPool(instance.address); + ) as unknown as CommunityPool; + await linker.registerMainnetContract(await instance.getAddress()); + await messageProxy.setCommunityPool(await instance.getAddress()); return instance; } \ No newline at end of file diff --git a/test/utils/deploy/test/fallbackEthTester.ts b/test/utils/deploy/test/fallbackEthTester.ts index d8e922a07..afcd47f63 100644 --- a/test/utils/deploy/test/fallbackEthTester.ts +++ b/test/utils/deploy/test/fallbackEthTester.ts @@ -8,6 +8,10 @@ export async function deployFallbackEthTester( schainName: string ) { const factory = await ethers.getContractFactory("FallbackEthTester"); - const instance = await factory.deploy(depositBoxEth.address, communityPool.address, schainName) as FallbackEthTester; + const instance = await factory.deploy( + await depositBoxEth.getAddress(), + await communityPool.getAddress(), + schainName + ) as FallbackEthTester; return instance; } \ No newline at end of file diff --git a/test/utils/deploy/test/messageProxyForMainnetTester.ts b/test/utils/deploy/test/messageProxyForMainnetTester.ts index 23b864798..ec3be70ba 100644 --- a/test/utils/deploy/test/messageProxyForMainnetTester.ts +++ b/test/utils/deploy/test/messageProxyForMainnetTester.ts @@ -12,9 +12,9 @@ export async function deployMessageProxyForMainnetTester( } else { const instance = await upgrades.deployProxy( factory, - [contractManager.address] - ) as MessageProxyForMainnetTester; - await contractManager.setContractsAddress(name, instance.address); + [await contractManager.getAddress()] + ) as unknown as MessageProxyForMainnetTester; + await contractManager.setContractsAddress(name, await instance.getAddress()); return instance; } } \ No newline at end of file diff --git a/test/utils/helper.ts b/test/utils/helper.ts index ed5b8f4dc..ff8a076b0 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -1,4 +1,4 @@ -import { Wallet, BytesLike } from "ethers"; +import { Wallet, BytesLike, HDNodeWallet } from "ethers"; import { ethers } from "hardhat"; import { ec } from "elliptic"; @@ -46,15 +46,22 @@ export function stringFromHex(value: string) { return str; } +export function stringToHex(str: string) { + const hex = Array.from(str) + .map(char => char.charCodeAt(0).toString(16).padStart(2, '0')) + .join(''); + return `0x${hex}`; + } + export function stringKeccak256(value: string): string { - return ethers.utils.solidityKeccak256(["string"], [value]); + return ethers.solidityPackedKeccak256(["string"], [value]); } -export function getPublicKey(wallet: Wallet): [BytesLike, BytesLike] { +export function getPublicKey(wallet: HDNodeWallet): [BytesLike, BytesLike] { const publicKey = secp256k1EC.keyFromPrivate(wallet.privateKey.slice(2)).getPublic(); - return [ethers.utils.hexlify(publicKey.getX().toBuffer()), ethers.utils.hexlify(publicKey.getY().toBuffer())] + return [ethers.hexlify(publicKey.getX().toBuffer()), ethers.hexlify(publicKey.getY().toBuffer())] } export async function getBalance(address: string): Promise { - return parseFloat(ethers.utils.formatEther(await ethers.provider.getBalance(address))); + return parseFloat(ethers.formatEther(await ethers.provider.getBalance(address))); } diff --git a/test/utils/skale-manager-utils/contractManager.ts b/test/utils/skale-manager-utils/contractManager.ts index d8fa85173..a01b0eafc 100644 --- a/test/utils/skale-manager-utils/contractManager.ts +++ b/test/utils/skale-manager-utils/contractManager.ts @@ -17,30 +17,30 @@ export async function deployContractManager(contractManagerAddress: string) { } if (await instance.getContract("KeyStorage") === "0x0000000000000000000000000000000000000000") { const keyStorageInstance = await (await ethers.getContractFactory("KeyStorageMock")).deploy() as KeyStorageMock; - await instance.setContractsAddress("KeyStorage", keyStorageInstance.address); + await instance.setContractsAddress("KeyStorage", await keyStorageInstance.getAddress()); } if (await instance.getContract(nameNodes) === "0x0000000000000000000000000000000000000000") { const nodesInstance = await (await ethers.getContractFactory(nameNodes)).deploy() as Nodes; - await instance.setContractsAddress(nameNodes, nodesInstance.address); + await instance.setContractsAddress(nameNodes, await nodesInstance.getAddress()); } if (await instance.getContract(nameSchains) === "0x0000000000000000000000000000000000000000") { const schainsInstance = await (await ethers.getContractFactory(nameSchains)).deploy() as Schains; - await schainsInstance.addContractManager(instance.address); - await instance.setContractsAddress(nameSchains, schainsInstance.address); + await schainsInstance.addContractManager(await instance.getAddress()); + await instance.setContractsAddress(nameSchains, await schainsInstance.getAddress()); } if (await instance.getContract(nameSchainsInternal) === "0x0000000000000000000000000000000000000000") { const schainsInternalInstance = await (await ethers.getContractFactory(nameSchainsInternal)).deploy() as SchainsInternal; - await schainsInternalInstance.addContractManager(instance.address); - await instance.setContractsAddress(nameSchainsInternal, schainsInternalInstance.address); + await schainsInternalInstance.addContractManager(await instance.getAddress()); + await instance.setContractsAddress(nameSchainsInternal, await schainsInternalInstance.getAddress()); } if (await instance.getContract(nameSkaleVerifier) === "0x0000000000000000000000000000000000000000") { const skaleVerifierInstance = await (await ethers.getContractFactory(nameSkaleVerifier)).deploy() as SkaleVerifierMock; - await instance.setContractsAddress("SkaleVerifier", skaleVerifierInstance.address); + await instance.setContractsAddress("SkaleVerifier", await skaleVerifierInstance.getAddress()); } if (await instance.getContract(nameWallets) === "0x0000000000000000000000000000000000000000") { const walletsInstance = await (await ethers.getContractFactory(nameWallets)).deploy() as Wallets; - await walletsInstance.addContractManager(instance.address); - await instance.setContractsAddress(nameWallets, walletsInstance.address); + await walletsInstance.addContractManager(await instance.getAddress()); + await instance.setContractsAddress(nameWallets, await walletsInstance.getAddress()); } return instance; } diff --git a/test/utils/skale-manager-utils/keyStorage.ts b/test/utils/skale-manager-utils/keyStorage.ts index 631fecfe1..1c8e6ea4e 100644 --- a/test/utils/skale-manager-utils/keyStorage.ts +++ b/test/utils/skale-manager-utils/keyStorage.ts @@ -22,7 +22,7 @@ export async function setCommonPublicKey( if (await contractManager.getContract("KeyStorage") === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); keyStorageInstance = await factory.deploy() as KeyStorageMock; - await contractManager.setContractsAddress("KeyStorage", keyStorageInstance.address); + await contractManager.setContractsAddress("KeyStorage", await keyStorageInstance.getAddress()); } else { keyStorageInstance = factory.attach(await contractManager.getContract("KeyStorage")) as KeyStorageMock; } diff --git a/test/utils/skale-manager-utils/schainsInternal.ts b/test/utils/skale-manager-utils/schainsInternal.ts index 4cb5f20ff..3016fe8b7 100644 --- a/test/utils/skale-manager-utils/schainsInternal.ts +++ b/test/utils/skale-manager-utils/schainsInternal.ts @@ -25,7 +25,7 @@ export async function addNodesToSchain( const schainsInternalFactory = await ethers.getContractFactory(nameSchainsInternal); const schainsInternalAddres = await contractManager.getContract(nameSchainsInternal); const schainsInternal = schainsInternalFactory.attach(schainsInternalAddres) as SchainsInternal; - await schainsInternal.addNodesToSchainsGroups(ethers.utils.id(schainName), nodes); + await schainsInternal.addNodesToSchainsGroups(ethers.id(schainName), nodes); } export async function isSchainActive( @@ -37,9 +37,9 @@ export async function isSchainActive( if (await contractManager.getContract(nameSchainsInternal) === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); schainsInternalInstance = await factory.deploy() as SchainsInternal; - await contractManager.setContractsAddress(nameSchainsInternal, schainsInternalInstance.address); + await contractManager.setContractsAddress(nameSchainsInternal, await schainsInternalInstance.getAddress()); } else { - schainsInternalInstance = await factory.attach(await contractManager.getContract(nameSchainsInternal)) as SchainsInternal; + schainsInternalInstance = factory.attach(await contractManager.getContract(nameSchainsInternal)) as SchainsInternal; } return await schainsInternalInstance.isSchainActive(stringKeccak256(schainName)); } diff --git a/test/utils/skale-manager-utils/wallets.ts b/test/utils/skale-manager-utils/wallets.ts index 248f95dbb..08c5205f7 100644 --- a/test/utils/skale-manager-utils/wallets.ts +++ b/test/utils/skale-manager-utils/wallets.ts @@ -16,8 +16,8 @@ export async function rechargeSchainWallet( if (await contractManager.getContract(nameWallets) === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); walletsInstance = await walletsFactory.deploy() as Wallets; - await walletsInstance.addContractManager(contractManager.address); - await contractManager.setContractsAddress(nameWallets, walletsInstance.address); + await walletsInstance.addContractManager(await contractManager.getAddress()); + await contractManager.setContractsAddress(nameWallets, await walletsInstance.getAddress()); } else { walletsInstance = await walletsFactory.attach(await contractManager.getContract(nameWallets)) as Wallets; } diff --git a/test/utils/time.ts b/test/utils/time.ts index 12bff326a..cfb91b655 100644 --- a/test/utils/time.ts +++ b/test/utils/time.ts @@ -31,5 +31,12 @@ export async function skipTime(seconds: number) { } export async function currentTime() { - return (await ethers.provider.getBlock("latest")).timestamp; + try { + const block = await ethers.provider.getBlock('latest'); + if (!block) throw new Error('Failed to retrieve the latest block.'); + return block.timestamp; + } catch (error) { + console.error('Error fetching the latest block:', error); + throw error; + } } From 2d64d75565715d1a8fe867e2667d764def16a36a Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:48:40 +0000 Subject: [PATCH 04/45] Refactor DepositBoxes --- test/DepositBoxERC1155.ts | 129 +++++------ test/DepositBoxERC20.ts | 305 ++++++++++++++------------- test/DepositBoxERC721.ts | 128 ++++++----- test/DepositBoxERC721WithMetadata.ts | 128 ++++++----- test/DepositBoxEth.ts | 167 ++++++--------- 5 files changed, 416 insertions(+), 441 deletions(-) diff --git a/test/DepositBoxERC1155.ts b/test/DepositBoxERC1155.ts index 6bfd6e7f1..9ab06fa46 100644 --- a/test/DepositBoxERC1155.ts +++ b/test/DepositBoxERC1155.ts @@ -55,15 +55,15 @@ import { deployERC1155OnChain } from "./utils/deploy/erc1155OnChain"; import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, N, Wallet } from "ethers"; import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; -const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781") +const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -74,7 +74,7 @@ describe("DepositBoxERC1155", () => { let user: SignerWithAddress; let user2: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let depositBoxERC1155: DepositBoxERC1155; let contractManager: ContractManager; @@ -89,13 +89,14 @@ describe("DepositBoxERC1155", () => { before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - BigInt(ethers.parseEther("1"))}); }); beforeEach(async () => { @@ -105,7 +106,7 @@ describe("DepositBoxERC1155", () => { depositBoxERC1155 = await deployDepositBoxERC1155(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -120,9 +121,9 @@ describe("DepositBoxERC1155", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(depositBoxERC1155.address); - await messageProxy.registerExtraContract(schainName, communityPool.address); - await messageProxy.registerExtraContract(schainName, linker.address); + await messageProxy.registerExtraContractForAll(await depositBoxERC1155.getAddress()); + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, await linker.getAddress()); }); describe("tests with `ERC1155`", async () => { @@ -151,13 +152,13 @@ describe("DepositBoxERC1155", () => { const fakeERC1155Contract = deployer.address; await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, fakeERC1155Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC1155.connect(deployer).addERC1155TokenByOwner(schainName, erc1155.address) + await depositBoxERC1155.connect(deployer).addERC1155TokenByOwner(schainName, await erc1155.getAddress()) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155.address); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155.address).should.be.eventually.rejectedWith("ERC1155 Token was already added"); - expect(await depositBoxERC1155.getSchainToERC1155(schainName, erc1155.address)).to.be.equal(true); - expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1))[0]).to.be.equal(erc1155.address); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()).should.be.eventually.rejectedWith("ERC1155 Token was already added"); + expect(await depositBoxERC1155.getSchainToERC1155(schainName, await erc1155.getAddress())).to.be.equal(true); + expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1))[0]).to.be.equal(await erc1155.getAddress()); expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC1155.getSchainToAllERC1155Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC1155.getSchainToAllERC1155(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -168,7 +169,7 @@ describe("DepositBoxERC1155", () => { it("should rejected with `DepositBox was not approved for ERC1155 token`", async () => { // preparation const error = "DepositBox was not approved for ERC1155 token"; - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const id = 5; const amount = 7; // the wei should be MORE than (55000 * 1000000000) @@ -187,7 +188,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155` without mistakes", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const id = 5; const amount = 7; const id2 = 10; @@ -199,7 +200,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // execution await depositBoxERC1155 .connect(deployer) @@ -213,13 +214,13 @@ describe("DepositBoxERC1155", () => { .depositERC1155(schainName, contractHere, id2, amount2)).wait(); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - expect(BigNumber.from(await erc1155.balanceOf(depositBoxERC1155.address, id)).toNumber()).to.equal(amount); - expect(BigNumber.from(await erc1155.balanceOf(depositBoxERC1155.address, id2)).toNumber()).to.equal(amount2); + expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id)).to.equal(amount); + expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id2)).to.equal(amount2); }); it("should invoke `depositERC1155Direct` without mistakes", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const to = user.address; const id = 5; const amount = 7; @@ -232,7 +233,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // execution await depositBoxERC1155 .connect(deployer) @@ -244,22 +245,22 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .depositERC1155Direct(schainName, contractHere, id, amount, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxERC1155.address, deployer.address, data1); + .withArgs(schainHash, 0, await depositBoxERC1155.getAddress(), deployer.address, data1); await depositBoxERC1155 .connect(deployer) .depositERC1155Direct(schainName, contractHere, id2, amount2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, depositBoxERC1155.address, deployer.address, data2); + .withArgs(schainHash, 1, await depositBoxERC1155.getAddress(), deployer.address, data2); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - expect(BigNumber.from(await erc1155.balanceOf(depositBoxERC1155.address, id)).toNumber()).to.equal(amount); - expect(BigNumber.from(await erc1155.balanceOf(depositBoxERC1155.address, id2)).toNumber()).to.equal(amount2); + expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id)).to.equal(amount); + expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id2)).to.equal(amount2); }); it("should rejected with `DepositBox was not approved for ERC1155 token Batch`", async () => { // preparation const error = "DepositBox was not approved for ERC1155 token Batch"; - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const ids = [1, 2, 3]; const amounts = [3, 2, 1]; // the wei should be MORE than (55000 * 1000000000) @@ -278,7 +279,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155Batch` without mistakes", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const ids = [1, 2, 3]; const amounts = [3, 2, 1]; const ids2 = [5, 4, 99]; @@ -290,7 +291,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // execution await depositBoxERC1155 .connect(deployer) @@ -304,15 +305,15 @@ describe("DepositBoxERC1155", () => { .depositERC1155Batch(schainName, contractHere, ids2, amounts2)).wait(); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - const balanceIds = await erc1155.balanceOfBatch([depositBoxERC1155.address, depositBoxERC1155.address, depositBoxERC1155.address], ids); - const balanceIds2 = await erc1155.balanceOfBatch([depositBoxERC1155.address, depositBoxERC1155.address, depositBoxERC1155.address], ids2); + const balanceIds = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids); + const balanceIds2 = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids2); const balanceIdsNumber: number[] = []; const balanceIds2Number: number[] = []; balanceIds.forEach(element => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); balanceIds2.forEach(element => { - balanceIds2Number.push(BigNumber.from(element).toNumber()) + balanceIds2Number.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); expect(balanceIds2Number).to.deep.equal(amounts2); @@ -320,7 +321,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155BatchDirect` without mistakes", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const to = user.address; const ids = [1, 2, 3]; const amounts = [3, 2, 1]; @@ -333,7 +334,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // execution await depositBoxERC1155 .connect(deployer) @@ -345,23 +346,23 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .depositERC1155BatchDirect(schainName, contractHere, ids, amounts, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxERC1155.address, deployer.address, data1); + .withArgs(schainHash, 0, await depositBoxERC1155.getAddress(), deployer.address, data1); await depositBoxERC1155 .connect(deployer) .depositERC1155BatchDirect(schainName, contractHere, ids2, amounts2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, depositBoxERC1155.address, deployer.address, data2); + .withArgs(schainHash, 1, await depositBoxERC1155.getAddress(), deployer.address, data2); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - const balanceIds = await erc1155.balanceOfBatch([depositBoxERC1155.address, depositBoxERC1155.address, depositBoxERC1155.address], ids); - const balanceIds2 = await erc1155.balanceOfBatch([depositBoxERC1155.address, depositBoxERC1155.address, depositBoxERC1155.address], ids2); + const balanceIds = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids); + const balanceIds2 = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids2); const balanceIdsNumber: number[] = []; const balanceIds2Number: number[] = []; balanceIds.forEach(element => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); balanceIds2.forEach(element => { - balanceIds2Number.push(BigNumber.from(element).toNumber()) + balanceIds2Number.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); expect(balanceIds2Number).to.deep.equal(amounts2); @@ -373,31 +374,31 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); await erc1155.connect(deployer).mint(deployer.address, 4, 100, "0x"); - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); await depositBoxERC1155.connect(user).disableWhitelist(schainName); await depositBoxERC1155 .connect(deployer) - .depositERC1155(schainName, erc1155.address, 4, 50); - await depositBoxERC1155.connect(user).getFunds(schainName, erc1155.address, user.address, [4], [50]).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC1155(schainName, await erc1155.getAddress(), 4, 50); + await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [50]).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC1155.connect(user).getFunds(schainName, erc1155.address, user.address, [4], [60]).should.be.eventually.rejectedWith("Incorrect amount"); - await depositBoxERC1155.connect(user).getFunds(schainName, erc1155.address, user.address, [4], [50]); - expect(BigNumber.from(await erc1155.balanceOf(user.address, 4)).toString()).to.equal("50"); + await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [60]).should.be.eventually.rejectedWith("Incorrect amount"); + await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [50]); + expect(await erc1155.balanceOf(user.address, 4)).to.equal("50"); }); it("should add erc token by schain owner", async () => { const fakeERC1155Contract = deployer.address; await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, fakeERC1155Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155.address); - expect(await depositBoxERC1155.getSchainToERC1155(schainName, erc1155.address)).to.be.equal(true); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()); + expect(await depositBoxERC1155.getSchainToERC1155(schainName, await erc1155.getAddress())).to.be.equal(true); }); it("should not allow to add token by schain owner if schain killed", async () => { await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155.address) + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()) .should.be.eventually.rejectedWith("Schain is killed"); }); }); @@ -411,7 +412,7 @@ describe("DepositBoxERC1155", () => { it("should transfer ERC1155 token", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const id = 5; const amount = 7; const to = user.address; @@ -428,7 +429,7 @@ describe("DepositBoxERC1155", () => { const message = { data: await messages.encodeTransferErc1155Message(contractHere, to, id, amount), - destinationContract: depositBoxERC1155.address, + destinationContract: await depositBoxERC1155.getAddress(), sender: senderFromSchain }; @@ -444,9 +445,9 @@ describe("DepositBoxERC1155", () => { // mint some ERC1155 of for `deployer` address await erc1155.connect(deployer).mint(deployer.address, id, amount, "0x"); - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // transfer tokenId from `deployer` to `depositBoxERC1155` - // await erc1155.connect(deployer).transferFrom(deployer.address, depositBoxERC1155.address, tokenId); + // await erc1155.connect(deployer).transferFrom(deployer.address, await depositBoxERC1155.getAddress(), tokenId); // get data from `receiveERC1155` await depositBoxERC1155.connect(user2).disableWhitelist(schainName); await depositBoxERC1155 @@ -461,12 +462,12 @@ describe("DepositBoxERC1155", () => { balance.should.be.almost(balanceBefore); // console.log("Gas for postMessage ERC1155:", res.receipt.gasUsed); // expectation - (BigNumber.from(await erc1155.balanceOf(user.address, id)).toNumber()).should.be.equal(amount); + (await erc1155.balanceOf(user.address, id)).should.be.equal(amount); }); it("should transfer ERC1155 token Batch", async () => { // preparation - const contractHere = erc1155.address; + const contractHere = await erc1155.getAddress(); const ids = [5, 6, 7]; const amounts = [100, 100, 100]; const to = user.address; @@ -483,7 +484,7 @@ describe("DepositBoxERC1155", () => { const message = { data: await messages.encodeTransferErc1155BatchMessage(contractHere, to, ids, amounts), - destinationContract: depositBoxERC1155.address, + destinationContract: await depositBoxERC1155.getAddress(), sender: senderFromSchain }; @@ -499,9 +500,9 @@ describe("DepositBoxERC1155", () => { // mint some ERC1155 of for `deployer` address await erc1155.connect(deployer).mintBatch(deployer.address, ids, amounts, "0x"); - await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155.address, true); + await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); // transfer tokenId from `deployer` to `depositBoxERC1155` - // await erc1155.connect(deployer).transferFrom(deployer.address, depositBoxERC1155.address, tokenId); + // await erc1155.connect(deployer).transferFrom(deployer.address, await depositBoxERC1155.getAddress(), tokenId); // get data from `receiveERC1155` await depositBoxERC1155.connect(user2).disableWhitelist(schainName); await depositBoxERC1155 @@ -519,7 +520,7 @@ describe("DepositBoxERC1155", () => { const balanceIds = await erc1155.balanceOfBatch([user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach(element => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); }); diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index cf51b696e..b3c3fb929 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -33,7 +33,7 @@ import { ERC20OnChain, CommunityPool } from "../typechain"; -import { stringFromHex, getPublicKey, stringKeccak256 } from "./utils/helper"; +import { stringFromHex, getPublicKey, stringKeccak256, stringToHex } from "./utils/helper"; import chai = require("chai"); @@ -52,16 +52,16 @@ import { deployERC20OnChain } from "./utils/deploy/erc20OnChain"; import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { assert, expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; import { currentTime, skipTime } from "./utils/time"; -const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781") +const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -73,7 +73,7 @@ describe("DepositBoxERC20", () => { let user: SignerWithAddress; let user2: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let depositBoxERC20: DepositBoxERC20; let contractManager: ContractManager; @@ -88,13 +88,13 @@ describe("DepositBoxERC20", () => { before(async () => { [deployer, schainOwner, user, user2, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - ethers.parseEther("1")}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - ethers.parseEther("1")}); }); beforeEach(async () => { @@ -103,7 +103,7 @@ describe("DepositBoxERC20", () => { linker = await deployLinker(contractManager, messageProxy); depositBoxERC20 = await deployDepositBoxERC20(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); const nodeCreationParams = { @@ -118,9 +118,9 @@ describe("DepositBoxERC20", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(depositBoxERC20.address); - await messageProxy.registerExtraContract(schainName, communityPool.address); - await messageProxy.registerExtraContract(schainName, linker.address); + await messageProxy.registerExtraContractForAll(await depositBoxERC20.getAddress()); + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, await linker.getAddress()); messages = await deployMessages(); }); @@ -141,12 +141,12 @@ describe("DepositBoxERC20", () => { const error = "Whitelist is enabled"; await depositBoxERC20.connect(schainOwner).enableWhitelist(schainName); await erc20.connect(deployer).mint(user.address, "1000000000"); - await erc20.connect(deployer).approve(depositBoxERC20.address, "1000000"); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), "1000000"); // set `DepositBox` contract to avoid the `Not allowed` error in LockAndDataForMainnet.sol // execution/expectation await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 100) + .depositERC20(schainName, await erc20.getAddress(), 100) .should.be.eventually.rejectedWith(error); }); @@ -158,7 +158,7 @@ describe("DepositBoxERC20", () => { // execution/expectation await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 100) + .depositERC20(schainName, await erc20.getAddress(), 100) .should.be.eventually.rejectedWith(error); }); @@ -167,18 +167,18 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(depositBoxERC20.address, amount); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); // execution await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 1).should.be.eventually.rejectedWith("Whitelist is enabled"); + .depositERC20(schainName, await erc20.getAddress(), 1).should.be.eventually.rejectedWith("Whitelist is enabled"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 1); + .depositERC20(schainName, await erc20.getAddress(), 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 1); + .depositERC20(schainName, await erc20.getAddress(), 1); }); it("should invoke `depositERC20Direct` without mistakes", async () => { @@ -186,25 +186,25 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(depositBoxERC20.address, amount); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); // execution await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, erc20.address, 1, user.address).should.be.eventually.rejectedWith("Whitelist is enabled"); + .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address).should.be.eventually.rejectedWith("Whitelist is enabled"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); - const data1 = await messages.encodeTransferErc20AndTokenInfoMessage(erc20.address, user.address, 1, amount, { name: "D2-token", symbol: "D2", decimals: 18 }); - const data2 = await messages.encodeTransferErc20AndTotalSupplyMessage(erc20.address, user.address, 1, amount); + const data1 = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20.getAddress(), user.address, 1, amount, { name: "D2-token", symbol: "D2", decimals: 18 }); + const data2 = await messages.encodeTransferErc20AndTotalSupplyMessage(await erc20.getAddress(), user.address, 1, amount); await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, erc20.address, 1, user.address) + .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxERC20.address, deployer.address, data1); + .withArgs(schainHash, 0, await depositBoxERC20.getAddress(), deployer.address, data1); await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, erc20.address, 1, user.address) + .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, depositBoxERC20.address, deployer.address, data2); + .withArgs(schainHash, 1, await depositBoxERC20.getAddress(), deployer.address, data2); }); it("should rejected with `Amount is incorrect`", async () => { @@ -212,39 +212,39 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(depositBoxERC20.address, amount + 1); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount + 1); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, amount + 1) + .depositERC20(schainName, await erc20.getAddress(), amount + 1) .should.be.eventually.rejectedWith("Amount is incorrect"); }); }); it("should get funds after kill", async () => { await erc20.connect(deployer).mint(deployer.address, "1000000000"); - await erc20.connect(deployer).approve(depositBoxERC20.address, "1000000"); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), "1000000"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 1); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20.address, schainOwner.address, 1).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC20(schainName, await erc20.getAddress(), 1); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 1).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(schainOwner).kill(schainName); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20.address, schainOwner.address, 2).should.be.eventually.rejectedWith("Incorrect amount"); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20.address, schainOwner.address, 1); - expect(BigNumber.from(await erc20.balanceOf(schainOwner.address)).toString()).to.equal("1"); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 2).should.be.eventually.rejectedWith("Incorrect amount"); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 1); + expect(await erc20.balanceOf(schainOwner.address)).to.equal("1"); }); it("should add erc token by schain owner", async () => { const fakeERC20Contract = deployer.address; await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, fakeERC20Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20.address); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20.address).should.be.eventually.rejectedWith("ERC20 Token was already added"); - expect(await depositBoxERC20.getSchainToERC20(schainName, erc20.address)).to.be.equal(true); - expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1))[0]).to.be.equal(erc20.address); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()).should.be.eventually.rejectedWith("ERC20 Token was already added"); + expect(await depositBoxERC20.getSchainToERC20(schainName, await erc20.getAddress())).to.be.equal(true); + expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1))[0]).to.be.equal(await erc20.getAddress()); expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC20.getSchainToAllERC20Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC20.getSchainToAllERC20(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -254,7 +254,7 @@ describe("DepositBoxERC20", () => { it("should not allow to add token by schain owner if schain killed", async () => { await linker.connect(deployer).kill(schainName); await linker.connect(schainOwner).kill(schainName); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20.address) + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()) .should.be.eventually.rejectedWith("Schain is killed"); }); @@ -269,25 +269,25 @@ describe("DepositBoxERC20", () => { await erc20TWFR.connect(deployer).mint(deployer.address, amount); await erc20IT.connect(deployer).mint(deployer.address, amount); await erc20.connect(deployer).mint(deployer.address, amount); - await erc20TWR.connect(deployer).approve(depositBoxERC20.address, amount); - await erc20TWFR.connect(deployer).approve(depositBoxERC20.address, amount); - await erc20IT.connect(deployer).approve(depositBoxERC20.address, amount); - await erc20.connect(deployer).approve(depositBoxERC20.address, amount); + await erc20TWR.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20TWFR.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20IT.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); // execution await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20.address, 1); + .depositERC20(schainName, await erc20.getAddress(), 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20TWR.address, 1); + .depositERC20(schainName, await erc20TWR.getAddress(), 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20IT.address, 1) + .depositERC20(schainName, await erc20IT.getAddress(), 1) .should.be.eventually.rejectedWith("SafeERC20: low-level call failed"); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, erc20TWFR.address, 1) + .depositERC20(schainName, await erc20TWFR.getAddress(), 1) .should.be.eventually.rejectedWith("SafeERC20: ERC20 operation did not succeed"); }); }); @@ -303,8 +303,8 @@ describe("DepositBoxERC20", () => { it("should transfer ERC20 token", async () => { // preparation - const ercOnSchain = erc20.address; - const fakeErc20OnSchain = erc20Clone.address; + const ercOnSchain = await erc20.getAddress(); + const fakeErc20OnSchain = await erc20Clone.getAddress(); const amount = 10; const to = user.address; const senderFromSchain = deployer.address; @@ -319,25 +319,25 @@ describe("DepositBoxERC20", () => { const message = { data: await messages.encodeTransferErc20Message(ercOnSchain, to, amount), - destinationContract: depositBoxERC20.address, + destinationContract: await depositBoxERC20.getAddress(), sender: senderFromSchain }; const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc20Message(user2.address, to, amount), - destinationContract: depositBoxERC20.address, + destinationContract: await depositBoxERC20.getAddress(), sender: senderFromSchain }; const messageWithNotMintedToken = { data: await messages.encodeTransferErc20Message(fakeErc20OnSchain, to, amount), - destinationContract: depositBoxERC20.address, + destinationContract: await depositBoxERC20.getAddress(), sender: senderFromSchain }; await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); await setCommonPublicKey(contractManager, schainName); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount) + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) .should.be.eventually.rejectedWith("Unconnected chain"); await linker @@ -351,31 +351,42 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await erc20.connect(deployer).mint(user.address, amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount) + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) .should.be.eventually.rejectedWith("DepositBox was not approved for ERC20 token"); - await erc20.connect(user).approve(depositBoxERC20.address, amount * 2); + await erc20.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress, messageWithNotMintedToken], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[0].args?.message), "Given address is not a contract"); - assert.equal(res.events[1].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[1].args?.message), "Not enough money"); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy + .connect(nodeAddress) + .postIncomingMessages( + schainName, 0, + [ + messageWithWrongTokenAddress, + messageWithNotMintedToken + ], + sign + ); + + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("Given address is not a contract")); + + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(1), stringToHex("Not enough money")); + - const balanceBefore = await deployer.getBalance(); + const balanceBefore = await ethers.provider.getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 2, [message], sign); - const balance = await deployer.getBalance(); + const balance = await ethers.provider.getBalance(deployer.address); balance.should.be.least(balanceBefore); balance.should.be.closeTo(balanceBefore, 10); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 3, [message], sign); - expect(BigNumber.from(await depositBoxERC20.transferredAmount(schainHash, erc20.address)).toString()).to.be.equal(BigNumber.from(0).toString()); + const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, await erc20.getAddress()); + expect(transferredAmount).to.be.equal(BigInt(0)); (await erc20.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); @@ -397,20 +408,20 @@ describe("DepositBoxERC20", () => { }; const message = { - data: await messages.encodeTransferErc20Message(erc20.address, to, amount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await erc20.getAddress(), to, amount), + destinationContract: await depositBoxERC20.getAddress(), sender: senderFromSchain }; const messageTWR = { - data: await messages.encodeTransferErc20Message(erc20TWR.address, to, amount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await erc20TWR.getAddress(), to, amount), + destinationContract: await depositBoxERC20.getAddress(), sender: senderFromSchain }; await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); await setCommonPublicKey(contractManager, schainName); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount) + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) .should.be.eventually.rejectedWith("Unconnected chain"); await linker @@ -425,23 +436,25 @@ describe("DepositBoxERC20", () => { await erc20.connect(deployer).mint(user.address, amount * 2); await erc20TWR.connect(deployer).mint(user.address, amount * 2); - await erc20.connect(user).approve(depositBoxERC20.address, amount * 2); - await erc20TWR.connect(user).approve(depositBoxERC20.address, amount * 2); + await erc20.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); + await erc20TWR.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20TWR.address, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20TWR.getAddress(), amount); - const balanceBefore = await deployer.getBalance(); + const balanceBefore = await ethers.provider.getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message, messageTWR], sign); - const balance = await deployer.getBalance(); + const balance = await ethers.provider.getBalance(deployer.address); balance.should.be.least(balanceBefore); balance.should.be.closeTo(balanceBefore, 10); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20.address, amount); - await depositBoxERC20.connect(user).depositERC20(schainName, erc20TWR.address, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await erc20TWR.getAddress(), amount); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 2, [message, messageTWR], sign); - expect(BigNumber.from(await depositBoxERC20.transferredAmount(schainHash, erc20.address)).toString()).to.be.equal(BigNumber.from(0).toString()); - expect(BigNumber.from(await depositBoxERC20.transferredAmount(schainHash, erc20TWR.address)).toString()).to.be.equal(BigNumber.from(0).toString()); + const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, await erc20.getAddress()); + expect(transferredAmount).to.be.equal(0); + const transferredAmountTWR = await depositBoxERC20.transferredAmount(schainHash, await erc20TWR.getAddress()); + expect(transferredAmountTWR).to.be.equal(0); (await erc20.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); (await erc20TWR.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); @@ -455,7 +468,7 @@ describe("DepositBoxERC20", () => { const bigAmount = 10; const timeDelay = 24 * 60 * 60; const arbitrageDuration = 30 * 24 * 60 * 60; - const ethDeposit = ethers.utils.parseEther("1"); + const ethDeposit = ethers.parseEther("1"); const randomSignature = { blsSignature: BlsSignature, counter: Counter, @@ -482,17 +495,17 @@ describe("DepositBoxERC20", () => { await token.mint(user.address, depositedAmount); await token2.mint(user.address, depositedAmount); - await token.connect(user).approve(depositBoxERC20.address, depositedAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, token.address, depositedAmount); + await token.connect(user).approve(await depositBoxERC20.getAddress(), depositedAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, await token.getAddress(), depositedAmount); - await token2.connect(user).approve(depositBoxERC20.address, depositedAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, token2.address, depositedAmount); + await token2.connect(user).approve(await depositBoxERC20.getAddress(), depositedAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, await token2.getAddress(), depositedAmount); await expect( - depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, token.address, bigAmount) + depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, await token.getAddress(), bigAmount) ).to.emit(depositBoxERC20, "BigTransferThresholdIsChanged") - .withArgs(schainHash, token.address, 0, bigAmount); - await depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, token2.address, bigAmount); + .withArgs(schainHash, await token.getAddress(), 0, bigAmount); + await depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, await token2.getAddress(), bigAmount); await expect( depositBoxERC20.connect(schainOwner).setBigTransferDelay(schainName, timeDelay) ).to.emit(depositBoxERC20, "BigTransferDelayIsChanged") @@ -509,15 +522,15 @@ describe("DepositBoxERC20", () => { const balanceBefore = await token.balanceOf(user.address); const message = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; await expect( messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], randomSignature) ).to.emit(depositBoxERC20, "TransferDelayed") - .withArgs(0, user.address, token.address, bigAmount); + .withArgs(0, user.address, await token.getAddress(), bigAmount); (await token.balanceOf(user.address)).should.be.equal(balanceBefore); @@ -530,31 +543,31 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(user).retrieve(); - (await token.balanceOf(user.address)).should.be.equal(balanceBefore.add(bigAmount)); + (await token.balanceOf(user.address)).should.be.equal(balanceBefore + BigInt(bigAmount)); }); it("should allow to perform arbitrage", async () => { const smallTransferOfToken1 = { - data: await messages.encodeTransferErc20Message(token.address, user.address, amount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, amount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; const bigTransferOfToken1 = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; const smallTransferOfToken2 = { - data: await messages.encodeTransferErc20Message(token2.address, user.address, amount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token2.getAddress(), user.address, amount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; const bigTransferOfToken2 = { - data: await messages.encodeTransferErc20Message(token2.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token2.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -578,18 +591,18 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(4 * bigAmount); - (await depositBoxERC20.getDelayedAmount(user.address, token2.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token2.getAddress())) .should.be.equal(bigAmount); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) .should.be.equal((await currentTime()) + timeDelay); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token2.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token2.getAddress())) .should.be.equal((await currentTime()) + timeDelay); // 2 small transfers of token 1 and 2 small transfers of token 2 must be processed without delay - (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore.add(2 * amount)); - (await token2.balanceOf(user.address)).should.be.equal(token2BalanceBefore.add(2 * amount)); + (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore + BigInt(2 * amount)); + (await token2.balanceOf(user.address)).should.be.equal(token2BalanceBefore + BigInt(2 * amount)); // #0 - big transfer of token 1 // #1 - big transfer of token 1 @@ -614,9 +627,9 @@ describe("DepositBoxERC20", () => { // transfer #2 and #3 must be unlocked await depositBoxERC20.retrieveFor(user.address); (await token.balanceOf(user.address)) - .should.be.equal(token1BalanceBefore.add(2 * amount + bigAmount)); + .should.be.equal(token1BalanceBefore + BigInt(2 * amount + bigAmount)); (await token2.balanceOf(user.address)) - .should.be.equal(token2BalanceBefore.add(2 * amount + bigAmount)); + .should.be.equal(token2BalanceBefore + BigInt(2 * amount + bigAmount)); await depositBoxERC20.rejectTransfer(suspicionsTransfers[0]) .should.be.rejectedWith("Sender is not an Schain owner"); @@ -631,18 +644,18 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(schainOwner).validateTransfer(suspicionsTransfers[1]) .should.be.rejectedWith("Arbitrage has to be active"); (await token.balanceOf(user.address)) - .should.be.equal(token1BalanceBefore.add(2 * amount + 2 * bigAmount)); + .should.be.equal(token1BalanceBefore + BigInt(2 * amount + 2 * bigAmount)); await skipTime(arbitrageDuration); await depositBoxERC20.connect(user).retrieve(); (await token.balanceOf(user.address)) - .should.be.equal(token1BalanceBefore.add(2 * amount + 3 * bigAmount)); + .should.be.equal(token1BalanceBefore + BigInt(2 * amount + 3 * bigAmount)); }); it("should not stuck after big amount of competed transfers", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -650,7 +663,7 @@ describe("DepositBoxERC20", () => { const amountOfCompetedTransfers = 15; // send `amountOfCompetedTransfers` + 1 big transfer - const batch = (await messageProxy.MESSAGES_LENGTH()).toNumber(); + const batch = Number(await messageProxy.MESSAGES_LENGTH()); const fullBatches = Math.floor((amountOfCompetedTransfers + 1) / batch); const rest = amountOfCompetedTransfers + 1 - fullBatches * batch; for (let i = 0; i < fullBatches; ++i) { @@ -677,35 +690,35 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(schainOwner).validateTransfer(completedTransfer); } - (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore.add(bigAmount * amountOfCompetedTransfers)); + (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore + BigInt(bigAmount * amountOfCompetedTransfers)); await skipTime(timeDelay); // first retrieve removes already completed transfers after an arbitrage from the queue await depositBoxERC20.retrieveFor(user.address); - (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore.add(bigAmount * amountOfCompetedTransfers)); + (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore + BigInt(bigAmount * amountOfCompetedTransfers)); // second retrieve withdraws the rest await depositBoxERC20.retrieveFor(user.address); - (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore.add(bigAmount * (amountOfCompetedTransfers + 1))); + (await token.balanceOf(user.address)).should.be.equal(token1BalanceBefore + BigInt(bigAmount * (amountOfCompetedTransfers + 1))); }); it("should not stuck if a token reverts transfer", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; const badToken = await (await ethers.getContractFactory("RevertableERC20")).deploy("Test", "TST"); await badToken.mint(user.address, bigAmount); - await badToken.connect(user).approve(depositBoxERC20.address, bigAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, badToken.address, bigAmount); + await badToken.connect(user).approve(await depositBoxERC20.getAddress(), bigAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, await badToken.getAddress(), bigAmount); const badTokenBigTransfer = { - data: await messages.encodeTransferErc20Message(badToken.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await badToken.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -724,7 +737,7 @@ describe("DepositBoxERC20", () => { depositBoxERC20.retrieveFor(user.address) ).to.emit(depositBoxERC20, "TransferSkipped") .withArgs(0); - (await token.balanceOf(user.address)).should.be.equal(balanceBefore.add(bigAmount)); + (await token.balanceOf(user.address)).should.be.equal(balanceBefore + BigInt(bigAmount)); }); it("should not allow to set too big delays", async () => { @@ -742,8 +755,8 @@ describe("DepositBoxERC20", () => { it("should disable delay for trusted receivers", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -778,14 +791,14 @@ describe("DepositBoxERC20", () => { ); (await token.balanceOf(user.address)).should.be.equal(bigAmount); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(bigAmount); }) it("should reduce delay", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -796,7 +809,7 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) .should.be.equal(await currentTime() + timeDelay); @@ -810,16 +823,16 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) .should.be.equal(await currentTime() + lowerDelay); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(2 * bigAmount); }); it("should process correctly in non linear order", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(token.address, user.address, bigAmount), - destinationContract: depositBoxERC20.address, + data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), + destinationContract: await depositBoxERC20.getAddress(), sender: deployer.address }; @@ -837,14 +850,14 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.escalate(0); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) .should.be.equal(lockedUntil); await skipTime(timeDelay); await depositBoxERC20.retrieveFor(user.address); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(bigAmount); await messageProxy.connect(nodeAddress).postIncomingMessages( @@ -857,15 +870,15 @@ describe("DepositBoxERC20", () => { ); lockedUntil = await currentTime() + timeDelay; - (await depositBoxERC20.getNextUnlockTimestamp(user.address, token.address)) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) .should.be.equal(lockedUntil); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(2 * bigAmount); await skipTime(timeDelay); await depositBoxERC20.retrieveFor(user.address); - (await depositBoxERC20.getDelayedAmount(user.address, token.address)) + (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) .should.be.equal(bigAmount); (await token.balanceOf(user.address)) .should.be.equal(2 * bigAmount); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index 25d971dce..926607858 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringFromHex, stringKeccak256, getBalance, getPublicKey } from "./utils/helper"; +import { stringFromHex, stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -55,15 +55,15 @@ import { deployERC721OnChain } from "./utils/deploy/erc721OnChain"; import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { assert, expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; -const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781") +const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -74,7 +74,7 @@ describe("DepositBoxERC721", () => { let user: SignerWithAddress; let user2: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let depositBoxERC721: DepositBoxERC721; let contractManager: ContractManager; @@ -89,13 +89,13 @@ describe("DepositBoxERC721", () => { before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - BigInt(ethers.parseEther("1"))}); }); beforeEach(async () => { @@ -105,7 +105,7 @@ describe("DepositBoxERC721", () => { depositBoxERC721 = await deployDepositBoxERC721(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -120,9 +120,9 @@ describe("DepositBoxERC721", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(depositBoxERC721.address); - await messageProxy.registerExtraContract(schainName, communityPool.address); - await messageProxy.registerExtraContract(schainName, linker.address); + await messageProxy.registerExtraContractForAll(await depositBoxERC721.getAddress()); + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, await linker.getAddress()); }); describe("tests with `ERC721`", async () => { @@ -147,14 +147,14 @@ describe("DepositBoxERC721", () => { // preparation const amount = 10; - await depositBoxERC721.connect(user).depositERC721(schainName, erc721.address, amount) + await depositBoxERC721.connect(user).depositERC721(schainName, await erc721.getAddress(), amount) .should.be.eventually.rejectedWith("Unconnected chain"); }); it("should rejected with `DepositBox was not approved for ERC721 token`", async () => { // preparation const error = "DepositBox was not approved for ERC721 token"; - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const tokenId = 10; // the wei should be MORE than (55000 * 1000000000) // GAS_AMOUNT_POST_MESSAGE * AVERAGE_TX_PRICE constants in DepositBox.sol @@ -172,7 +172,7 @@ describe("DepositBoxERC721", () => { it("should invoke `depositERC721` without mistakes", async () => { // preparation - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const tokenId = 10; const tokenId2 = 11; // the wei should be MORE than (55000 * 1000000000) @@ -182,8 +182,8 @@ describe("DepositBoxERC721", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(depositBoxERC721.address, tokenId); - await erc721OnChain.connect(deployer).approve(depositBoxERC721.address, tokenId2); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId2); // execution await depositBoxERC721 .connect(deployer) @@ -197,13 +197,13 @@ describe("DepositBoxERC721", () => { .depositERC721(schainName, contractHere, tokenId2)).wait(); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721.address); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721.address); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721.getAddress()); }); it("should invoke `depositERC721Direct` without mistakes", async () => { // preparation - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const to = user.address; const tokenId = 10; const tokenId2 = 11; @@ -214,8 +214,8 @@ describe("DepositBoxERC721", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(depositBoxERC721.address, tokenId); - await erc721OnChain.connect(deployer).approve(depositBoxERC721.address, tokenId2); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId2); // execution await depositBoxERC721 .connect(deployer) @@ -227,16 +227,16 @@ describe("DepositBoxERC721", () => { .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxERC721.address, deployer.address, data1); + .withArgs(schainHash, 0, await depositBoxERC721.getAddress(), deployer.address, data1); await depositBoxERC721 .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, depositBoxERC721.address, deployer.address, data2); + .withArgs(schainHash, 1, await depositBoxERC721.getAddress(), deployer.address, data2); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721.address); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721.address); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721.getAddress()); }); }); @@ -247,16 +247,16 @@ describe("DepositBoxERC721", () => { await linker .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); - await erc721OnChain.connect(deployer).approve(depositBoxERC721.address, tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); await depositBoxERC721.connect(user).disableWhitelist(schainName); await depositBoxERC721 .connect(deployer) - .depositERC721(schainName, erc721OnChain.address, tokenId); - await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC721(schainName, await erc721OnChain.getAddress(), tokenId); + await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); - await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId); + await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); + await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId); expect(await erc721OnChain.ownerOf(tokenId)).to.equal(user.address); }); @@ -264,13 +264,13 @@ describe("DepositBoxERC721", () => { const fakeERC721Contract = deployer.address; await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, fakeERC721Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC721.connect(deployer).addERC721TokenByOwner(schainName, erc721.address) + await depositBoxERC721.connect(deployer).addERC721TokenByOwner(schainName, await erc721.getAddress()) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, erc721.address); - await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, erc721.address).should.be.eventually.rejectedWith("ERC721 Token was already added"); - expect(await depositBoxERC721.getSchainToERC721(schainName, erc721.address)).to.be.equal(true); - expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(erc721.address); + await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()); + await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()).should.be.eventually.rejectedWith("ERC721 Token was already added"); + expect(await depositBoxERC721.getSchainToERC721(schainName, await erc721.getAddress())).to.be.equal(true); + expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(await erc721.getAddress()); expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC721.getSchainToAllERC721Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC721.getSchainToAllERC721(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -282,7 +282,7 @@ describe("DepositBoxERC721", () => { let erc721: ERC721OnChain; let weiAmount: string; let sign: { - blsSignature: [BigNumber, BigNumber], + blsSignature: [BigNumberish, BigNumberish], counter: number, hashA: string, hashB: string, @@ -317,13 +317,13 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721Message(erc721.address, to, tokenId), - destinationContract: depositBoxERC721.address, + data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), + destinationContract: await depositBoxERC721.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); - await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721.address, tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721.getAddress(), tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -342,20 +342,17 @@ describe("DepositBoxERC721", () => { const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc721Message(user2.address, to, tokenId), - destinationContract: depositBoxERC721.address, + destinationContract: await depositBoxERC721.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); - await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721.address, tokenId); - - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[0].args?.message), "Given address is not a contract"); - } else { - assert(false, "No events were emitted"); - } + await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721.getAddress(), tokenId); + + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -364,20 +361,17 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const messageWithWrongTokenAddress = { - data: await messages.encodeTransferErc721Message(erc721.address, to, tokenId), - destinationContract: depositBoxERC721.address, + data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), + destinationContract: await depositBoxERC721.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[0].args?.message), "Incorrect tokenId"); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { @@ -388,23 +382,23 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721Message(erc721.address, to, tokenId), - destinationContract: depositBoxERC721.address, + data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), + destinationContract: await depositBoxERC721.getAddress(), sender: senderFromSchain }; await erc721.mint(deployer.address, tokenId); - await erc721.approve(depositBoxERC721.address, tokenId); + await erc721.approve(await depositBoxERC721.getAddress(), tokenId); await depositBoxERC721 - .depositERC721(schainName, erc721.address, tokenId); + .depositERC721(schainName, await erc721.getAddress(), tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); const balance = await getBalance(deployer.address); balance.should.not.be.lessThan(balanceBefore); balance.should.be.almost(balanceBefore); - expect(await depositBoxERC721.transferredAmount(erc721.address, tokenId)).to.be.equal(zeroHash); + expect(await depositBoxERC721.transferredAmount(await erc721.getAddress(), tokenId)).to.be.equal(zeroHash); (await erc721.ownerOf(tokenId)).should.be.equal(user.address); }); diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index 3d9d67463..3caa00978 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringFromHex, stringKeccak256, getBalance, getPublicKey } from "./utils/helper"; +import { stringFromHex, stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -55,15 +55,15 @@ import { deployERC721OnChain } from "./utils/deploy/erc721OnChain"; import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { assert, expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; -const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781") +const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -74,7 +74,7 @@ describe("DepositBoxERC721WithMetadata", () => { let user: SignerWithAddress; let user2: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let depositBoxERC721WithMetadata: DepositBoxERC721WithMetadata; let contractManager: ContractManager; @@ -89,13 +89,13 @@ describe("DepositBoxERC721WithMetadata", () => { before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - BigInt(ethers.parseEther("1"))}); }); beforeEach(async () => { @@ -105,7 +105,7 @@ describe("DepositBoxERC721WithMetadata", () => { depositBoxERC721WithMetadata = await deployDepositBoxERC721WithMetadata(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -120,9 +120,9 @@ describe("DepositBoxERC721WithMetadata", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(depositBoxERC721WithMetadata.address); - await messageProxy.registerExtraContract(schainName, communityPool.address); - await messageProxy.registerExtraContract(schainName, linker.address); + await messageProxy.registerExtraContractForAll(await depositBoxERC721WithMetadata.getAddress()); + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, await linker.getAddress()); }); describe("tests with `ERC721`", async () => { @@ -151,14 +151,14 @@ describe("DepositBoxERC721WithMetadata", () => { // preparation const amount = 10; - await depositBoxERC721WithMetadata.connect(user).depositERC721(schainName, erc721.address, amount) + await depositBoxERC721WithMetadata.connect(user).depositERC721(schainName, await erc721.getAddress(), amount) .should.be.eventually.rejectedWith("Unconnected chain"); }); it("should rejected with `DepositBox was not approved for ERC721 token`", async () => { // preparation const error = "DepositBox was not approved for ERC721 token"; - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const tokenId = 10; // the wei should be MORE than (55000 * 1000000000) // GAS_AMOUNT_POST_MESSAGE * AVERAGE_TX_PRICE constants in DepositBox.sol @@ -176,7 +176,7 @@ describe("DepositBoxERC721WithMetadata", () => { it("should invoke `depositERC721` without mistakes", async () => { // preparation - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const tokenId = 10; const tokenId2 = 11; // the wei should be MORE than (55000 * 1000000000) @@ -186,8 +186,8 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721WithMetadata` - await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata.address, tokenId); - await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata.address, tokenId2); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId2); // execution await depositBoxERC721WithMetadata .connect(deployer) @@ -201,13 +201,13 @@ describe("DepositBoxERC721WithMetadata", () => { .depositERC721(schainName, contractHere, tokenId2)).wait(); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721WithMetadata.address); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721WithMetadata.address); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721WithMetadata.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721WithMetadata.getAddress()); }); it("should invoke `depositERC721Direct` without mistakes", async () => { // preparation - const contractHere = erc721OnChain.address; + const contractHere = await erc721OnChain.getAddress(); const to = user.address; const tokenId = 10; const tokenId2 = 11; @@ -218,8 +218,8 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata.address, tokenId); - await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata.address, tokenId2); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId2); // execution await depositBoxERC721WithMetadata .connect(deployer) @@ -231,16 +231,16 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxERC721WithMetadata.address, deployer.address, data1); + .withArgs(schainHash, 0, await depositBoxERC721WithMetadata.getAddress(), deployer.address, data1); await depositBoxERC721WithMetadata .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, depositBoxERC721WithMetadata.address, deployer.address, data2); + .withArgs(schainHash, 1, await depositBoxERC721WithMetadata.getAddress(), deployer.address, data2); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721WithMetadata.address); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721WithMetadata.address); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721WithMetadata.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721WithMetadata.getAddress()); }); }); @@ -251,16 +251,16 @@ describe("DepositBoxERC721WithMetadata", () => { await linker .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); - await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata.address, tokenId); + await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); await depositBoxERC721WithMetadata.connect(user).disableWhitelist(schainName); await depositBoxERC721WithMetadata .connect(deployer) - .depositERC721(schainName, erc721OnChain.address, tokenId); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC721(schainName, await erc721OnChain.getAddress(), tokenId); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain.address, user.address, tokenId); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId); expect(await erc721OnChain.ownerOf(tokenId)).to.equal(user.address); }); @@ -268,13 +268,13 @@ describe("DepositBoxERC721WithMetadata", () => { const fakeERC721Contract = deployer.address; await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, fakeERC721Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC721WithMetadata.connect(deployer).addERC721TokenByOwner(schainName, erc721.address) + await depositBoxERC721WithMetadata.connect(deployer).addERC721TokenByOwner(schainName, await erc721.getAddress()) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, erc721.address); - await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, erc721.address).should.be.eventually.rejectedWith("ERC721 Token was already added"); - expect(await depositBoxERC721WithMetadata.getSchainToERC721(schainName, erc721.address)).to.be.equal(true); - expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(erc721.address); + await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()); + await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()).should.be.eventually.rejectedWith("ERC721 Token was already added"); + expect(await depositBoxERC721WithMetadata.getSchainToERC721(schainName, await erc721.getAddress())).to.be.equal(true); + expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(await erc721.getAddress()); expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC721WithMetadata.getSchainToAllERC721Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -286,7 +286,7 @@ describe("DepositBoxERC721WithMetadata", () => { let erc721: ERC721OnChain; let weiAmount: string; let sign: { - blsSignature: [BigNumber, BigNumber], + blsSignature: [BigNumberish, BigNumberish], counter: number, hashA: string, hashB: string, @@ -322,14 +322,14 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721MessageWithMetadata(erc721.address, to, tokenId, tokenURI), - destinationContract: depositBoxERC721WithMetadata.address, + data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), + destinationContract: await depositBoxERC721WithMetadata.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721WithMetadata.address, tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721WithMetadata.getAddress(), tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -350,21 +350,18 @@ describe("DepositBoxERC721WithMetadata", () => { const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc721MessageWithMetadata(user2.address, to, tokenId, tokenURI), - destinationContract: depositBoxERC721WithMetadata.address, + destinationContract: await depositBoxERC721WithMetadata.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721WithMetadata.address, tokenId); - - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[0].args?.message), "Given address is not a contract"); - } else { - assert(false, "No events were emitted"); - } + await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721WithMetadata.getAddress(), tokenId); + + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -374,21 +371,18 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const messageWithWrongTokenAddress = { - data: await messages.encodeTransferErc721MessageWithMetadata(erc721.address, to, tokenId, tokenURI), - destinationContract: depositBoxERC721WithMetadata.address, + data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), + destinationContract: await depositBoxERC721WithMetadata.getAddress(), sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(stringFromHex(res.events[0].args?.message), "Incorrect tokenId"); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { @@ -400,24 +394,24 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721MessageWithMetadata(erc721.address, to, tokenId, tokenURI), - destinationContract: depositBoxERC721WithMetadata.address, + data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), + destinationContract: await depositBoxERC721WithMetadata.getAddress(), sender: senderFromSchain }; await erc721.mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.approve(depositBoxERC721WithMetadata.address, tokenId); + await erc721.approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); await depositBoxERC721WithMetadata - .depositERC721(schainName, erc721.address, tokenId); + .depositERC721(schainName, await erc721.getAddress(), tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); const balance = await getBalance(deployer.address); balance.should.not.be.lessThan(balanceBefore); balance.should.be.almost(balanceBefore); - expect(await depositBoxERC721WithMetadata.transferredAmount(erc721.address, tokenId)).to.be.equal(zeroHash); + expect(await depositBoxERC721WithMetadata.transferredAmount(await erc721.getAddress(), tokenId)).to.be.equal(zeroHash); (await erc721.ownerOf(tokenId)).should.be.equal(user.address); (await erc721.tokenURI(tokenId)).should.be.equal(tokenURI); diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 617d9c740..4912e8e3e 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -33,7 +33,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringKeccak256, getBalance, getPublicKey } from "./utils/helper"; +import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -54,30 +54,30 @@ import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { deployFallbackEthTester } from "./utils/deploy/test/fallbackEthTester"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, ContractTransaction, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, ContractTransaction, ContractTransactionResponse, HDNodeWallet, Wallet } from "ethers"; import { assert, expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; -const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781") +const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; const Counter = 0; -const weiTolerance = ethers.utils.parseEther("0.002").toNumber(); +const weiTolerance = Number(ethers.parseEther("0.002")); -async function reimbursed(transaction: ContractTransaction, operation?: string) { +async function reimbursed(transaction: ContractTransactionResponse, operation?: string) { const receipt = await transaction.wait(); const sender = transaction.from; - const balanceBefore = await ethers.provider.getBalance(sender, receipt.blockNumber - 1); - const balanceAfter = await ethers.provider.getBalance(sender, receipt.blockNumber); - if (balanceAfter.lt(balanceBefore)) { - const shortageEth = balanceBefore.sub(balanceAfter); - const shortageGas = shortageEth.div(receipt.effectiveGasPrice); + const balanceBefore = await ethers.provider.getBalance(sender, (receipt?.blockNumber ?? 1) - 1); + const balanceAfter = await ethers.provider.getBalance(sender, receipt?.blockNumber); + if (balanceAfter < balanceBefore) { + const shortageEth = balanceBefore - balanceAfter; + const shortageGas = shortageEth / transaction.gasPrice; console.log("Reimbursement failed.") console.log(`${shortageGas.toString()} gas units was not reimbursed`); @@ -95,7 +95,7 @@ describe("DepositBoxEth", () => { let user: SignerWithAddress; let user2: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let depositBoxEth: DepositBoxEth; let contractManager: ContractManager; @@ -110,13 +110,13 @@ describe("DepositBoxEth", () => { before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - BigInt(ethers.parseEther("1"))}); }); beforeEach(async () => { @@ -126,7 +126,7 @@ describe("DepositBoxEth", () => { depositBoxEth = await deployDepositBoxEth(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -141,9 +141,9 @@ describe("DepositBoxEth", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(depositBoxEth.address); - await messageProxy.registerExtraContract(schainName, communityPool.address); - await messageProxy.registerExtraContract(schainName, linker.address); + await messageProxy.registerExtraContractForAll(await depositBoxEth.getAddress()); + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, await linker.getAddress()); }); describe("tests for `deposit` function", async () => { @@ -184,7 +184,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - const lockAndDataBalance = await ethers.provider.getBalance(depositBoxEth.address); + const lockAndDataBalance = await ethers.provider.getBalance(await depositBoxEth.getAddress()); // expectation expect(lockAndDataBalance).to.equal(wei); }); @@ -206,9 +206,9 @@ describe("DepositBoxEth", () => { .connect(deployer) .depositDirect(schainName, user.address, { value: wei }) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, depositBoxEth.address, deployer.address, data); + .withArgs(schainHash, 0, await depositBoxEth.getAddress(), deployer.address, data); - const lockAndDataBalance = await ethers.provider.getBalance(depositBoxEth.address); + const lockAndDataBalance = await ethers.provider.getBalance(await depositBoxEth.getAddress()); // expectation expect(lockAndDataBalance).to.equal(wei); }); @@ -217,7 +217,7 @@ describe("DepositBoxEth", () => { // preparation const error = "Use deposit function"; // execution/expectation - await deployer.sendTransaction({to: depositBoxEth.address, value: ethers.utils.parseEther("1") }) + await deployer.sendTransaction({to: await depositBoxEth.getAddress(), value: ethers.parseEther("1") }) .should.be.eventually.rejectedWith(error); }); @@ -238,7 +238,8 @@ describe("DepositBoxEth", () => { await depositBoxEth.connect(user).getFunds(schainName, user.address, wei).should.be.eventually.rejectedWith("Sender is not an Schain owner"); const userBalanceBefore = await ethers.provider.getBalance(user.address); await depositBoxEth.connect(user2).getFunds(schainName, user.address, wei); - expect(BigNumber.from(await ethers.provider.getBalance(user.address)).toString()).to.equal(BigNumber.from(userBalanceBefore).add(BigNumber.from(wei)).toString()); + const userBalance = await ethers.provider.getBalance(user.address); + expect(userBalance).to.equal(userBalanceBefore + BigInt(wei)); }); }); @@ -275,7 +276,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -289,16 +290,10 @@ describe("DepositBoxEth", () => { .rechargeUserWallet(schainName, user.address, { value: wei }); // execution - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)).wait(); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(res.events[0].args?.msgCounter.toString(), "0"); - const messageError = res.events[0].args?.message.toString(); - assert.equal(Buffer.from(messageError.slice(2), 'hex').toString(), error); - } else { - assert(false, "No events were emitted"); - } - // assert.equal(res.logs[0].args.message, "PostMessageError"); + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex(error)); }); it("should rejected with message `Not enough money to finish this transaction` when " @@ -319,7 +314,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -333,16 +328,10 @@ describe("DepositBoxEth", () => { .connect(user) .rechargeUserWallet(schainName, user.address, { value: wei }); // execution - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)).wait(); - - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(res.events[0].args?.msgCounter.toString(), "0"); - const messageError = res.events[0].args?.message.toString(); - assert.equal(Buffer.from(messageError.slice(2), 'hex').toString(), error); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex(error)); }); it("should rejected with message `Not enough money to finish this transaction`", async () => { @@ -371,23 +360,17 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` // to avoid `Incorrect sender` error // await lockAndDataForMainnet.setContract("MessageProxy", deployer); // execution - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)).wait(); - - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(res.events[0].args?.msgCounter.toString(), "0"); - const messageError = res.events[0].args?.message.toString(); - assert.equal(Buffer.from(messageError.slice(2), 'hex').toString(), error); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex(error)); }); it("should rejected with message `null`", async () => { @@ -414,7 +397,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain, }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -425,15 +408,10 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); // execution - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)).wait(); - - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(res.events[0].args?.msgCounter.toString(), "0"); - assert.equal(res.events[0].args?.message, "0x"); - } else { - assert(false, "No events were emitted"); - } + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(0), stringToHex("")); }); it("should transfer eth", async () => { @@ -453,7 +431,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain, }; @@ -472,7 +450,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - expect(BigNumber.from(await depositBoxEth.transferredAmount(schainHash)).toString()).to.be.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(wei); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -502,7 +480,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain, }; @@ -524,7 +502,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - expect(BigNumber.from(await depositBoxEth.transferredAmount(schainHash)).toString()).to.be.equal(BigNumber.from(wei).mul(2).toString()); + expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * BigInt(2)); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -532,12 +510,12 @@ describe("DepositBoxEth", () => { balance.should.not.be.lessThan(balanceBefore); balance.should.be.almost(balanceBefore); - expect(BigNumber.from(await depositBoxEth.approveTransfers(user.address)).toString()).to.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.approveTransfers(user.address)).to.equal(BigInt(wei)); await depositBoxEth.connect(user2).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); - expect(BigNumber.from(await depositBoxEth.approveTransfers(user.address)).toString()).to.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.approveTransfers(user.address)).to.equal(wei); expect(await depositBoxEth.activeEthTransfers(schainHash)).to.be.equal(false); await depositBoxEth.connect(user2).enableActiveEthTransfers(schainName).should.be.rejectedWith("Sender is not an Schain owner"); @@ -550,11 +528,11 @@ describe("DepositBoxEth", () => { const userBalanceBefore = await ethers.provider.getBalance(user.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 1, [message], sign); - expect(BigNumber.from(await ethers.provider.getBalance(user.address)).toString()).to.equal(BigNumber.from(userBalanceBefore).add(BigNumber.from(wei)).toString()); + expect(await ethers.provider.getBalance(user.address)).to.equal(userBalanceBefore + BigInt(wei)); - expect(BigNumber.from(await depositBoxEth.approveTransfers(user.address)).toString()).to.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.approveTransfers(user.address)).to.equal(wei); await depositBoxEth.connect(user).getMyEth(); - expect(BigNumber.from(await depositBoxEth.approveTransfers(user.address)).toString()).to.equal(BigNumber.from(0).toString()); + expect(await depositBoxEth.approveTransfers(user.address)).to.equal("0"); await depositBoxEth.connect(user).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); }); @@ -565,7 +543,7 @@ describe("DepositBoxEth", () => { const wei = "30000000000000000"; const fallbackEthTester = await deployFallbackEthTester(depositBoxEth, communityPool, schainName); - const bytesData = await messages.encodeTransferEthMessage(fallbackEthTester.address, wei); + const bytesData = await messages.encodeTransferEthMessage(await fallbackEthTester.getAddress(), wei); await setCommonPublicKey(contractManager, schainName); @@ -578,7 +556,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: depositBoxEth.address, + destinationContract: await depositBoxEth.getAddress(), sender: senderFromSchain, }; @@ -600,16 +578,16 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - expect(BigNumber.from(await depositBoxEth.transferredAmount(schainHash)).toString()).to.be.equal(BigNumber.from(wei).mul(2).toString()); + expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * BigInt(2)); await reimbursed(await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)); - expect(BigNumber.from(await depositBoxEth.approveTransfers(fallbackEthTester.address)).toString()).to.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); await depositBoxEth.connect(user2).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); - expect(BigNumber.from(await depositBoxEth.approveTransfers(fallbackEthTester.address)).toString()).to.equal(BigNumber.from(wei).toString()); + expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); expect(await depositBoxEth.activeEthTransfers(schainHash)).to.be.equal(false); await depositBoxEth.connect(user2).enableActiveEthTransfers(schainName).should.be.rejectedWith("Sender is not an Schain owner"); @@ -619,23 +597,18 @@ describe("DepositBoxEth", () => { await depositBoxEth.connect(deployer).enableActiveEthTransfers(schainName).should.be.eventually.rejectedWith("Active eth transfers enabled"); expect(await depositBoxEth.activeEthTransfers(schainHash)).to.be.equal(true); - await ethers.provider.getBalance(fallbackEthTester.address); + await ethers.provider.getBalance(await fallbackEthTester.getAddress()); - const res = await (await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 1, [message], sign)).wait(); + const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 1, [message], sign); - if (res.events) { - assert.equal(res.events[0].event, "PostMessageError"); - assert.equal(res.events[0].args?.msgCounter.toString(), "1"); - const messageError = res.events[0].args?.message.toString(); - const error = "Address: unable to send value, recipient may have reverted"; - assert.equal(Buffer.from(messageError.slice(2), 'hex').toString(), error); - } else { - assert(false, "No events were emitted"); - } + await expect(tx) + .to.emit(messageProxy, "PostMessageError") + .withArgs(BigInt(1), stringToHex("Address: unable to send value, recipient may have reverted")); - expect(BigNumber.from(await depositBoxEth.approveTransfers(fallbackEthTester.address)).toString()).to.equal(BigNumber.from(wei).toString()); + + expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); await fallbackEthTester.connect(user).getMyEth(); - expect(BigNumber.from(await depositBoxEth.approveTransfers(fallbackEthTester.address)).toString()).to.equal(BigNumber.from(0).toString()); + expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal("0"); await fallbackEthTester.connect(user).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); }); From 0ce05b9bf6eb54a15fec2d9804a72ede4be3822d Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:49:05 +0000 Subject: [PATCH 05/45] Refactor TokenManagers --- test/TokenManagerERC1155.ts | 1104 ++++++++++++------------ test/TokenManagerERC20.ts | 758 ++++++++-------- test/TokenManagerERC721.ts | 654 +++++++------- test/TokenManagerERC721WithMetadata.ts | 724 ++++++++-------- test/TokenManagerEth.ts | 58 +- test/TokenManagerLinker.ts | 80 +- 6 files changed, 1687 insertions(+), 1691 deletions(-) diff --git a/test/TokenManagerERC1155.ts b/test/TokenManagerERC1155.ts index 8c72b7d6d..95958886d 100644 --- a/test/TokenManagerERC1155.ts +++ b/test/TokenManagerERC1155.ts @@ -48,8 +48,8 @@ import { deployMessages } from "./utils/deploy/messages"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; @@ -86,23 +86,23 @@ describe("TokenManagerERC1155", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = messages.address; - fakeCommunityPool = messages.address; + fakeDepositBox = await messages.getAddress(); + fakeCommunityPool = await messages.getAddress(); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); tokenManagerERC1155 = await deployTokenManagerERC1155( schainName, - messageProxyForSchain.address, + await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox ); - await tokenManagerLinker.registerTokenManager(tokenManagerERC1155.address); + await tokenManagerLinker.registerTokenManager(await tokenManagerERC1155.getAddress()); await tokenManagerERC1155.grantRole(await tokenManagerERC1155.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC1155.grantRole(await tokenManagerERC1155.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); @@ -114,16 +114,16 @@ describe("TokenManagerERC1155", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC1155.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC1155.getAddress()); }); it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC1155.depositBox()).to.equal(messages.address); + expect(await tokenManagerERC1155.depositBox()).to.equal(await messages.getAddress()); await tokenManagerERC1155.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC1155.changeDepositBoxAddress(newDepositBox); @@ -132,61 +132,57 @@ describe("TokenManagerERC1155", () => { it("should successfully call exitToMainERC1155", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC1155.connect(user).exitToMainERC1155(token.address, id, amount) + await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenManagerERC1155.connect(user).exitToMainERC1155(token.address, id, amount) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenClone.connect(deployer).mint(user.address, id, amount, "0x"); - await tokenManagerERC1155.connect(user).exitToMainERC1155(token.address, id, amount) + await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenClone.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); - await tokenManagerERC1155.connect(user).exitToMainERC1155(token.address, id, amount); + await tokenClone.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should successfully call exitToMainERC1155Batch", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token.address, ids, amounts) + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token.address, ids, amounts) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenClone.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token.address, ids, amounts) + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenClone.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token.address, ids, amounts); + await tokenClone.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should successfully call addERC1155TokenByOwner", async () => { - await tokenManagerERC1155.connect(user).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address) + await tokenManagerERC1155.connect(user).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, deployer.address) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token2.address, tokenClone.address) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone2.address) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -206,13 +202,13 @@ describe("TokenManagerERC1155", () => { erc1155OnTargetChain = await deployERC1155OnChain("NewToke1n"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2.address, newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), tokenManagerERC11552.address); - await tokenManagerLinker2.registerTokenManager(tokenManagerERC11552.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC11552.address); + communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), await tokenManagerERC11552.getAddress()); + await tokenManagerLinker2.registerTokenManager(await tokenManagerERC11552.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC11552.getAddress()); }); it("should invoke `transferToSchainERC1155` without mistakes", async () => { @@ -221,29 +217,28 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should reject `transferToSchainERC1155` when executing earlier then allowed", async () => { @@ -252,32 +247,32 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, 5, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, 1) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(1)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); @@ -285,52 +280,52 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(90); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(20); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(3)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await skipTime(110); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, 1); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(5)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC1155` and receive tokens without mistakes", async () => { @@ -339,27 +334,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -369,25 +364,26 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); - const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const targetErc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); }); @@ -397,27 +393,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -427,25 +423,26 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); - const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const targetErc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); const amount2 = 77; @@ -453,20 +450,20 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountSum = 81; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); }); @@ -476,27 +473,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -506,24 +503,29 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerERC11552 + .connect(schainOwner) + .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerERC11552 + .connect(schainOwner) + .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); const amount2 = 77; @@ -531,20 +533,20 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountSum = 81; - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); }); @@ -554,27 +556,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -584,57 +586,56 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); }); @@ -644,27 +645,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -674,51 +675,52 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552 + .connect(schainOwner) + .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); }); @@ -729,27 +731,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -759,73 +761,74 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); const amount2 = 77; @@ -833,51 +836,51 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountSum = 81; - expect((await targetErc1155OnChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); }); @@ -887,27 +890,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -917,68 +920,67 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); const amount2 = 77; @@ -986,51 +988,51 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountSum = 81; - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount2); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount2); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount2 ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); }); @@ -1040,17 +1042,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -1060,49 +1062,50 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); const newSchainNameZ = "NewChainZ"; const erc1155OnTargetZChain = await deployERC1155OnChain("NewTokenZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ.address, newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ.address, tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC1155Z = await deployTokenManagerERC1155(newSchainNameZ, messageProxyForSchainZ.address, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), tokenManagerERC1155Z.address); - await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC1155Z.address); + const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC1155Z = await deployTokenManagerERC1155( + newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox + ); + await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), await tokenManagerERC1155Z.getAddress()); + await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC1155Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC11552.addTokenManager(newSchainNameZ, tokenManagerERC1155Z.address); + await tokenManagerERC11552.addTokenManager(newSchainNameZ, await tokenManagerERC1155Z.getAddress()); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainNameZ, erc1155OnOriginChain.address, id, amount) + .transferToSchainERC1155(newSchainNameZ, await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainNameZ, erc1155OnTargetChain.address, id, amount) + .transferToSchainERC1155(newSchainNameZ, await erc1155OnTargetChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); @@ -1112,17 +1115,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount, @@ -1132,61 +1135,60 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - expect((await erc1155OnTargetChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(communityLocker2.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155(erc1155OnOriginChain.address, id, amount) + .exitToMainERC1155(await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155(erc1155OnTargetChain.address, id, amount) + .exitToMainERC1155(await erc1155OnTargetChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, erc1155OnOriginChain.address, id, amount); + .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); data = await messages.encodeTransferErc1155Message( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); - expect((await erc1155OnOriginChain.functions.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); + expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155(erc1155OnOriginChain.address, id, amount) + .exitToMainERC1155(await erc1155OnOriginChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155(erc1155OnTargetChain.address, id, amount) + .exitToMainERC1155(await erc1155OnTargetChain.getAddress(), id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); }); @@ -1209,13 +1211,13 @@ describe("TokenManagerERC1155", () => { erc1155OnTargetChain = await deployERC1155OnChain("NewToke1n"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2.address, newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), tokenManagerERC11552.address); - await tokenManagerLinker2.registerTokenManager(tokenManagerERC11552.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC11552.address); + communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), await tokenManagerERC11552.getAddress()); + await tokenManagerLinker2.registerTokenManager(await tokenManagerERC11552.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC11552.getAddress()); }); it("should invoke `transferToSchainERC1155` without mistakes", async () => { @@ -1224,29 +1226,28 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should reject `transferToSchainERC1155` when executing earlier then allowed", async () => { @@ -1255,32 +1256,32 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, [5, 5, 5, 5], "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(1)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); @@ -1288,52 +1289,52 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(90); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(20); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(3)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await skipTime(110); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(5)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC1155` and receive tokens without mistakes", async () => { @@ -1342,27 +1343,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1372,29 +1373,28 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1406,27 +1406,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1436,29 +1436,28 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1468,23 +1467,23 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountsSum = [81, 81, 81, 81]; balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); @@ -1496,27 +1495,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1526,27 +1525,26 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()).should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); let balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1556,23 +1554,23 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountsSum = [81, 81, 81, 81]; balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); @@ -1584,27 +1582,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1614,66 +1612,67 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1685,27 +1684,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1715,55 +1714,54 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); const balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1776,27 +1774,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1806,88 +1804,89 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain.address); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -1897,65 +1896,65 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountsSum = [81, 81, 81, 81]; balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); - await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); @@ -1967,27 +1966,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -1997,77 +1996,76 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); let balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -2077,65 +2075,65 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const amountsSum = [81, 81, 81, 81]; balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts2); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts2 ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amountsSum); @@ -2147,17 +2145,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -2167,24 +2165,23 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); const balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); @@ -2193,28 +2190,28 @@ describe("TokenManagerERC1155", () => { const erc1155OnTargetZChain = await deployERC1155OnChain("NewTokenZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ.address, newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ.address, tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC1155Z = await deployTokenManagerERC1155(newSchainNameZ, messageProxyForSchainZ.address, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), tokenManagerERC1155Z.address); - await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC1155Z.address); + const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC1155Z = await deployTokenManagerERC1155(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), await tokenManagerERC1155Z.getAddress()); + await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC1155Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC11552.addTokenManager(newSchainNameZ, tokenManagerERC1155Z.address); + await tokenManagerERC11552.addTokenManager(newSchainNameZ, await tokenManagerERC1155Z.getAddress()); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainNameZ, erc1155OnOriginChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainNameZ, await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainNameZ, erc1155OnTargetChain.address, ids, amounts) + .transferToSchainERC1155Batch(newSchainNameZ, await erc1155OnTargetChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); @@ -2224,17 +2221,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155.address, true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552.address); + await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts, @@ -2244,71 +2241,70 @@ describe("TokenManagerERC1155", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155.address); + await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain.address, erc1155OnTargetChain.address); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC11552.address, schainId, tokenManagerERC1155.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); let balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(communityLocker2.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); - await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552.address, true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155Batch(erc1155OnOriginChain.address, ids, amounts) + .exitToMainERC1155Batch(await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155Batch(erc1155OnTargetChain.address, ids, amounts) + .exitToMainERC1155Batch(await erc1155OnTargetChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain.address, ids, amounts); + .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - erc1155OnOriginChain.address, + await erc1155OnOriginChain.getAddress(), user.address, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, newSchainId, tokenManagerERC11552.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155Batch(erc1155OnOriginChain.address, ids, amounts) + .exitToMainERC1155Batch(await erc1155OnOriginChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155Batch(erc1155OnTargetChain.address, ids, amounts) + .exitToMainERC1155Batch(await erc1155OnTargetChain.getAddress(), ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); }); @@ -2320,7 +2316,7 @@ describe("TokenManagerERC1155", () => { it("should transfer ERC1155 token through `postMessage` function with token info", async () => { // preparation const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - token.address, + await token.getAddress(), to, id, amount, @@ -2329,38 +2325,38 @@ describe("TokenManagerERC1155", () => { } ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC1155.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect(BigNumber.from((await erc1155OnChain.functions.balanceOf(to, id))[0]).toNumber()).to.be.equal(amount); + expect(await erc1155OnChain.balanceOf(to, id)).to.be.equal(amount); }); it("should transfer ERC1155 token on schain", async () => { // preparation - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC1155.address); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC1155.getAddress()); const data = await messages.encodeTransferErc1155Message( - token.address, + await token.getAddress(), to, id, amount ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; - expect(BigNumber.from((await erc1155OnChain.functions.balanceOf(to, id))[0]).toNumber()).to.be.equal(amount); + expect(await erc1155OnChain.balanceOf(to, id)).to.be.equal(amount); }); it("should transfer ERC1155 token batch through `postMessage` function with token info", async () => { // preparation const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - token.address, + await token.getAddress(), to, ids, amounts, @@ -2369,41 +2365,41 @@ describe("TokenManagerERC1155", () => { } ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC1155.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token.address); - const erc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); + const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await erc1155OnChain.balanceOfBatch([to, to, to, to], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); }); it("should transfer ERC1155 token batch on schain", async () => { // preparation - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC1155.address); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC1155.getAddress()); const data = await messages.encodeTransferErc1155BatchMessage( - token.address, + await token.getAddress(), to, ids, amounts ); - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await erc1155OnChain.balanceOfBatch([to, to, to, to], ids); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal(amounts); }); @@ -2413,7 +2409,7 @@ describe("TokenManagerERC1155", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(tokenManagerERC1155.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerERC20.ts b/test/TokenManagerERC20.ts index dcf55fa3d..dcf2b160e 100644 --- a/test/TokenManagerERC20.ts +++ b/test/TokenManagerERC20.ts @@ -47,8 +47,8 @@ import { deployMessages } from "./utils/deploy/messages"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish } from "ethers"; import { assert, expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; @@ -84,21 +84,21 @@ describe("TokenManagerERC20", () => { erc20OnChain = await deployERC20OnChain("ERC20OnChain", "ERC20"); erc20OnMainnet = await deployERC20OnChain("SKALE", "SKL"); messages = await deployMessages(); - fakeDepositBox = messages.address; - fakeCommunityPool = messages.address; + fakeDepositBox = await messages.getAddress(); + fakeCommunityPool = await messages.getAddress(); const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); - tokenManagerErc20 = await deployTokenManagerERC20(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, fakeDepositBox); - await erc20OnChain.connect(deployer).grantRole(await erc20OnChain.MINTER_ROLE(), tokenManagerErc20.address); - await tokenManagerLinker.registerTokenManager(tokenManagerErc20.address); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + tokenManagerErc20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox); + await erc20OnChain.connect(deployer).grantRole(await erc20OnChain.MINTER_ROLE(), await tokenManagerErc20.getAddress()); + await tokenManagerLinker.registerTokenManager(await tokenManagerErc20.getAddress()); await tokenManagerErc20.connect(deployer).grantRole(await tokenManagerErc20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerErc20.connect(deployer).grantRole(await tokenManagerErc20.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -130,49 +130,49 @@ describe("TokenManagerERC20", () => { const symbol = "D2"; const totalSupply = 1e9; - const data = await messages.encodeTransferErc20AndTokenInfoMessage(erc20OnMainnet.address, to, amount, totalSupply, { name, symbol, decimals: 18 }); - const data2 = await messages.encodeTransferErc20AndTokenInfoMessage(erc20OnMainnet.address, to, amount, totalSupply, { name, symbol, decimals: 18 }); + const data = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20OnMainnet.getAddress(), to, amount, totalSupply, { name, symbol, decimals: 18 }); + const data2 = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20OnMainnet.getAddress(), to, amount, totalSupply, { name, symbol, decimals: 18 }); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); // execution - const res = await (await messageProxyForSchain.postMessage(tokenManagerErc20.address, mainnetId, fakeDepositBox, data)).wait(); + const receipt = await (await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data)).wait(); - let newAddress: string; // TODO: use waffle - if (!res.events) { + + if (!receipt?.logs) { assert("No events were emitted"); } else { - newAddress = "0x" + res.events[res.events.length - 1].topics[3].slice(-40); + const newAddress = "0x" + receipt.logs[receipt.logs.length - 1].topics[3].slice(-40); const newERC20Contract = (await ethers.getContractFactory("ERC20OnChain")).attach(newAddress) as ERC20OnChain; - let balance = await newERC20Contract.functions.balanceOf(to); + let balance = await newERC20Contract.balanceOf(to); parseInt(balance.toString(), 10).should.be.equal(amount); // expectation - await messageProxyForSchain.postMessage(tokenManagerErc20.address, mainnetId, fakeDepositBox, data2); - balance = await newERC20Contract.functions.balanceOf(to); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data2); + balance = await newERC20Contract.balanceOf(to); parseInt(balance.toString(), 10).should.be.equal(amount * 2); } }); it("should reject with `Insufficient funds` if token balance is too low", async () => { // preparation - const error = "insufficient funds"; + const error = "Insufficient funds"; const amount = 10; // execution/expectation - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet.address, erc20OnChain.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); - await erc20OnChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .exitToMainERC20(erc20OnMainnet.address, amount) + .exitToMainERC20(await erc20OnMainnet.getAddress(), amount) .should.be.eventually.rejectedWith(error); }); it("should add token by owner", async () => { // preparation - const addressERC20 = erc20OnChain.address; - const addressERC201 = erc20OnMainnet.address; + const addressERC20 = await erc20OnChain.getAddress(); + const addressERC201 = await erc20OnMainnet.getAddress(); const automaticDeploy = await tokenManagerErc20.automaticDeploy(); await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, addressERC201, addressERC20); // automaticDeploy == true - enabled automaticDeploy = false - disabled @@ -193,18 +193,18 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.connect(schainOwner).disableAutomaticDeploy(); } - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet2.address, eRC20OnChain2.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet2.getAddress(), await eRC20OnChain2.getAddress()); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet2.address, deployer.address) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet2.getAddress(), deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); await eRC20OnChain2.mint(user.address, 1); await eRC20OnChain3.mint(user.address, 1); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet3.address, addressERC20) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet3.getAddress(), addressERC20) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet3.address, eRC20OnChain3.address) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet3.getAddress(), await eRC20OnChain3.getAddress()) .should.be.eventually.rejectedWith("Total supply of a new token is not zero"); }); @@ -215,18 +215,18 @@ describe("TokenManagerERC20", () => { let erc20OnOriginChainTokenAddress: string; beforeEach(async () => { - erc20OnSchainTokenAddress = erc20OnChain.address; - erc20OnOriginChainTokenAddress = erc20OnMainnet.address; + erc20OnSchainTokenAddress = await erc20OnChain.getAddress(); + erc20OnOriginChainTokenAddress = await erc20OnMainnet.getAddress(); await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, erc20OnSchainTokenAddress); }) it("should successfully relink if new token was not minted", async () => { const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, erc20OnSchainPostToken.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()); - await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(erc20OnSchainPostToken.address); - await tokenManagerErc20.addedClones(erc20OnSchainPostToken.address).should.be.eventually.equal(true); + await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(await erc20OnSchainPostToken.getAddress()); + await tokenManagerErc20.addedClones(await erc20OnSchainPostToken.getAddress()).should.be.eventually.equal(true); }); it("should successfully relink if previous token on target chain was minted and then fully burned before relinking to new", async () => { @@ -234,17 +234,17 @@ describe("TokenManagerERC20", () => { await erc20OnChain.connect(user).burn(1); const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, erc20OnSchainPostToken.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()); - await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(erc20OnSchainPostToken.address); - await tokenManagerErc20.addedClones(erc20OnSchainPostToken.address).should.be.eventually.equal(true); + await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(await erc20OnSchainPostToken.getAddress()); + await tokenManagerErc20.addedClones(await erc20OnSchainPostToken.getAddress()).should.be.eventually.equal(true); }); it("should reject new relinking if previous token was already minted", async () => { await erc20OnChain.mint(user.address, 1); const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, erc20OnSchainPostToken.address) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()) .should.be.eventually.rejectedWith("Total supply of a previous token is not zero") }); @@ -253,36 +253,36 @@ describe("TokenManagerERC20", () => { it("should reject with `Transfer is not approved by token holder` when invoke `exitToMainERC20`", async () => { const error = "Transfer is not approved by token holder"; const amount = 20; - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet.address, erc20OnChain.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); // invoke `grantRole` before `sendERC20` to avoid `MinterRole: caller does not have the Minter role` exception const minterRole = await erc20OnChain.MINTER_ROLE(); await erc20OnChain.mint(user.address, amount * 2); - await erc20OnChain.connect(deployer).grantRole(minterRole, tokenManagerErc20.address); + await erc20OnChain.connect(deployer).grantRole(minterRole, await tokenManagerErc20.getAddress()); // - await erc20OnChain.connect(user).approve(tokenManagerErc20.address, amount / 2); + await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount / 2); // execution/expectation - await tokenManagerErc20.connect(user).exitToMainERC20(erc20OnMainnet.address, amount) + await tokenManagerErc20.connect(user).exitToMainERC20(await erc20OnMainnet.getAddress(), amount) .should.be.eventually.rejectedWith(error); }); it("should invoke `exitToMainERC20` without mistakes", async () => { const amountMint = "10000000000000000"; const amountReduceCost = "8000000000000000"; - await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerErc20.address); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet.address, erc20OnChain.address); + await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerErc20.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); await erc20OnChain.connect(deployer).mint(user.address, amountMint); - await erc20OnChain.connect(user).approve(tokenManagerErc20.address, amountMint); + await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amountMint); // execution: await tokenManagerErc20 .connect(user) - .exitToMainERC20(erc20OnMainnet.address, amountReduceCost); + .exitToMainERC20(await erc20OnMainnet.getAddress(), amountReduceCost); // // expectation: - const outgoingMessagesCounterMainnet = BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet")); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); describe("tests for transferToSchainERC20", async () => { @@ -301,1057 +301,1061 @@ describe("TokenManagerERC20", () => { erc20OnTargetChain = await deployERC20OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2.address, newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, fakeCommunityPool); - tokenManagerErc202 = await deployTokenManagerERC20(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc20OnTargetChain.connect(deployer).grantRole(await erc20OnTargetChain.MINTER_ROLE(), tokenManagerErc202.address); - await tokenManagerLinker2.registerTokenManager(tokenManagerErc202.address); + communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + tokenManagerErc202 = await deployTokenManagerERC20(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc20OnTargetChain.connect(deployer).grantRole(await erc20OnTargetChain.MINTER_ROLE(), await tokenManagerErc202.getAddress()); + await tokenManagerLinker2.registerTokenManager(await tokenManagerErc202.getAddress()); }); it("should invoke `transferToSchainERC20` without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should reject `transferToSchainERC20` when executing earlier than allowed", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(1)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(90); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(20); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(3)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await skipTime(110); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(5)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC20` and receive tokens without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain.address); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); }); it("should invoke `transferToSchainERC20` and receive tokens without mistakes back and forward twice", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain.address); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount2); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); const amountSum = "70000000000000000"; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); }); it("should invoke `transferToSchainERC20` and receive tokens without mistakes double with attached token", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerErc202 + .connect(schainOwner) + .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerErc202 + .connect(schainOwner) + .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202 + .connect(schainOwner) + .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount2); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); const amountSum = "70000000000000000"; - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); }); it("should invoke `transferToSchainERC20` and transfer back without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain.address); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await targetErc20OnChain.connect(user).approve(tokenManagerErc202.address, amount); + await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); }); it("should invoke `transferToSchainERC20` and transfer back without mistakes with attached tokens", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); }); it("should invoke `transferToSchainERC20` and transfer back without mistakes double", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain.address); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await targetErc20OnChain.connect(user).approve(tokenManagerErc202.address, amount); + await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount2); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); const amountSum = "70000000000000000"; - expect((await targetErc20OnChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); - await targetErc20OnChain.connect(user).approve(tokenManagerErc202.address, amount); + await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await targetErc20OnChain.connect(user).approve(tokenManagerErc202.address, amount2); + await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount2); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2 ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); }); it("should invoke `transferToSchainERC20` and transfer back without mistakes double with attached tokens", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", erc20OnOriginChain.address, amount) + .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount) + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount2); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); const amountSum = "70000000000000000"; - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount2); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount2); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount2); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount2); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount2 ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amountSum); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); }); it("should not be able to transfer X->Y->Z", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); const newSchainNameZ = "NewChainZ"; const erc20OnTargetZChain = await deployERC20OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ.address, newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ.address, tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerErc20Z = await deployTokenManagerERC20(newSchainNameZ, messageProxyForSchainZ.address, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc20OnTargetZChain.connect(deployer).grantRole(await erc20OnTargetZChain.MINTER_ROLE(), tokenManagerErc20Z.address); - await tokenManagerLinkerZ.registerTokenManager(tokenManagerErc20Z.address); + const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerErc20Z = await deployTokenManagerERC20(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + await erc20OnTargetZChain.connect(deployer).grantRole(await erc20OnTargetZChain.MINTER_ROLE(), await tokenManagerErc20Z.getAddress()); + await tokenManagerLinkerZ.registerTokenManager(await tokenManagerErc20Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerErc202.addTokenManager(newSchainNameZ, tokenManagerErc20Z.address); + await tokenManagerErc202.addTokenManager(newSchainNameZ, await tokenManagerErc20Z.getAddress()); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainNameZ, erc20OnOriginChain.address, amount) + .transferToSchainERC20(newSchainNameZ, await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Insufficient funds"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainNameZ, erc20OnTargetChain.address, amount) + .transferToSchainERC20(newSchainNameZ, await erc20OnTargetChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); - await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202.address); + await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), { name: await erc20OnOriginChain.name(), symbol: await erc20OnOriginChain.symbol(), - decimals: BigNumber.from(await erc20OnOriginChain.decimals()).toString() + decimals: await erc20OnOriginChain.decimals() } ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20.address); + await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain.address, erc20OnTargetChain.address); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerErc202.address, schainId, tokenManagerErc20.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); - expect((await erc20OnTargetChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(communityLocker2.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); - await erc20OnTargetChain.connect(user).approve(tokenManagerErc202.address, amount); + await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); await tokenManagerErc202 .connect(user) - .exitToMainERC20(erc20OnOriginChain.address, amount) + .exitToMainERC20(await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Insufficient funds"); await tokenManagerErc202 .connect(user) - .exitToMainERC20(erc20OnTargetChain.address, amount) + .exitToMainERC20(await erc20OnTargetChain.getAddress(), amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, erc20OnOriginChain.address, amount); + .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); data = await messages.encodeTransferErc20Message( - erc20OnOriginChain.address, + await erc20OnOriginChain.getAddress(), user.address, amount ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, newSchainId, tokenManagerErc202.address, data); - expect((await erc20OnOriginChain.functions.balanceOf(user.address)).toString()).to.be.equal(amount); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(tokenManagerErc20.address, amount); + await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); await tokenManagerErc20 .connect(user) - .exitToMainERC20(erc20OnOriginChain.address, amount) + .exitToMainERC20(await erc20OnOriginChain.getAddress(), amount) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerErc20 .connect(user) - .exitToMainERC20(erc20OnTargetChain.address, amount) + .exitToMainERC20(await erc20OnTargetChain.getAddress(), amount) .should.be.eventually.rejectedWith("Insufficient funds"); }); @@ -1360,7 +1364,7 @@ describe("TokenManagerERC20", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); }); it("should transfer ERC20 token with token info", async () => { @@ -1371,28 +1375,28 @@ describe("TokenManagerERC20", () => { const fromSchainName = "fromSchainName"; const fromSchainHash = stringKeccak256(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - // await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet.address, erc20OnChain.address); + // await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), to, amount, - (await erc20OnMainnet.totalSupply()).toNumber(), + await erc20OnMainnet.totalSupply(), { name: await erc20OnMainnet.name(), symbol: await erc20OnMainnet.symbol(), - decimals: BigNumber.from(await erc20OnMainnet.decimals()).toString() + decimals: await erc20OnMainnet.decimals() } ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(tokenManagerErc20.address, fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet.address); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect(parseInt((await targetErc20OnChain.functions.balanceOf(to)).toString(), 10)) + expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); }); @@ -1403,25 +1407,25 @@ describe("TokenManagerERC20", () => { const fromSchainHash = stringKeccak256(fromSchainName); await messageProxyForSchain.connect(deployer).addConnectedChain(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(fromSchainName, erc20OnMainnet.address, erc20OnChain.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(fromSchainName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); const amount = 10; const to = user.address; await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), to, amount, - (await erc20OnMainnet.totalSupply()).toNumber() + await erc20OnMainnet.totalSupply() ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(tokenManagerErc20.address, fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet.address); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect(parseInt((await targetErc20OnChain.functions.balanceOf(to)).toString(), 10)) + expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); }); @@ -1436,29 +1440,29 @@ describe("TokenManagerERC20", () => { const to = user.address; await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), to, amount, - (await erc20OnMainnet.totalSupply()).toNumber(), + await erc20OnMainnet.totalSupply(), { name: await erc20OnMainnet.name(), symbol: await erc20OnMainnet.symbol(), - decimals: BigNumber.from(await erc20OnMainnet.decimals()).toString() + decimals: await erc20OnMainnet.decimals() } ); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, fromSchainHash, remoteTokenManagerAddress, data) + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(tokenManagerErc20.address, fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet.address); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; - expect(parseInt((await targetErc20OnChain.functions.balanceOf(to)).toString(), 10)) + expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); }); @@ -1467,7 +1471,7 @@ describe("TokenManagerERC20", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(tokenManagerErc20.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); @@ -1480,33 +1484,33 @@ describe("TokenManagerERC20", () => { const fromSchainName = "fromSchainName"; const fromSchainHash = stringKeccak256(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet.address, erc20OnChain.address); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); await erc20OnMainnet.mint(deployer.address, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), to, amount, - (await erc20OnMainnet.totalSupply()).toNumber(), + await erc20OnMainnet.totalSupply(), { name: await erc20OnMainnet.name(), symbol: await erc20OnMainnet.symbol(), - decimals: BigNumber.from(await erc20OnMainnet.decimals()).toString() + decimals: await erc20OnMainnet.decimals() } ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); // execution - const UINT256_MAX = BigNumber.from(2).pow(256).sub(1); + const UINT256_MAX = BigInt(2 ^ 256 - 1); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), to, UINT256_MAX, 0); - await messageProxyForSchain.postMessage(tokenManagerErc20.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Total supply exceeded"); }); @@ -1519,14 +1523,15 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.addTokenManager(sourceSchainName, remoteTokenManager.address); const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchain.address); - await messageProxyForSchain.setEtherbase(etherbase.address); - await deployer.sendTransaction({to: etherbase.address, value: ethers.utils.parseEther("3")}); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchain.getAddress()); + await messageProxyForSchain.setEtherbase(await etherbase.getAddress()); + await deployer.sendTransaction({to: await etherbase.getAddress(), value: ethers.parseEther("3")}); - (await receiver.getBalance()).should.be.equal(0); + let receiverBalance = await ethers.provider.getBalance(receiver.address); + (receiverBalance).should.be.equal(0); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - erc20OnMainnet.address, + await erc20OnMainnet.getAddress(), receiver.address, amount, 2 * amount, @@ -1538,24 +1543,25 @@ describe("TokenManagerERC20", () => { ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); await messageProxyForSchain.postMessage( - tokenManagerErc20.address, + await tokenManagerErc20.getAddress(), sourceSchainHash, remoteTokenManager.address, data); + receiverBalance = await ethers.provider.getBalance(receiver.address); + (receiverBalance).should.be.equal(0); - (await receiver.getBalance()).should.be.equal(0); - - await expect(messageProxyForSchain.setMinimumReceiverBalance(ethers.utils.parseEther("2"))) + await expect(messageProxyForSchain.setMinimumReceiverBalance(ethers.parseEther("2"))) .to.emit(messageProxyForSchain, 'MinimumReceiverBalanceChanged') - .withArgs(0, ethers.utils.parseEther("2")); + .withArgs(0, ethers.parseEther("2")); await messageProxyForSchain.postMessage( - tokenManagerErc20.address, + await tokenManagerErc20.getAddress(), sourceSchainHash, remoteTokenManager.address, data); - (await receiver.getBalance()).should.be.equal(await messageProxyForSchain.minimumReceiverBalance()); + receiverBalance = await ethers.provider.getBalance(receiver.address); + (receiverBalance).should.be.equal(await messageProxyForSchain.minimumReceiverBalance()); }) }); }); diff --git a/test/TokenManagerERC721.ts b/test/TokenManagerERC721.ts index db42dc941..53b367785 100644 --- a/test/TokenManagerERC721.ts +++ b/test/TokenManagerERC721.ts @@ -48,8 +48,8 @@ import { deployMessages } from "./utils/deploy/messages"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; @@ -83,25 +83,25 @@ describe("TokenManagerERC721", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = messages.address; - fakeCommunityPool = messages.address; + fakeDepositBox = await messages.getAddress(); + fakeCommunityPool = await messages.getAddress(); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); tokenManagerERC721 = await deployTokenManagerERC721( schainName, - messageProxyForSchain.address, + await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox ); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); - await tokenManagerLinker.registerTokenManager(tokenManagerERC721.address); + await tokenManagerLinker.registerTokenManager(await tokenManagerERC721.getAddress()); tokenClone = await deployERC721OnChain("ELVIS", "ELV"); token = await deployERC721OnChain("SKALE", "SKL"); @@ -111,7 +111,7 @@ describe("TokenManagerERC721", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -122,7 +122,7 @@ describe("TokenManagerERC721", () => { it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC721.depositBox()).to.equal(messages.address); + expect(await tokenManagerERC721.depositBox()).to.equal(await messages.getAddress()); await tokenManagerERC721.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC721.connect(deployer).changeDepositBoxAddress(newDepositBox); @@ -131,71 +131,67 @@ describe("TokenManagerERC721", () => { it("should successfully call exitToMainERC721", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await tokenClone.connect(user).approve(tokenManagerERC721.address, tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerERC721.address); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId); + await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerERC721.getAddress()); + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId); - await messageProxyForSchain.removeExtraContract("Mainnet", tokenManagerERC721.address); + await messageProxyForSchain.removeExtraContract("Mainnet", await tokenManagerERC721.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(tokenManagerERC721.address, tokenId); + await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should be rejected when call exitToMainERC721 if remove contract for all chains", async () => { - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(tokenManagerERC721.address, tokenId); - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId); + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId); - await messageProxyForSchain.removeExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.removeExtraContractForAll(await tokenManagerERC721.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(tokenManagerERC721.address, tokenId); + await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should successfully call addERC721TokenByOwner", async () => { - await tokenManagerERC721.connect(user).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address) + await tokenManagerERC721.connect(user).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, deployer.address) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token2.address, tokenClone.address) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone2.address) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -215,177 +211,176 @@ describe("TokenManagerERC721", () => { erc721OnTargetChain = await deployERC721OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2.address, newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC7212 = await deployTokenManagerERC721(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), tokenManagerERC7212.address); - await tokenManagerLinker2.registerTokenManager(tokenManagerERC7212.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC7212.address); + communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC7212 = await deployTokenManagerERC721(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), await tokenManagerERC7212.getAddress()); + await tokenManagerLinker2.registerTokenManager(await tokenManagerERC7212.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC7212.getAddress()); }); it("should invoke `transferToSchainERC721` without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should reject `transferToSchainERC721` when executing earlier then allowed", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, 1); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, 1); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 1); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 1) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, 1) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 1); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(1)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc721OnOriginChain.connect(deployer).mint(user.address, 2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, 2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 2); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 3); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, 3); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 3); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(90); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(20); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(3)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc721OnOriginChain.connect(deployer).mint(user.address, 4); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, 4); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 4); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 4); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 4); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 5); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, 5); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 5); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 5) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await skipTime(110); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 5); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(5)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); const data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -395,57 +390,58 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2 + .postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data) + .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain.address); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -455,77 +451,76 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain.address); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double with attached token", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -535,76 +530,81 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerERC7212 + .connect(schainOwner) + .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerERC7212 + .connect(schainOwner) + .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -614,87 +614,86 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain.address); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -704,83 +703,82 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -790,155 +788,154 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain.address); - const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - await targetErc721OnChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await targetErc721OnChain.connect(user).approve(tokenManagerERC7212.address, tokenId2); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId2); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -948,139 +945,138 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId2); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId2); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2 ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); }); it("should not be able to transfer X->Y->Z", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); const data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -1090,71 +1086,70 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const newSchainNameZ = "NewChainZ"; const erc721OnTargetZChain = await deployERC721OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ.address, newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ.address, tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC721Z = await deployTokenManagerERC721(newSchainNameZ, messageProxyForSchainZ.address, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), tokenManagerERC721Z.address); - await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC721Z.address); + const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC721Z = await deployTokenManagerERC721(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), await tokenManagerERC721Z.getAddress()); + await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC721Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC7212.addTokenManager(newSchainNameZ, tokenManagerERC721Z.address); + await tokenManagerERC7212.addTokenManager(newSchainNameZ, await tokenManagerERC721Z.getAddress()); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainNameZ, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainNameZ, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainNameZ, erc721OnTargetChain.address, tokenId) + .transferToSchainERC721(newSchainNameZ, await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212.address); + await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, { @@ -1164,61 +1159,60 @@ describe("TokenManagerERC721", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721.address); + await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC7212.address, schainId, tokenManagerERC721.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(communityLocker2.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); await tokenManagerERC7212 .connect(user) - .exitToMainERC721(erc721OnOriginChain.address, tokenId) + .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC7212 .connect(user) - .exitToMainERC721(erc721OnTargetChain.address, tokenId) + .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721Message( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, newSchainId, tokenManagerERC7212.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); await tokenManagerERC721 .connect(user) - .exitToMainERC721(erc721OnOriginChain.address, tokenId) + .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC721 .connect(user) - .exitToMainERC721(erc721OnTargetChain.address, tokenId) + .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); }); @@ -1227,13 +1221,13 @@ describe("TokenManagerERC721", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); }); it("should transfer ERC721 token token with token info", async () => { // preparation const data = await messages.encodeTransferErc721AndTokenInfoMessage( - token.address, + await token.getAddress(), to, tokenId, { @@ -1242,31 +1236,31 @@ describe("TokenManagerERC721", () => { } ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, token.address); - const erc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await erc721OnChain.functions.ownerOf(tokenId))[0]).to.be.equal(to); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, await token.getAddress()); + const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; + expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); }); it("should transfer ERC721 token on schain", async () => { // preparation - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC721.address); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC721.getAddress()); const data = await messages.encodeTransferErc721Message( - token.address, + await token.getAddress(), to, tokenId ); - await messageProxyForSchain.postMessage(tokenManagerERC721.address, mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, await token.getAddress()); const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await erc721OnChain.functions.ownerOf(tokenId))[0]).to.be.equal(to); + expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); }); it("should reject if message type is unknown", async () => { @@ -1274,7 +1268,7 @@ describe("TokenManagerERC721", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(tokenManagerERC721.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerERC721WithMetadata.ts b/test/TokenManagerERC721WithMetadata.ts index e431382dc..2d2c45a41 100644 --- a/test/TokenManagerERC721WithMetadata.ts +++ b/test/TokenManagerERC721WithMetadata.ts @@ -48,8 +48,8 @@ import { deployMessages } from "./utils/deploy/messages"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; @@ -84,25 +84,25 @@ describe("TokenManagerERC721WithMetadata", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = messages.address; - fakeCommunityPool = messages.address; + fakeDepositBox = await messages.getAddress(); + fakeCommunityPool = await messages.getAddress(); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); tokenManagerERC721WithMetadata = await deployTokenManagerERC721WithMetadata( schainName, - messageProxyForSchain.address, + await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox ); await tokenManagerERC721WithMetadata.connect(deployer).grantRole(await tokenManagerERC721WithMetadata.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721WithMetadata.connect(deployer).grantRole(await tokenManagerERC721WithMetadata.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); - await tokenManagerLinker.registerTokenManager(tokenManagerERC721WithMetadata.address); + await tokenManagerLinker.registerTokenManager(await tokenManagerERC721WithMetadata.getAddress()); tokenClone = await deployERC721OnChain("ELVIS", "ELV"); token = await deployERC721OnChain("SKALE", "SKL"); @@ -112,7 +112,7 @@ describe("TokenManagerERC721WithMetadata", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -123,7 +123,7 @@ describe("TokenManagerERC721WithMetadata", () => { it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC721WithMetadata.depositBox()).to.equal(messages.address); + expect(await tokenManagerERC721WithMetadata.depositBox()).to.equal(await messages.getAddress()); await tokenManagerERC721WithMetadata.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC721WithMetadata.connect(deployer).changeDepositBoxAddress(newDepositBox); @@ -132,75 +132,71 @@ describe("TokenManagerERC721WithMetadata", () => { it("should successfully call exitToMainERC721", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerERC721WithMetadata.address); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId); + await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId); - await messageProxyForSchain.removeExtraContract("Mainnet", tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.removeExtraContract("Mainnet", await tokenManagerERC721WithMetadata.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should be rejected when call exitToMainERC721 if remove contract for all chains", async () => { - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId); - await messageProxyForSchain.removeExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.removeExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token.address, tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - const outgoingMessagesCounterMainnet = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet") - ); - outgoingMessagesCounterMainnet.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); + outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should successfully call addERC721TokenByOwner", async () => { - await tokenManagerERC721WithMetadata.connect(user).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address) + await tokenManagerERC721WithMetadata.connect(user).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, deployer.address) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token2.address, tokenClone.address) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone2.address) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -220,17 +216,23 @@ describe("TokenManagerERC721WithMetadata", () => { erc721OnTargetChain = await deployERC721OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2.address, newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC721WithMetadata2 = await deployTokenManagerERC721WithMetadata(newSchainName, messageProxyForSchain2.address, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), tokenManagerERC721WithMetadata2.address); - await tokenManagerLinker2.registerTokenManager(tokenManagerERC721WithMetadata2.address); - await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC721WithMetadata2.address); + communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC721WithMetadata2 = await deployTokenManagerERC721WithMetadata( + newSchainName, + await messageProxyForSchain2.getAddress(), + tokenManagerLinker2, + communityLocker2, + fakeDepositBox + ); + await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerLinker2.registerTokenManager(await tokenManagerERC721WithMetadata2.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC721WithMetadata2.getAddress()); }); it("should invoke `transferToSchainERC721` without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -238,133 +240,132 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should reject `transferToSchainERC721` when executing earlier then allowed", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, 1); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, 1); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 1); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 1) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, 1) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 1); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(1)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc721OnOriginChain.connect(deployer).mint(user.address, 2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, 2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 2); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 3); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, 3); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 3); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(90); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(2)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); await skipTime(20); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 3); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(3)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc721OnOriginChain.connect(deployer).mint(user.address, 4); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, 4); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 4); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 4); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 4); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 5); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, 5); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 5); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 5) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5) .should.be.eventually.rejectedWith("Exceeded message rate limit"); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(4)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await skipTime(110); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, 5); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5); - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.deep.equal(BigNumber.from(5)); + (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -372,27 +373,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -403,31 +404,30 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain.address); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -435,27 +435,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -466,56 +466,55 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain.address); - const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); const tokenId2 = 2; const tokenURI2 = "Hello2"; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await targetErc721OnChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double with attached token", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -523,27 +522,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -554,55 +553,62 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerERC721WithMetadata2 + .connect(schainOwner) + .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerERC721WithMetadata2 + .connect(schainOwner) + .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2 + .connect(schainOwner) + .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); const tokenId2 = 2; const tokenURI2 = "Hello2"; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -610,27 +616,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -641,63 +647,62 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain.address); - const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -705,27 +710,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -736,58 +741,57 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -795,27 +799,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -826,143 +830,142 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain.address); - const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); const tokenId2 = 2; const tokenURI2 = "Hello2"; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await targetErc721OnChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await targetErc721OnChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await targetErc721OnChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await targetErc721OnChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); - await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId2); + await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId2); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -970,27 +973,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -1001,136 +1004,135 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", erc721OnOriginChain.address, tokenId) + .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); const tokenId2 = 2; const tokenURI2 = "Hello2"; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId2); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId2); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId2); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId2); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); }); it("should not be able to transfer X->Y->Z", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -1138,17 +1140,17 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -1159,55 +1161,56 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); const newSchainNameZ = "NewChainZ"; const erc721OnTargetZChain = await deployERC721OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ.address, newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ.address, tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC721WithMetadataZ = await deployTokenManagerERC721WithMetadata(newSchainNameZ, messageProxyForSchainZ.address, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), tokenManagerERC721WithMetadataZ.address); - await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC721WithMetadataZ.address); + const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC721WithMetadataZ = await deployTokenManagerERC721WithMetadata( + newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox + ); + await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), await tokenManagerERC721WithMetadataZ.getAddress()); + await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC721WithMetadataZ.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC721WithMetadata2.addTokenManager(newSchainNameZ, tokenManagerERC721WithMetadataZ.address); + await tokenManagerERC721WithMetadata2.addTokenManager(newSchainNameZ, await tokenManagerERC721WithMetadataZ.getAddress()); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainNameZ, erc721OnOriginChain.address, tokenId) + .transferToSchainERC721(newSchainNameZ, await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainNameZ, erc721OnTargetChain.address, tokenId) + .transferToSchainERC721(newSchainNameZ, await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -1215,17 +1218,17 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2.address); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI, @@ -1236,64 +1239,63 @@ describe("TokenManagerERC721WithMetadata", () => { ); // expectation: - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); + outgoingMessagesCounter.should.be.equal(1); // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain.address, erc721OnTargetChain.address); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2.address, schainId, tokenManagerERC721WithMetadata.address, data); + await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); - expect((await erc721OnTargetChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnTargetChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(communityLocker2.address, mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); - await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2.address, tokenId); + await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .exitToMainERC721(erc721OnOriginChain.address, tokenId) + .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC721WithMetadata2 .connect(user) - .exitToMainERC721(erc721OnTargetChain.address, tokenId) + .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, erc721OnOriginChain.address, tokenId); + .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - erc721OnOriginChain.address, + await erc721OnOriginChain.getAddress(), user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, newSchainId, tokenManagerERC721WithMetadata2.address, data); - expect((await erc721OnOriginChain.functions.ownerOf(tokenId)).toString()).to.be.equal(user.address); - expect((await erc721OnOriginChain.functions.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); + expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata.address, tokenId); + await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); await tokenManagerERC721WithMetadata .connect(user) - .exitToMainERC721(erc721OnOriginChain.address, tokenId) + .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC721WithMetadata .connect(user) - .exitToMainERC721(erc721OnTargetChain.address, tokenId) + .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); }); @@ -1302,13 +1304,13 @@ describe("TokenManagerERC721WithMetadata", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); }); it("should transfer ERC721 token token with token info", async () => { // preparation const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - token.address, + await token.getAddress(), to, tokenId, tokenURI, @@ -1318,34 +1320,34 @@ describe("TokenManagerERC721WithMetadata", () => { } ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, await token.getAddress()); const erc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await erc721OnChain.functions.ownerOf(tokenId))[0]).to.be.equal(to); - expect((await erc721OnChain.functions.tokenURI(tokenId))[0]).to.be.equal(tokenURI); + expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); + expect((await erc721OnChain.tokenURI(tokenId))).to.be.equal(tokenURI); }); it("should transfer ERC721 token on schain", async () => { // preparation - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token.address, tokenClone.address); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC721WithMetadata.address); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC721WithMetadata.getAddress()); const data = await messages.encodeTransferErc721MessageWithMetadata( - token.address, + await token.getAddress(), to, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, token.address); + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, await token.getAddress()); const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; - expect((await erc721OnChain.functions.ownerOf(tokenId))[0]).to.be.equal(to); - expect((await erc721OnChain.functions.tokenURI(tokenId))[0]).to.be.equal(tokenURI); + expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); + expect((await erc721OnChain.tokenURI(tokenId))).to.be.equal(tokenURI); }); it("should reject if message type is unknown", async () => { @@ -1353,7 +1355,7 @@ describe("TokenManagerERC721WithMetadata", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata.address, mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index ba509ffc2..ac88f5ccd 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -45,8 +45,7 @@ import { deployEthErc20 } from "./utils/deploy/schain/ethErc20"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; import { deployMessageProxyForSchainTester } from "./utils/deploy/test/messageProxyForSchainTester"; @@ -75,14 +74,14 @@ describe("TokenManagerEth", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - fakeDepositBox = tokenManagerLinker.address; - fakeCommunityPool = tokenManagerLinker.address; - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); + fakeDepositBox = await tokenManagerLinker.getAddress(); + fakeCommunityPool = await tokenManagerLinker.getAddress(); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); tokenManagerEth = await deployTokenManagerEth( schainName, - messageProxyForSchain.address, + await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox, @@ -91,19 +90,19 @@ describe("TokenManagerEth", () => { ethERC20 = await deployEthErc20( tokenManagerEth ); - await tokenManagerLinker.registerTokenManager(tokenManagerEth.address); - await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20.address); + await tokenManagerLinker.registerTokenManager(await tokenManagerEth.getAddress()); + await tokenManagerEth.connect(deployer).setEthErc20Address(await ethERC20.getAddress()); messages = await deployMessages(); const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); }); it("should set EthErc20 address", async () => { - const newEthErc20Address = tokenManagerLinker.address; + const newEthErc20Address = await tokenManagerLinker.getAddress(); // only owner can set EthErc20 address: await tokenManagerEth.connect(user).setEthErc20Address(newEthErc20Address).should.be.rejected; await tokenManagerEth.connect(deployer).setEthErc20Address(newEthErc20Address); @@ -193,26 +192,26 @@ describe("TokenManagerEth", () => { }); it("should send Eth to somebody on Mainnet, closed to Mainnet, called by schain", async () => { - const amount = BigNumber.from("60"); - const amountAfter = BigNumber.from("54"); - const amountTo = BigNumber.from("6"); - await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerEth.address); + const amount = 60; + const amountAfter = 54; + const amountTo = 6; + await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerEth.getAddress()); await ethERC20.grantRole(await ethERC20.MINTER_ROLE(), deployer.address); await ethERC20.mint(user.address, amount); // send Eth to a client on Mainnet: await tokenManagerEth.connect(user).exitToMain(amountTo); - expect(BigNumber.from(await ethERC20.balanceOf(user.address)).toString()).to.be.equal(amountAfter.toString()); + expect(await ethERC20.balanceOf(user.address)).to.be.equal(amountAfter.toString()); let data1 = await messages.encodeLockUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, data1); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data1); await tokenManagerEth.connect(user).exitToMain(amountTo) .should.be.eventually.rejectedWith("Recipient must be active"); data1 = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, data1); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data1); await tokenManagerEth.connect(user).exitToMain(amountTo) .should.be.eventually.rejectedWith("Exceeded message rate limit"); @@ -241,9 +240,9 @@ describe("TokenManagerEth", () => { const amount = 10; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); const sender = deployer.address; - // redeploy tokenManagerEth with `developer` address instead `messageProxyForSchain.address` + // redeploy tokenManagerEth with `developer` address instead `await messageProxyForSchain.getAddress()` // to avoid `Not a sender` error - tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, ethERC20.address); + tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, await ethERC20.getAddress()); // await tokenManagerEth.setContract("MessageProxy", deployer, {from: deployer}); // execution await tokenManagerEth @@ -256,9 +255,9 @@ describe("TokenManagerEth", () => { // for `Invalid data` message bytesData should be `0x` const bytesData = "0x"; const sender = deployer.address; - // redeploy tokenManagerEth with `developer` address instead `messageProxyForSchain.address` + // redeploy tokenManagerEth with `developer` address instead `await messageProxyForSchain.getAddress()` // to avoid `Not a sender` error - tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, ethERC20.address); + tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, await ethERC20.getAddress()); // add schain to avoid the `Receiver chain is incorrect` error await tokenManagerEth .connect(deployer) @@ -272,7 +271,7 @@ describe("TokenManagerEth", () => { it("should transfer eth", async () => { // preparation - await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth.address); + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerEth.getAddress()); const fromSchainName = "fromSchainName"; const fromSchainId = stringKeccak256(fromSchainName); const amount = "10"; @@ -285,32 +284,31 @@ describe("TokenManagerEth", () => { await tokenManagerEth .connect(deployer) .addTokenManager(fromSchainName, deployer.address); - await ethERC20.connect(deployer).grantRole(await ethERC20.MINTER_ROLE(), tokenManagerEth.address); - await ethERC20.connect(deployer).grantRole(await ethERC20.BURNER_ROLE(), tokenManagerEth.address); + await ethERC20.connect(deployer).grantRole(await ethERC20.MINTER_ROLE(), await tokenManagerEth.getAddress()); + await ethERC20.connect(deployer).grantRole(await ethERC20.BURNER_ROLE(), await tokenManagerEth.getAddress()); // execution await messageProxyForSchain.postMessage( - tokenManagerEth.address, + await tokenManagerEth.getAddress(), fromSchainId, sender, bytesData ).should.be.eventually.rejectedWith("Receiver chain is incorrect"); await messageProxyForSchain.postMessage( - tokenManagerEth.address, + await tokenManagerEth.getAddress(), mainnetHash, sender, bytesData ).should.be.eventually.rejectedWith("Receiver chain is incorrect"); await messageProxyForSchain.postMessage( - tokenManagerEth.address, + await tokenManagerEth.getAddress(), mainnetHash, fakeDepositBox, bytesData ); // expectation - expect(parseInt((BigNumber.from(await ethERC20.balanceOf(to))).toString(), 10)) - .to.be.equal(parseInt(amount, 10)); + expect(await ethERC20.balanceOf(to)).to.be.equal(amount); }); }); }); diff --git a/test/TokenManagerLinker.ts b/test/TokenManagerLinker.ts index 5c973e0a4..da46535f1 100644 --- a/test/TokenManagerLinker.ts +++ b/test/TokenManagerLinker.ts @@ -46,7 +46,7 @@ import { deployMessageProxyForSchainTester } from "./utils/deploy/test/messagePr import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; @@ -73,20 +73,20 @@ describe("TokenManagerLinker", () => { beforeEach(async () => { newSchainName = "newSchainName"; const keyStorage = await deployKeyStorageMock(); - messageProxy = await deployMessageProxyForSchainTester(keyStorage.address, schainName); + messageProxy = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); const fakeLinker = deployer.address; linker = await deployTokenManagerLinker(messageProxy, fakeLinker); - fakeDepositBox = linker.address; - fakeCommunityPool = linker.address; - communityLocker = await deployCommunityLocker(schainName, messageProxy.address, linker, fakeCommunityPool); - tokenManagerEth = await deployTokenManagerEth(schainName, messageProxy.address, linker, communityLocker, fakeDepositBox, "0x0000000000000000000000000000000000000000"); - tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxy.address, linker, communityLocker, fakeDepositBox); - tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxy.address, linker, communityLocker, fakeDepositBox); + fakeDepositBox = await linker.getAddress(); + fakeCommunityPool = await linker.getAddress(); + communityLocker = await deployCommunityLocker(schainName, await messageProxy.getAddress(), linker, fakeCommunityPool); + tokenManagerEth = await deployTokenManagerEth(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox, "0x0000000000000000000000000000000000000000"); + tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox); + tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox); const chainConnectorRole = await messageProxy.CHAIN_CONNECTOR_ROLE(); - await messageProxy.connect(deployer).grantRole(chainConnectorRole, linker.address); + await messageProxy.connect(deployer).grantRole(chainConnectorRole, await linker.getAddress()); const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxy.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxy.registerExtraContractForAll(linker.address); + await messageProxy.registerExtraContractForAll(await linker.getAddress()); }); it("should connect schain", async () => { @@ -97,11 +97,11 @@ describe("TokenManagerLinker", () => { }); it("should connect schain with 1 tokenManager", async () => { - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); - await linker.connect(deployer).registerTokenManager(tokenManagerEth.address); + await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); expect(await linker.hasSchain(newSchainName)).to.equal(false); @@ -111,17 +111,17 @@ describe("TokenManagerLinker", () => { }); it("should connect schain with 3 tokenManager", async () => { - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC20.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC721.address)).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); - await linker.connect(deployer).registerTokenManager(tokenManagerEth.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC20.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC721.address); + await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(true); - expect(await linker.hasTokenManager(tokenManagerERC20.address)).to.equal(true); - expect(await linker.hasTokenManager(tokenManagerERC721.address)).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(true); expect(await linker.hasSchain(newSchainName)).to.equal(false); @@ -131,9 +131,9 @@ describe("TokenManagerLinker", () => { }); it("should invoke `disconnectSchain` without mistakes", async () => { - await linker.connect(deployer).registerTokenManager(tokenManagerEth.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC20.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC721.address); + await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); await linker.connect(deployer).connectSchain(newSchainName); @@ -149,17 +149,17 @@ describe("TokenManagerLinker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC20.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC721.address)).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); - await linker.connect(deployer).registerTokenManager(tokenManagerEth.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC20.address); - await linker.connect(deployer).registerTokenManager(tokenManagerERC721.address); + await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); + await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(true); - expect(await linker.hasTokenManager(tokenManagerERC20.address)).to.equal(true); - expect(await linker.hasTokenManager(tokenManagerERC721.address)).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(true); expect(await linker.hasTokenManager(nullAddress)).to.equal(false); expect(await linker.hasTokenManager(tokenManagerAddress)).to.equal(false); @@ -183,13 +183,13 @@ describe("TokenManagerLinker", () => { expect(await linker.hasTokenManager(nullAddress)).to.equal(false); - await linker.connect(deployer).removeTokenManager(tokenManagerEth.address); - await linker.connect(deployer).removeTokenManager(tokenManagerERC20.address); - await linker.connect(deployer).removeTokenManager(tokenManagerERC721.address); + await linker.connect(deployer).removeTokenManager(await tokenManagerEth.getAddress()); + await linker.connect(deployer).removeTokenManager(await tokenManagerERC20.getAddress()); + await linker.connect(deployer).removeTokenManager(await tokenManagerERC721.getAddress()); - expect(await linker.hasTokenManager(tokenManagerEth.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC20.address)).to.equal(false); - expect(await linker.hasTokenManager(tokenManagerERC721.address)).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); }); }); From 1923ff6b5ad95901d5e7913c1de34323e80ce47f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:50:07 +0000 Subject: [PATCH 06/45] FIix solidity compile --- contracts/schain/tokens/ERC721OnChain.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/schain/tokens/ERC721OnChain.sol b/contracts/schain/tokens/ERC721OnChain.sol index d0c892f0f..b75f8357f 100644 --- a/contracts/schain/tokens/ERC721OnChain.sol +++ b/contracts/schain/tokens/ERC721OnChain.sol @@ -104,7 +104,7 @@ contract ERC721OnChain is ) public view - override(AccessControlEnumerableUpgradeable, ERC721Upgradeable) + override(AccessControlEnumerableUpgradeable, ERC721Upgradeable, ERC721URIStorageUpgradeable) returns (bool) { return super.supportsInterface(interfaceId); From a914c09ccf5b46796bb3f1556adedce0e97f1412 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:50:30 +0000 Subject: [PATCH 07/45] Refactor CommunityLocker --- test/CommunityLocker.ts | 46 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/test/CommunityLocker.ts b/test/CommunityLocker.ts index 4725e9be0..66e59120d 100644 --- a/test/CommunityLocker.ts +++ b/test/CommunityLocker.ts @@ -40,11 +40,11 @@ import { deployMessages } from "./utils/deploy/messages"; import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; import { deployTokenManagerLinker } from "./utils/deploy/schain/tokenManagerLinker"; -import { BigNumber } from "ethers"; +import { BigNumberish } from "ethers"; import { currentTime, skipTime } from "./utils/time"; const schainName = "TestSchain"; @@ -66,11 +66,11 @@ describe("CommunityLocker", () => { beforeEach(async () => { messages = await deployMessages(); - fakeCommunityPool = messages.address; + fakeCommunityPool = await messages.getAddress(); const messageProxyForSchainWithoutSignatureFactory = await ethers.getContractFactory("MessageProxyForSchainWithoutSignature"); messageProxyForSchain = await messageProxyForSchainWithoutSignatureFactory.deploy("MyChain") as MessageProxyForSchainWithoutSignature; tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); }) it("should activate user", async () => { @@ -80,19 +80,19 @@ describe("CommunityLocker", () => { await communityLocker.postMessage(mainnetHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Sender is not a message proxy"); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, deployer.address, data) + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, deployer.address, data) .should.be.eventually.rejectedWith("Sender must be CommunityPool"); - await messageProxyForSchain.postMessage(communityLocker.address, schainHash, fakeCommunityPool, data) + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), schainHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Source chain name must be Mainnet"); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, fakeData) + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, fakeData) .should.be.eventually.rejectedWith("The message should contain a status of user"); expect(await communityLocker.activeUsers(deployer.address)).to.be.equal(false); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, data); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, data) + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Active user statuses must be different"); expect(await communityLocker.activeUsers(deployer.address)).to.be.equal(true); }); @@ -100,38 +100,38 @@ describe("CommunityLocker", () => { it("should activate and then lock user", async () => { const activateData = await messages.encodeActivateUserMessage(user.address); const lockData = await messages.encodeLockUserMessage(user.address); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, activateData); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, activateData); expect(await communityLocker.activeUsers(user.address)).to.be.equal(true); - await messageProxyForSchain.postMessage(communityLocker.address, mainnetHash, fakeCommunityPool, lockData); + await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, lockData); expect(await communityLocker.activeUsers(user.address)).to.be.equal(false); }); it("should set time limit per message", async () => { - expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(300); + expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(BigInt(300)); await communityLocker.setTimeLimitPerMessage("Mainnet", 0) .should.be.eventually.rejectedWith("Not enough permissions to set constant"); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage("Mainnet", 0); - expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(0); + expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(BigInt(0)); }); it("should set time limit per message for schain", async () => { const anotherSchainName = "Schain Sierra"; - const schainHash = ethers.utils.id(anotherSchainName); - expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(0); + const schainHash = ethers.id(anotherSchainName); + expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(BigInt(0)); await communityLocker.setTimeLimitPerMessage(anotherSchainName, 1200) .should.be.eventually.rejectedWith("Not enough permissions to set constant"); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage(schainName, 1200) .should.be.eventually.rejectedWith("Incorrect chain"); await communityLocker.setTimeLimitPerMessage(anotherSchainName, 1200); - expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(1200); + expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(BigInt(1200)); }); it("should set gasprice", async () => { - const newBLSSignature: [BigNumber, BigNumber] = [ - BigNumber.from("0x2dedd4eaeac95881fbcaa4146f95a438494545c607bd57d560aa1d13d2679db8"), - BigNumber.from("0x2e9a10a0baf75ccdbd2b5cf81491673108917ade57dea40d350d4cbebd7b0965") + const newBLSSignature: [BigNumberish, BigNumberish] = [ + "0x2dedd4eaeac95881fbcaa4146f95a438494545c607bd57d560aa1d13d2679db8", + "0x2e9a10a0baf75ccdbd2b5cf81491673108917ade57dea40d350d4cbebd7b0965" ]; const sign = { blsSignature: newBLSSignature, @@ -142,8 +142,8 @@ describe("CommunityLocker", () => { const time = await currentTime(); await communityLocker.setGasPrice(100, time + 200, sign).should.be.eventually.rejectedWith("Timestamp should not be in the future"); await communityLocker.setGasPrice(100, time, sign); - expect(await communityLocker.mainnetGasPrice()).to.be.equal(100); - expect(await communityLocker.gasPriceTimestamp()).to.be.equal(time); + expect(await communityLocker.mainnetGasPrice()).to.be.equal(BigInt(100)); + expect(await communityLocker.gasPriceTimestamp()).to.be.equal(BigInt(time)); skipTime(60); @@ -151,7 +151,7 @@ describe("CommunityLocker", () => { await communityLocker.setGasPrice(101, time, sign).should.be.eventually.rejectedWith("Gas price timestamp already updated"); await communityLocker.setGasPrice(101, time + 70, sign).should.be.eventually.rejectedWith("Timestamp should not be in the future"); await communityLocker.setGasPrice(101, time + 40, sign); - expect(await communityLocker.mainnetGasPrice()).to.be.equal(101); - expect(await communityLocker.gasPriceTimestamp()).to.be.equal(time + 40); + expect(await communityLocker.mainnetGasPrice()).to.be.equal(BigInt(101)); + expect(await communityLocker.gasPriceTimestamp()).to.be.equal(BigInt(time + 40)); }); }); From 42646c38f8520521438ca7ae45fa4c9acbb0f519 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:50:54 +0000 Subject: [PATCH 08/45] Refactor and add couple tests in CommunityPool --- test/CommunityPool.ts | 186 +++++++++++++++++++++--------------------- 1 file changed, 94 insertions(+), 92 deletions(-) diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 80100176f..2db2f29b6 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -28,8 +28,8 @@ import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { deployCommunityPoolTester } from "./utils/deploy/test/communityPoolTester"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, toNumber } from "ethers"; import { expect } from "chai"; import { deployMessages } from "./utils/deploy/messages"; @@ -46,7 +46,7 @@ describe("CommunityPool", () => { const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; const schainName2 = "Schain2"; - let minTransactionGas: BigNumber; + let minTransactionGas: BigNumberish; before(async () => { [deployer, user, node] = await ethers.getSigners(); @@ -129,97 +129,99 @@ describe("CommunityPool", () => { it("should not allow to withdraw from user wallet if CommunityPool is not registered for all chains", async () => { const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxy.grantRole(extraContractRegistrarRole, deployer.address); - await messageProxy.registerExtraContractForAll(communityPool.address); + await messageProxy.registerExtraContractForAll(await communityPool.getAddress()); const tx = await messageProxy.addConnectedChain(schainName); - const wei = minTransactionGas.mul(tx.gasPrice as BigNumber); + const wei = BigInt(minTransactionGas) * tx.gasPrice; await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString() }); - await messageProxy.removeExtraContractForAll(communityPool.address); + await messageProxy.removeExtraContractForAll(await communityPool.getAddress()); await communityPool.connect(user).withdrawFunds(schainName, wei.toString()) .should.be.eventually.rejectedWith("Sender contract is not registered"); }); describe("when chain connected and contract registered", async () => { - let gasPrice: BigNumber; + let gasPrice: BigNumberish; beforeEach(async () => { - await messageProxy.registerExtraContract(schainName, communityPool.address); - gasPrice = ((await messageProxy.addConnectedChain(schainName)).gasPrice) as BigNumber; + await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + gasPrice = ((await messageProxy.addConnectedChain(schainName)).gasPrice) as BigNumberish; }); it("should not allow to withdraw from user wallet if CommunityPool is not registered", async () => { - const amount = minTransactionGas.mul(gasPrice); + const amount = BigInt(minTransactionGas) * BigInt(gasPrice); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString() }); - await messageProxy.removeExtraContract(schainName, communityPool.address); + await messageProxy.removeExtraContract(schainName, await communityPool.getAddress()); await communityPool.connect(user).withdrawFunds(schainName, amount.toString()) .should.be.eventually.rejectedWith("Sender contract is not registered"); }); it("should revert if user recharged not enough money for most costly transaction", async () => { - const amount = minTransactionGas.mul(gasPrice).sub(1); + const amount = BigInt(minTransactionGas) * BigInt(gasPrice) - BigInt(1); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }) .should.be.eventually.rejectedWith("Not enough ETH for transaction"); }); it("should revert if gasprice was not set for getRecommendedRechargeAmount call", async () => { - await communityPool.getRecommendedRechargeAmount(ethers.utils.id(schainName), user.address) + await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address) .should.be.eventually.rejectedWith("Gas price is not set"); }); it("should get recommended recharge amount if gasprice was set", async () => { const multiplierNumerator = await communityPool.multiplierNumerator(); const multiplierDivider = await communityPool.multiplierDivider(); - const amount = await communityPool.getRecommendedRechargeAmount(ethers.utils.id(schainName), user.address, { gasPrice }); - expect(amount).to.be.equal(minTransactionGas.mul(gasPrice).mul(multiplierNumerator).div(multiplierDivider)); + const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice }); + expect(amount).to.be.equal(BigInt(minTransactionGas) * BigInt(gasPrice) * multiplierNumerator / multiplierDivider); }); it("should recharge wallet if user passed enough money", async () => { - const amount = minTransactionGas.mul(gasPrice); + const amount = BigInt(minTransactionGas) * BigInt(gasPrice); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); let userBalance = await communityPool.getBalance(user.address, schainName); userBalance.should.be.deep.equal(amount); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); userBalance = await communityPool.getBalance(user.address, schainName); - userBalance.should.be.deep.equal(amount.mul(2)); - expect(BigNumber.from(await messageProxy.getOutgoingMessagesCounter(schainName)).toString()).to.be.equal(BigNumber.from(1).toString()); + userBalance.should.be.deep.equal(amount * BigInt(2)); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(1); }); - it("should recharge wallet if user passed enough money with basefee", async () => { - const blockNumber = await ethers.provider.getBlockNumber(); - const baseFeePerGas = (await ethers.provider.getBlock(blockNumber)).baseFeePerGas; - const baseFeeCandidate = (baseFeePerGas ? baseFeePerGas : new BigNumber(1, "hex")); - const basefee = baseFeeCandidate.toNumber() === 0 ? BigNumber.from(1) : baseFeeCandidate; - const amount = minTransactionGas.mul(basefee); - // - // comment this check until issue https://github.com/NomicFoundation/hardhat/issues/1688 would be fixed - // - // const amount = await communityPool.getRecommendedRechargeAmount(ethers.utils.id(schainName), user.address)); - // - await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.sub(1).toString(), gasPrice: basefee.toNumber()}).should.be.eventually.rejectedWith("Not enough ETH for transaction"); - await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: basefee.toNumber()}); - let userBalance = await communityPool.getBalance(user.address, schainName); - userBalance.should.be.deep.equal(amount); - await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: basefee.toNumber()}); - userBalance = await communityPool.getBalance(user.address, schainName); - userBalance.should.be.deep.equal(amount.mul(2)); - expect(BigNumber.from(await messageProxy.getOutgoingMessagesCounter(schainName)).toString()).to.be.equal(BigNumber.from(1).toString()); - }); - - it("should allow to withdraw money", async () => { - const amount = minTransactionGas.mul(gasPrice).toNumber(); - await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: (amount + 1).toString(), gasPrice }); - expect(BigNumber.from(await messageProxy.getOutgoingMessagesCounter(schainName)).toString()).to.be.equal(BigNumber.from(1).toString()); - - await communityPool.connect(user).withdrawFunds(schainName, amount + 2) + it("should reject if user tries to withdraw more than he has", async () => { + const amount = BigInt(minTransactionGas) * BigInt(gasPrice); + await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); + await communityPool.connect(user).withdrawFunds(schainName, amount + BigInt(1), { gasPrice }) .should.be.eventually.rejectedWith("Balance is too low"); + }); - const balanceBefore = await getBalance(user.address); - const tx = await (await communityPool.connect(user).withdrawFunds(schainName, amount, { gasPrice })).wait(); - const balanceAfter = await getBalance(user.address); - const transactionFee = tx.gasUsed.mul(gasPrice).toNumber(); - (balanceAfter + transactionFee / 1e18).should.be.almost(balanceBefore + amount / 1e18); + it("should reject if user passes not enough money for transaction", async () => { + const tooSmallAmount = BigInt(1); + await communityPool + .connect(user) + .rechargeUserWallet(schainName, user.address, { value: tooSmallAmount, gasPrice }) + .should.be.eventually.rejectedWith("Not enough ETH for transaction"); + }); + + it("should recharge wallet if user passed enough money", async () => { + const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice: gasPrice }); + await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: gasPrice}); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); + let userBalance = await communityPool.getBalance(user.address, schainName); + userBalance.should.be.deep.equal(amount); + await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: gasPrice}); + userBalance = await communityPool.getBalance(user.address, schainName); + userBalance.should.be.deep.equal(amount * BigInt(2)); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); + }); + + it("should recharge wallet, withdraw all money and check outgoingMessageCounter", async () => { + const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice }); + await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); - await communityPool.connect(user).withdrawFunds(schainName, 1, { gasPrice }); + await communityPool.connect(user).withdrawFunds(schainName, amount.toString(), { gasPrice }); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(2)); + }); - expect(BigNumber.from(await messageProxy.getOutgoingMessagesCounter(schainName)).toString()).deep.equal(BigNumber.from(2).toString()); + it("should allow to withdraw money", async () => { + const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice }); + await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); + await communityPool.connect(user).withdrawFunds(schainName, amount.toString(), { gasPrice }); }); }); @@ -230,13 +232,13 @@ describe("CommunityPool", () => { await communityPool.addSchainContract(schainName2, mockContractOnSchain); for (const schain of [schainName, schainName2]) { - await messageProxy.registerExtraContract(schain, communityPool.address); + await messageProxy.registerExtraContract(schain, await communityPool.getAddress()); await messageProxy.addConnectedChain(schain); } - const gasPrice = BigNumber.from(1e9); - const wei = minTransactionGas.mul(gasPrice); - const wei2 = minTransactionGas.mul(gasPrice).mul(2); + const gasPrice = BigInt(1e9); + const wei = BigInt(minTransactionGas) * gasPrice; + const wei2 = BigInt(minTransactionGas) * gasPrice * BigInt(2); const res1 = await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString(), gasPrice }); const res2 = await communityPool.connect(user).rechargeUserWallet(schainName2, user.address, { value: wei2.toString(), gasPrice }); const userBalance = await communityPool.getBalance(user.address, schainName); @@ -246,48 +248,45 @@ describe("CommunityPool", () => { await expect(res1) .to.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, communityPool.address, mockContractOnSchain, activateUserData); + .withArgs(schainHash, 0, await communityPool.getAddress(), mockContractOnSchain, activateUserData); await expect(res2) .to.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash2, 0, communityPool.address, mockContractOnSchain, activateUserData); - - const res3 = await (await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString(), gasPrice })).wait(); - expect(res3.events).to.be.empty; - }); - - it("should allow to withdraw money", async () => { - await messageProxy.registerExtraContract(schainName, communityPool.address); - const gasPrice = (await messageProxy.addConnectedChain(schainName)).gasPrice as BigNumber; - const wei = minTransactionGas.mul(gasPrice).toNumber(); - await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString(), gasPrice }); + .withArgs(schainHash2, 0, await communityPool.getAddress(), mockContractOnSchain, activateUserData); + + const res3 = await communityPool.connect(user).rechargeUserWallet( + schainName, + user.address, + { value: wei.toString(), gasPrice: gasPrice } + ); + await expect(res3).to.not.emit(messageProxy, "OutgoingMessage"); }); it("should set new minimal transaction gas", async () => { - const newMinTransactionGas = BigNumber.from(100); + const newMinTransactionGas = 100; const CONSTANT_SETTER_ROLE = await communityPool.CONSTANT_SETTER_ROLE(); await communityPool.grantRole(CONSTANT_SETTER_ROLE, deployer.address); - expect(BigNumber.from(await communityPool.minTransactionGas()).toString()).to.be.equal(BigNumber.from(1000000).toString()); + expect(await communityPool.minTransactionGas()).to.be.equal(1000000); await communityPool.connect(user).setMinTransactionGas(newMinTransactionGas) .should.be.eventually.rejectedWith("CONSTANT_SETTER_ROLE is required"); await communityPool.setMinTransactionGas(newMinTransactionGas); - expect(BigNumber.from(await communityPool.minTransactionGas()).toString()).to.be.equal(newMinTransactionGas.toString()); + expect(await communityPool.minTransactionGas()).to.be.equal(newMinTransactionGas); }); it("should set new multiplier", async () => { - const newMultipliermultiplierNumeratorr = BigNumber.from(5); - const newMultiplierDivider = BigNumber.from(4); + const newMultipliermultiplierNumeratorr = 5; + const newMultiplierDivider = 4; const CONSTANT_SETTER_ROLE = await communityPool.CONSTANT_SETTER_ROLE(); await communityPool.grantRole(CONSTANT_SETTER_ROLE, deployer.address); - expect(BigNumber.from(await communityPool.multiplierNumerator()).toString()).to.be.equal(BigNumber.from(3).toString()); - expect(BigNumber.from(await communityPool.multiplierDivider()).toString()).to.be.equal(BigNumber.from(2).toString()); + expect(await communityPool.multiplierNumerator()).to.be.equal(3); + expect(await communityPool.multiplierDivider()).to.be.equal(2); await communityPool.connect(user).setMultiplier(newMultipliermultiplierNumeratorr, newMultiplierDivider) .should.be.eventually.rejectedWith("CONSTANT_SETTER_ROLE is required"); await communityPool.setMultiplier(newMultipliermultiplierNumeratorr, 0).should.be.eventually.rejectedWith("Divider is zero"); await communityPool.setMultiplier(newMultipliermultiplierNumeratorr, newMultiplierDivider); - expect(BigNumber.from(await communityPool.multiplierNumerator()).toString()).to.be.equal(BigNumber.from(newMultipliermultiplierNumeratorr).toString()); - expect(BigNumber.from(await communityPool.multiplierDivider()).toString()).to.be.equal(BigNumber.from(newMultiplierDivider).toString()); + expect(await communityPool.multiplierNumerator()).to.be.equal(newMultipliermultiplierNumeratorr); + expect(await communityPool.multiplierDivider()).to.be.equal(newMultiplierDivider); }); it("should set rejected when call refundGasByUser not from messageProxy contract", async () => { @@ -322,9 +321,9 @@ describe("CommunityPool", () => { it("should be rejected with Node address must be set", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester.address); - const gasPrice = tx.gasPrice as BigNumber; - const wei = minTransactionGas.mul(gasPrice).mul(2); + await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + const gasPrice = tx.gasPrice as BigNumberish; + const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * BigInt(2); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, "0x0000000000000000000000000000000000000000", user.address, 0) .should.be.eventually.rejectedWith("Node address must be set"); @@ -333,20 +332,21 @@ describe("CommunityPool", () => { it("should refund node", async () => { const balanceBefore = await getBalance(node.address); const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester.address); - const gasPrice = tx.gasPrice as BigNumber; - const wei = minTransactionGas.mul(gasPrice).mul(2); + await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + const gasPrice = tx.gasPrice as BigNumberish; + const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * BigInt(2); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice }); const balanceAfter = await getBalance(node.address); - (balanceAfter).should.be.almost(balanceBefore + (1000000 * BigNumber.from(gasPrice).toNumber()) / 1e18); + const calculatedBalanceAfter = balanceBefore + (1000000 * toNumber(gasPrice)) / 1e18; + balanceAfter.should.be.almost(calculatedBalanceAfter); }); it("should lock user", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester.address); - const gasPrice = tx.gasPrice as BigNumber; - const wei = minTransactionGas.mul(gasPrice); + await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + const gasPrice = tx.gasPrice as BigNumberish; + const wei = BigInt(minTransactionGas) * BigInt(gasPrice); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.true; @@ -356,14 +356,16 @@ describe("CommunityPool", () => { it("should lock user with extra low balance", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester.address); - let gasPrice = tx.gasPrice as BigNumber; - const wei = minTransactionGas.mul(gasPrice); - gasPrice = gasPrice?.mul(2); + await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + const gasPrice = tx.gasPrice as BigNumberish; + const wei = BigInt(minTransactionGas) * BigInt(gasPrice); + const gasPriceDuringGasSpikes = BigInt(gasPrice) * BigInt(2); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.true; - await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice }); + await messageProxyTester + .connect(deployer) + .refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice: gasPriceDuringGasSpikes }); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; }); }); From 257e758abca5db902e0fc78ea3bf8b292a283187 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:51:26 +0000 Subject: [PATCH 09/45] Refactor ERCOnChain tests and Linker --- test/ERC20OnChain.ts | 9 +++-- test/ERC721OnChain.ts | 6 ++-- test/Linker.ts | 84 +++++++++++++++++++++---------------------- 3 files changed, 49 insertions(+), 50 deletions(-) diff --git a/test/ERC20OnChain.ts b/test/ERC20OnChain.ts index a2c495725..1da909288 100644 --- a/test/ERC20OnChain.ts +++ b/test/ERC20OnChain.ts @@ -10,8 +10,7 @@ chai.use(chaiAsPromised); import { deployERC20OnChain } from "./utils/deploy/erc20OnChain"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; describe("ERC20OnChain", () => { @@ -36,7 +35,7 @@ describe("ERC20OnChain", () => { await eRC20OnChain.connect(deployer).mint(account, value); // expectation const balance = await eRC20OnChain.balanceOf(account); - parseInt(BigNumber.from(balance).toString(), 10).should.be.equal(value); + balance.should.be.equal(value); }); it("should invoke `burn`", async () => { @@ -49,7 +48,7 @@ describe("ERC20OnChain", () => { await eRC20OnChain.connect(deployer).burn(amount); // expectation const balance = await eRC20OnChain.balanceOf(deployer.address); - parseInt(BigNumber.from(balance).toString(), 10).should.be.equal(mintAmount - amount); + balance.should.be.equal(mintAmount - amount); }); it("should invoke `burnFrom`", async () => { @@ -65,6 +64,6 @@ describe("ERC20OnChain", () => { await eRC20OnChain.connect(deployer).burnFrom(account, amount); // expectation const balance = await eRC20OnChain.balanceOf(account); - parseInt(BigNumber.from(balance).toString(), 10).should.be.equal(mintAmount - amount); + balance.should.be.equal(mintAmount - amount); }); }); diff --git a/test/ERC721OnChain.ts b/test/ERC721OnChain.ts index 0a4692394..9aca07e15 100644 --- a/test/ERC721OnChain.ts +++ b/test/ERC721OnChain.ts @@ -10,7 +10,7 @@ chai.use(chaiAsPromised); import { deployERC721OnChain } from "./utils/deploy/erc721OnChain"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; @@ -52,7 +52,7 @@ describe("ERC721OnChain", () => { it("should reject with `ERC721Burnable: caller is not owner nor approved` when invoke `burn`", async () => { // preparation - const error = "ERC721: caller is not token owner nor approved"; + const error = "ERC721: caller is not token owner or approved"; const tokenId = 55; const account = user; // mint to avoid `owner query for nonexistent token` error @@ -70,7 +70,7 @@ describe("ERC721OnChain", () => { // execution const res = await (await eRC721OnChain.connect(deployer).setTokenURI(tokenId, tokenURI)).wait(); // expectation - expect(res.status).to.be.equal(1); + expect(res?.status).to.be.equal(1); }); }); diff --git a/test/Linker.ts b/test/Linker.ts index 74993c43b..627e7c551 100644 --- a/test/Linker.ts +++ b/test/Linker.ts @@ -49,7 +49,7 @@ import { deployContractManager } from "./utils/skale-manager-utils/contractManag import { initializeSchain } from "./utils/skale-manager-utils/schainsInternal"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; const schainName = "TestSchain"; @@ -78,16 +78,16 @@ describe("Linker", () => { depositBoxEth = await deployDepositBoxEth(contractManager, linker, messageProxy); depositBoxERC20 = await deployDepositBoxERC20(contractManager, linker, messageProxy); depositBoxERC721 = await deployDepositBoxERC721(contractManager, linker, messageProxy); - await linker.removeMainnetContract(depositBoxEth.address); - await linker.removeMainnetContract(depositBoxERC20.address); - await linker.removeMainnetContract(depositBoxERC721.address); - await linker.removeMainnetContract(linker.address); + await linker.removeMainnetContract(await depositBoxEth.getAddress()); + await linker.removeMainnetContract(await depositBoxERC20.getAddress()); + await linker.removeMainnetContract(await depositBoxERC721.getAddress()); + await linker.removeMainnetContract(await linker.getAddress()); await linker.grantRole(await linker.LINKER_ROLE(), deployer.address); - await linker.grantRole(await linker.LINKER_ROLE(), linker.address); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker.address); + await linker.grantRole(await linker.LINKER_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, deployer.address, 1, 1); - await messageProxy.registerExtraContractForAll(linker.address); + await messageProxy.registerExtraContractForAll(await linker.getAddress()); }); it("should connect schain", async () => { @@ -107,11 +107,11 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); - await linker.connect(deployer).registerMainnetContract(depositBoxEth.address); + await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); await linker.connect(deployer).connectSchain(schainName, []) .should.be.eventually.rejectedWith("Incorrect number of addresses"); @@ -134,20 +134,20 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC20.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC721.address)).to.equal(false); - expect(await linker.hasMainnetContract(linker.address)).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await linker.getAddress())).to.equal(false); - await linker.connect(deployer).registerMainnetContract(depositBoxEth.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC20.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC721.address); - await linker.connect(deployer).registerMainnetContract(linker.address); + await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); + await linker.connect(deployer).registerMainnetContract(await linker.getAddress()); - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(true); - expect(await linker.hasMainnetContract(depositBoxERC20.address)).to.equal(true); - expect(await linker.hasMainnetContract(depositBoxERC721.address)).to.equal(true); - expect(await linker.hasMainnetContract(linker.address)).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(await linker.getAddress())).to.equal(true); await linker.connect(deployer).connectSchain(schainName, []) .should.be.eventually.rejectedWith("Incorrect number of addresses"); @@ -174,10 +174,10 @@ describe("Linker", () => { it("should invoke `disconnectSchain` without mistakes", async () => { const tokenManagerAddress = user.address; - await linker.connect(deployer).registerMainnetContract(depositBoxEth.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC20.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC721.address); - await linker.connect(deployer).registerMainnetContract(linker.address); + await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); + await linker.connect(deployer).registerMainnetContract(await linker.getAddress()); await linker.connect(deployer).connectSchain(schainName, [tokenManagerAddress, tokenManagerAddress, tokenManagerAddress, tokenManagerAddress]); @@ -193,17 +193,17 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC20.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC721.address)).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); - await linker.connect(deployer).registerMainnetContract(depositBoxEth.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC20.address); - await linker.connect(deployer).registerMainnetContract(depositBoxERC721.address); + await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); + await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(true); - expect(await linker.hasMainnetContract(depositBoxERC20.address)).to.equal(true); - expect(await linker.hasMainnetContract(depositBoxERC721.address)).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(true); expect(await linker.hasMainnetContract(nullAddress)).to.equal(false); expect(await linker.hasMainnetContract(tokenManagerAddress)).to.equal(false); @@ -227,13 +227,13 @@ describe("Linker", () => { expect(await linker.hasMainnetContract(nullAddress)).to.equal(false); - await linker.connect(deployer).removeMainnetContract(depositBoxEth.address); - await linker.connect(deployer).removeMainnetContract(depositBoxERC20.address); - await linker.connect(deployer).removeMainnetContract(depositBoxERC721.address); + await linker.connect(deployer).removeMainnetContract(await depositBoxEth.getAddress()); + await linker.connect(deployer).removeMainnetContract(await depositBoxERC20.getAddress()); + await linker.connect(deployer).removeMainnetContract(await depositBoxERC721.getAddress()); - expect(await linker.hasMainnetContract(depositBoxEth.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC20.address)).to.equal(false); - expect(await linker.hasMainnetContract(depositBoxERC721.address)).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); }); it("should kill schain by schain owner first", async () => { From d37c47431615d46689d997b8892b4f19003e2f39 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 16:51:50 +0000 Subject: [PATCH 10/45] Fix MessageProxy tests --- test/MessageProxy.ts | 478 +++++++++--------- .../ERC721MintingFromSchainToMainnet.ts | 110 ++-- 2 files changed, 287 insertions(+), 301 deletions(-) diff --git a/test/MessageProxy.ts b/test/MessageProxy.ts index 3b346610d..6db9e6518 100644 --- a/test/MessageProxy.ts +++ b/test/MessageProxy.ts @@ -38,7 +38,8 @@ import { KeyStorageMock, CommunityPool, EtherbaseMock, - SchainsInternal + SchainsInternal, + Wallets } from "../typechain/"; import { getPublicKey, stringKeccak256 } from "./utils/helper"; import { deployLinker } from "./utils/deploy/mainnet/linker"; @@ -52,8 +53,8 @@ import { deployMessageProxyCaller } from "./utils/deploy/test/messageProxyCaller import { deployMessages } from "./utils/deploy/messages"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { expect } from "chai"; import { MessageProxyForSchainTester } from "../typechain"; import { deployMessageProxyForSchainTester } from "./utils/deploy/test/messageProxyForSchainTester"; @@ -70,7 +71,7 @@ describe("MessageProxy", () => { let customer: SignerWithAddress; let agent: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let keyStorage: KeyStorageMock; let messageProxyForSchain: MessageProxyForSchainTester; @@ -88,9 +89,9 @@ describe("MessageProxy", () => { const schainName = "Schain"; const schainHash = stringKeccak256(schainName); - const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781"), + const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -99,17 +100,17 @@ describe("MessageProxy", () => { before(async () => { [deployer, user, client, customer, agent, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }); after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - BigInt(ethers.parseEther("1"))}); }); describe("MessageProxy for mainnet", async () => { - let gasPrice: BigNumber; + let gasPrice: BigNumberish; beforeEach(async () => { contractManager = await deployContractManager(contractManagerAddress); messageProxyForMainnet = await deployMessageProxyForMainnet(contractManager); @@ -120,24 +121,24 @@ describe("MessageProxy", () => { communityPool = await deployCommunityPool(contractManager, imaLinker, messageProxyForMainnet); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), deployer.address); - const registerTx = await messageProxyForMainnet.registerExtraContract(schainName, caller.address); + const registerTx = await messageProxyForMainnet.registerExtraContract(schainName, await caller.getAddress()); if (registerTx.gasPrice) { gasPrice = registerTx.gasPrice; } }); it("should set constants", async () => { - const headerMessageGasCostPrevious = (await messageProxyForMainnet.headerMessageGasCost()).toNumber(); - const messageGasCostPrevious = (await messageProxyForMainnet.messageGasCost()).toNumber(); - const gasLimitPrevious = (await messageProxyForMainnet.gasLimit()).toNumber(); + const headerMessageGasCostPrevious = await messageProxyForMainnet.headerMessageGasCost(); + const messageGasCostPrevious = await messageProxyForMainnet.messageGasCost(); + const gasLimitPrevious = await messageProxyForMainnet.gasLimit(); const headerMessageGasCostNew = 5; const messageGasCostNew = 6; const gasLimitNew = 7; - expect((await messageProxyForMainnet.headerMessageGasCost()).toNumber()).to.equal(headerMessageGasCostPrevious); - expect((await messageProxyForMainnet.messageGasCost()).toNumber()).to.equal(messageGasCostPrevious); - expect((await messageProxyForMainnet.gasLimit()).toNumber()).to.equal(gasLimitPrevious); + expect(await messageProxyForMainnet.headerMessageGasCost()).to.equal(headerMessageGasCostPrevious); + expect(await messageProxyForMainnet.messageGasCost()).to.equal(messageGasCostPrevious); + expect(await messageProxyForMainnet.gasLimit()).to.equal(gasLimitPrevious); await messageProxyForMainnet.connect(user).setNewHeaderMessageGasCost( headerMessageGasCostNew @@ -156,17 +157,17 @@ describe("MessageProxy", () => { await messageProxyForMainnet.connect(user).setNewMessageGasCost(messageGasCostNew); await messageProxyForMainnet.connect(user).setNewGasLimit(gasLimitNew); - expect((await messageProxyForMainnet.headerMessageGasCost()).toNumber()).to.equal(headerMessageGasCostNew); - expect((await messageProxyForMainnet.messageGasCost()).toNumber()).to.equal(messageGasCostNew); - expect((await messageProxyForMainnet.gasLimit()).toNumber()).to.equal(gasLimitNew); + expect(await messageProxyForMainnet.headerMessageGasCost()).to.equal(headerMessageGasCostNew); + expect(await messageProxyForMainnet.messageGasCost()).to.equal(messageGasCostNew); + expect(await messageProxyForMainnet.gasLimit()).to.equal(gasLimitNew); await messageProxyForMainnet.connect(user).setNewHeaderMessageGasCost(headerMessageGasCostPrevious); await messageProxyForMainnet.connect(user).setNewMessageGasCost(messageGasCostPrevious); await messageProxyForMainnet.connect(user).setNewGasLimit(gasLimitPrevious); - expect((await messageProxyForMainnet.headerMessageGasCost()).toNumber()).to.equal(headerMessageGasCostPrevious); - expect((await messageProxyForMainnet.messageGasCost()).toNumber()).to.equal(messageGasCostPrevious); - expect((await messageProxyForMainnet.gasLimit()).toNumber()).to.equal(gasLimitPrevious); + expect(await messageProxyForMainnet.headerMessageGasCost()).to.equal(headerMessageGasCostPrevious); + expect(await messageProxyForMainnet.messageGasCost()).to.equal(messageGasCostPrevious); + expect(await messageProxyForMainnet.gasLimit()).to.equal(gasLimitPrevious); }); @@ -213,48 +214,42 @@ describe("MessageProxy", () => { }); it("should post outgoing message twice", async () => { - const contractAddress = messageProxyForMainnet.address; + const contractAddress = await messageProxyForMainnet.getAddress(); const amount = 4; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - const message1 = caller.postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); + const message1 = caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); await expect(message1) .to.emit(messageProxyForMainnet, 'PreviousMessageReference') .withArgs(0, 0); - let outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName) - ); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); - const lastOutgoingMessageBlockId = BigNumber.from( - await messageProxyForMainnet.getLastOutgoingMessageBlockId(schainName) - ); + let outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(1); + const lastOutgoingMessageBlockId = await messageProxyForMainnet.getLastOutgoingMessageBlockId(schainName); - const message2 = caller.postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); + const message2 = caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); await expect(message2) .to.emit(messageProxyForMainnet, 'PreviousMessageReference') .withArgs(1, lastOutgoingMessageBlockId); - outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName) - ); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(2)); + outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(2); }); it("should pause with a role and unpause", async () => { - const contractAddress = messageProxyForMainnet.address; + const contractAddress = await messageProxyForMainnet.getAddress(); const amount = 4; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); const schainOwner = user; await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); const schainsInternal = (await ethers.getContractFactory("SchainsInternal")).attach(await contractManager.getContract("SchainsInternal")) as SchainsInternal; @@ -264,10 +259,9 @@ describe("MessageProxy", () => { await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); - let outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + let outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(1); (await messageProxyForMainnet.isPaused(schainHash)).should.be.deep.equal(false); @@ -293,7 +287,7 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(true); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) .should.be.rejectedWith("IMA is paused"); await messageProxyForMainnet.connect(client).resume(schainName).should.be.rejectedWith("Incorrect sender"); @@ -309,10 +303,9 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(false); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); - outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(2)); + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(2); await messageProxyForMainnet.connect(client).pause(schainName); @@ -322,24 +315,24 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(true); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) .should.be.rejectedWith("IMA is paused"); await messageProxyForMainnet.connect(deployer).resume(schainName); await messageProxyForMainnet.connect(schainOwner).resume(schainName).should.be.rejectedWith("Already unpaused"); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); - outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(3)); + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(3); }); it("should allow schain owner to send message", async () => { const message = "0xd2"; const schainOwner = user; - const schainsInternal = (await ethers.getContractFactory("SchainsInternal")).attach(await contractManager.getContract("SchainsInternal")) as SchainsInternal; + const SchainsInternalFactory = await ethers.getContractFactory("SchainsInternal"); + const schainsInternal = SchainsInternalFactory.attach(await contractManager.getContract("SchainsInternal")) as SchainsInternal; const otherSchainName = "something else"; const otherSchainHash = stringKeccak256(otherSchainName); @@ -377,20 +370,20 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, communityPool.address); + await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); - const amountWei = minTransactionGas.mul(gasPrice); + const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -445,9 +438,8 @@ describe("MessageProxy", () => { outgoingMessages, sign ); - const incomingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter.should.be.deep.equal(BigNumber.from(4)); + const incomingMessagesCounter = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter.should.be.equal(4); }); it("should post incoming message and reimburse from CommunityPool", async () => { @@ -466,15 +458,15 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, communityPool.address); + await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); await depositBox.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); - const amountWei = minTransactionGas.mul(gasPrice).mul(2); + const amountWei = minTransactionGas * BigInt(gasPrice) * BigInt(2); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address); + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); const message1 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 1), }; @@ -488,12 +480,12 @@ describe("MessageProxy", () => { }; await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - await communityPool.connect(deployer).addSchainContract(schainName, communityPool.address); + await communityPool.connect(deployer).addSchainContract(schainName, await communityPool.getAddress()); await communityPool.connect(client).rechargeUserWallet(schainName, client.address, {value: amountWei.toString()}); const testWalletsFactory = await ethers.getContractFactory("Wallets"); - const testWallets = testWalletsFactory.attach(await contractManager.getContract("Wallets")); + const testWallets = testWalletsFactory.attach(await contractManager.getContract("Wallets")) as Wallets; let balance = await testWallets.getSchainBalance(schainHash); let userBalance = await communityPool.getBalance(client.address, schainName); @@ -518,7 +510,7 @@ describe("MessageProxy", () => { newBalance.should.be.lt(balance); newUserBalance.should.be.deep.equal(userBalance); - await messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address); + await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()); balance = newBalance; userBalance = newUserBalance; @@ -537,7 +529,7 @@ describe("MessageProxy", () => { newUserBalance = await communityPool.getBalance(client.address, schainName); newBalance.should.be.deep.equal(balance); - newUserBalance.toNumber().should.be.lessThan(userBalance.toNumber()); + newUserBalance.should.be.lessThan(userBalance); }); it("should not post incoming messages when IMA bridge is paused", async () => { @@ -555,21 +547,21 @@ describe("MessageProxy", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, communityPool.address); + await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); const minTransactionGas = await communityPool.minTransactionGas(); - const amountWei = minTransactionGas.mul(gasPrice); + const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -624,9 +616,8 @@ describe("MessageProxy", () => { outgoingMessages, sign ); - let incomingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter.should.be.deep.equal(BigNumber.from(4)); + let incomingMessagesCounter = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter.should.be.equal(4); const pauseableRole = await messageProxyForMainnet.PAUSABLE_ROLE(); @@ -654,9 +645,8 @@ describe("MessageProxy", () => { sign ); - incomingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter.should.be.deep.equal(BigNumber.from(6)); + incomingMessagesCounter = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter.should.be.equal(6); }); it("should not post incoming messages with incorrect address", async () => { @@ -675,20 +665,20 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, communityPool.address); + await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); - const amountWei = minTransactionGas.mul(gasPrice); + const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -752,13 +742,12 @@ describe("MessageProxy", () => { outgoingMessages, sign ); - const incomingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter.should.be.deep.equal(BigNumber.from(4)); + const incomingMessagesCounter = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter.should.be.equal(4); }); it("should get outgoing messages counter", async () => { - const contractAddress = depositBox.address; + const contractAddress = await depositBox.getAddress(); const amount = 5; const addressTo = client.address; const bytesData = await messages.encodeTransferEthMessage(addressTo, amount); @@ -768,16 +757,14 @@ describe("MessageProxy", () => { await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - const outgoingMessagesCounter0 = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter0.should.be.deep.equal(BigNumber.from(0)); + const outgoingMessagesCounter0 = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter0.should.be.equal(0); await caller - .postOutgoingMessageTester(messageProxyForMainnet.address, schainHash, contractAddress, bytesData); + .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should get incoming messages counter", async () => { @@ -799,14 +786,14 @@ describe("MessageProxy", () => { const message1 = { amount: 3, data: "0x11", - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, to: client.address }; const message2 = { amount: 7, data: "0x22", - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: user.address, to: customer.address }; @@ -823,9 +810,8 @@ describe("MessageProxy", () => { await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - const incomingMessagesCounter0 = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter0.should.be.deep.equal(BigNumber.from(0)); + const incomingMessagesCounter0 = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter0.should.be.equal(0); await messageProxyForMainnet .connect(nodeAddress) @@ -835,9 +821,8 @@ describe("MessageProxy", () => { outgoingMessages, sign ); - const incomingMessagesCounter = BigNumber.from( - await messageProxyForMainnet.getIncomingMessagesCounter(schainName)); - incomingMessagesCounter.should.be.deep.equal(BigNumber.from(2)); + const incomingMessagesCounter = await messageProxyForMainnet.getIncomingMessagesCounter(schainName); + incomingMessagesCounter.should.be.equal(2); }); it("should get outgoing messages counter", async () => { @@ -868,14 +853,14 @@ describe("MessageProxy", () => { const message1 = { amount: 3, data: "0x11", - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: deployer.address, to: client.address }; const message2 = { amount: 7, data: "0x22", - destinationContract: depositBox.address, + destinationContract: await depositBox.getAddress(), sender: user.address, to: customer.address }; @@ -906,9 +891,9 @@ describe("MessageProxy", () => { const outgoingMessagesCounter0 = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter0.should.be.equal(0); - await caller.postOutgoingMessageTester(messageProxyForMainnet.address, + await caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, - depositBox.address, + await depositBox.getAddress(), bytesData, ); @@ -940,7 +925,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: receiverMock.address, + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; @@ -953,10 +938,10 @@ describe("MessageProxy", () => { hashB: HashB, }; - await messageProxyForMainnet.registerExtraContract(schainName, receiverMock.address); + await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); let a = await receiverMock.a(); - expect(a.toNumber()).be.equal(0); + expect(a).be.equal(0); const res = await (await messageProxyForMainnet .connect(nodeAddress) @@ -968,8 +953,8 @@ describe("MessageProxy", () => { )).wait(); a = await receiverMock.a(); - expect(a.toNumber()).be.equal(0); - expect(res.gasUsed.toNumber()).to.be.greaterThan(1000000); + expect(a).be.equal(0); + expect(res?.gasUsed).to.be.greaterThan(1000000); }); @@ -992,13 +977,13 @@ describe("MessageProxy", () => { const testCallReceiverContract = await ethers.getContractFactory("TestCallReceiverContract"); const receiverMock = await testCallReceiverContract.deploy(); - await messageProxyForMainnet.registerExtraContract(schainName, receiverMock.address); + await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); const startingCounter = 0; const message1 = { amount: 0, - data: ethers.utils.defaultAbiCoder.encode(["uint"], [1]), - destinationContract: receiverMock.address, + data: ethers.AbiCoder.defaultAbiCoder().encode(["uint"], [1]), + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; @@ -1010,9 +995,9 @@ describe("MessageProxy", () => { hashB: HashB, }; - const sixtyFourTimesA = ethers.utils.hexlify(Array(64).fill("A".charCodeAt(0))); + const sixtyFourTimesA = ethers.hexlify(new Uint8Array(Array(64).fill("A".charCodeAt(0)))); const event = { - msgCounter: BigNumber.from(0), + msgCounter: 0, message: sixtyFourTimesA } await expect( @@ -1048,14 +1033,14 @@ describe("MessageProxy", () => { const testCallReceiverContract = await ethers.getContractFactory("TestCallReceiverContract"); const receiverMock = await testCallReceiverContract.deploy(); - await messageProxyForMainnet.registerExtraContract(schainName, receiverMock.address); + await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); const startingCounter = 0; const message1 = { amount: 0, - data: ethers.utils.defaultAbiCoder.encode(["uint"], [2]), - destinationContract: receiverMock.address, + data: ethers.AbiCoder.defaultAbiCoder().encode(["uint"], [2]), + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; @@ -1069,7 +1054,7 @@ describe("MessageProxy", () => { const panicErrorCodeDivideByZero = "12"; const event = { - msgCounter: BigNumber.from(0), + msgCounter: 0, message: "0x" + panicErrorCodeDivideByZero.padStart(64, "0") } await expect( @@ -1098,184 +1083,184 @@ describe("MessageProxy", () => { describe("register and remove extra contracts", async () => { it("should register extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).registerExtraContract(schainName, depositBox.address) + await messageProxyForMainnet.connect(user).registerExtraContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Not enough permissions to register extra contract"); await messageProxyForMainnet.registerExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox.address)).to.be.equal(false); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox.address)).to.be.equal(true); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(false); + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(true); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(depositBox.address); + expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(await depositBox.getAddress()); await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getContractRegisteredRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address) + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should register extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).registerExtraContractForAll(depositBox.address) + await messageProxyForMainnet.connect(user).registerExtraContractForAll(await depositBox.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForMainnet.registerExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, depositBox.address)).to.be.equal(false); - await messageProxyForMainnet.registerExtraContractForAll(depositBox.address); - expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, depositBox.address)).to.be.equal(true); + expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, await depositBox.getAddress())).to.be.equal(false); + await messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()); + expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, await depositBox.getAddress())).to.be.equal(true); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(depositBox.address); + expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(await depositBox.getAddress()); await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address) + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered for all chains"); - await messageProxyForMainnet.registerExtraContractForAll(depositBox.address) + await messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should register reimbursed contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).addReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.connect(user).addReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Not enough permissions to add reimbursed contract"); await messageProxyForMainnet.addReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); - await messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Contract is not registered"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox.address)).to.be.equal(false); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address); - await messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox.address)).to.be.equal(true); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); + await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(true); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1))[0]).to.be.equal(depositBox.address); + expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1))[0]).to.be.equal(await depositBox.getAddress()); await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Reimbursed contract is already added"); }); it("should remove extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeExtraContract(schainName, depositBox.address) + await messageProxyForMainnet.connect(user).removeExtraContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Not enough permissions to register extra contract"); await messageProxyForMainnet.removeExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.registerExtraContract(schainName, depositBox.address) + messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ExtraContractRegistered" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); await expect( - messageProxyForMainnet.removeExtraContract(schainName, depositBox.address) + messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ExtraContractRemoved" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - await messageProxyForMainnet.removeExtraContract(schainName, depositBox.address) + await messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Extra contract is not registered"); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox.address)).to.be.equal(false); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(false); }); it("should remove extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeExtraContractForAll(depositBox.address) + await messageProxyForMainnet.connect(user).removeExtraContractForAll(await depositBox.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForMainnet.removeExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); await expect( - messageProxyForMainnet.registerExtraContractForAll(depositBox.address) + messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ExtraContractRegistered" - ).withArgs(zeroBytes32, depositBox.address); + ).withArgs(zeroBytes32, await depositBox.getAddress()); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeExtraContractForAll(depositBox.address) + messageProxyForMainnet.removeExtraContractForAll(await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ExtraContractRemoved" - ).withArgs(zeroBytes32, depositBox.address); + ).withArgs(zeroBytes32, await depositBox.getAddress()); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeExtraContractForAll(depositBox.address) + await messageProxyForMainnet.removeExtraContractForAll(await depositBox.getAddress()) .should.be.eventually.rejectedWith("Extra contract is not registered"); }); it("should remove reimbursed contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Not enough permissions to remove reimbursed contract"); await messageProxyForMainnet.removeReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address); + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); await expect( - messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address) + messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ReimbursedContractAdded" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeReimbursedContract(schainName, depositBox.address) + messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ReimbursedContractRemoved" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox.address)).to.be.equal(false); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); }); it("should remove reimbursed contract when remove extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Not enough permissions to remove reimbursed contract"); await messageProxyForMainnet.removeReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.registerExtraContract(schainName, depositBox.address); + await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); await expect( - messageProxyForMainnet.addReimbursedContract(schainName, depositBox.address) + messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ReimbursedContractAdded" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeExtraContract(schainName, depositBox.address) + messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) ).to.emit( messageProxyForMainnet, "ReimbursedContractRemoved" - ).withArgs(schainHash, depositBox.address); + ).withArgs(schainHash, await depositBox.getAddress()); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeReimbursedContract(schainName, depositBox.address) + await messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox.address)).to.be.equal(false); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); }); }); @@ -1285,22 +1270,22 @@ describe("MessageProxy", () => { beforeEach(async () => { keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage.address, "Base schain"); + messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), "Base schain"); messages = await deployMessages(); caller = await deployMessageProxyCaller(); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, deployer.address); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContract(schainName, caller.address); + await messageProxyForSchain.registerExtraContract(schainName, await caller.getAddress()); }); it("should set constants", async () => { - const gasLimitPrevious = (await messageProxyForSchain.gasLimit()).toNumber(); + const gasLimitPrevious = await messageProxyForSchain.gasLimit(); const gasLimitNew = 7; - expect((await messageProxyForSchain.gasLimit()).toNumber()).to.equal(gasLimitPrevious); + expect(await messageProxyForSchain.gasLimit()).to.equal(gasLimitPrevious); await messageProxyForSchain.connect(user).setNewGasLimit( gasLimitNew @@ -1311,11 +1296,11 @@ describe("MessageProxy", () => { await messageProxyForSchain.connect(user).setNewGasLimit(gasLimitNew); - expect((await messageProxyForSchain.gasLimit()).toNumber()).to.equal(gasLimitNew); + expect(await messageProxyForSchain.gasLimit()).to.equal(gasLimitNew); await messageProxyForSchain.connect(user).setNewGasLimit(gasLimitPrevious); - expect((await messageProxyForSchain.gasLimit()).toNumber()).to.equal(gasLimitPrevious); + expect(await messageProxyForSchain.gasLimit()).to.equal(gasLimitPrevious); }); @@ -1352,20 +1337,19 @@ describe("MessageProxy", () => { }); it("should post outgoing message", async () => { - const contractAddress = messageProxyForSchain.address; + const contractAddress = await messageProxyForSchain.getAddress(); const amount = 4; const addressTo = user.address; const bytesData = await messages.encodeTransferEthMessage(addressTo, amount); await caller - .postOutgoingMessageTesterOnSchain(messageProxyForSchain.address, schainHash, contractAddress, bytesData) + .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); await messageProxyForSchain.connect(deployer).addConnectedChain(schainName); await caller - .postOutgoingMessageTesterOnSchain(messageProxyForSchain.address, schainHash, contractAddress, bytesData); - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, contractAddress, bytesData); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(1); }); // l_sergiy: this test should be rewritten in respect to new pre-BLS hash computation algorithm @@ -1502,18 +1486,16 @@ describe("MessageProxy", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(schainName); // chain should be inited: - BigNumber.from(await messageProxyForSchain.getOutgoingMessagesCounter(schainName)).should.be.deep.equal(BigNumber.from(0)); + (await messageProxyForSchain.getOutgoingMessagesCounter(schainName)).should.be.equal(0); - const outgoingMessagesCounter0 = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter0.should.be.deep.equal(BigNumber.from(0)); + const outgoingMessagesCounter0 = await messageProxyForSchain.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter0.should.be.equal(0); await caller - .postOutgoingMessageTesterOnSchain(messageProxyForSchain.address, schainHash, messages.address, bytesData); + .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, messages.getAddress(), bytesData); - const outgoingMessagesCounter = BigNumber.from( - await messageProxyForSchain.getOutgoingMessagesCounter(schainName)); - outgoingMessagesCounter.should.be.deep.equal(BigNumber.from(1)); + const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(schainName); + outgoingMessagesCounter.should.be.equal(1); }); it("should set version of contracts on schain", async () => { @@ -1546,7 +1528,7 @@ describe("MessageProxy", () => { await messageProxyForSchainWithoutSignature.connect(deployer).grantRole(chainConnectorRole, deployer.address); const extraContractRegistrarRole = await messageProxyForSchainWithoutSignature.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchainWithoutSignature.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchainWithoutSignature.registerExtraContract(schainName, caller.address); + await messageProxyForSchainWithoutSignature.registerExtraContract(schainName, await caller.getAddress()); const receiverMockFactory = await ethers.getContractFactory("ReceiverGasLimitSchainMock"); receiverMock = await receiverMockFactory.deploy() as ReceiverGasLimitSchainMock; @@ -1557,17 +1539,17 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: receiverMock.address, + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; const outgoingMessages = [message1]; - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock.address); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); let a = await receiverMock.a(); - expect(a.toNumber()).be.equal(0); + expect(a).be.equal(0); const res = await (await messageProxyForSchainWithoutSignature .connect(deployer) @@ -1579,8 +1561,8 @@ describe("MessageProxy", () => { )).wait(); a = await receiverMock.a(); - expect(a.toNumber()).be.equal(0); - expect(res.gasUsed.toNumber()).to.be.greaterThan(1000000); + expect(a).be.equal(0); + expect(res?.gasUsed).to.be.greaterThan(1000000); }); @@ -1589,7 +1571,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: receiverMock.address, + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; @@ -1597,14 +1579,15 @@ describe("MessageProxy", () => { const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchainWithoutSignature.address); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchainWithoutSignature.getAddress()); - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock.address); - await messageProxyForSchainWithoutSignature.setEtherbase(etherbase.address); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); + await messageProxyForSchainWithoutSignature.setEtherbase(await etherbase.getAddress()); - const smallBalance = ethers.utils.parseEther("0.02"); + const smallBalance = ethers.parseEther("0.02"); // left small amount of eth on agent balance to emulate PoW. - await agent.sendTransaction({to: etherbase.address, value: (await agent.getBalance()).sub(smallBalance)}); + let agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + await agent.sendTransaction({to: await etherbase.getAddress(), value: agentBalance - smallBalance}); await messageProxyForSchainWithoutSignature .connect(agent) @@ -1615,10 +1598,11 @@ describe("MessageProxy", () => { randomSignature ); - (await agent.getBalance()) - .should.be.closeTo( - await messageProxyForSchainWithoutSignature.MINIMUM_BALANCE(), - ethers.utils.parseEther("0.001").toNumber()); + agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + agentBalance.should.be.closeTo( + await messageProxyForSchainWithoutSignature.MINIMUM_BALANCE(), + ethers.parseEther("0.001") + ); await etherbase.retrieve(agent.address); }); @@ -1628,7 +1612,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: receiverMock.address, + destinationContract: await receiverMock.getAddress(), sender: deployer.address, to: client.address }; @@ -1636,16 +1620,17 @@ describe("MessageProxy", () => { const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchainWithoutSignature.address); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchainWithoutSignature.getAddress()); - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock.address); - await messageProxyForSchainWithoutSignature.setEtherbase(etherbase.address); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); + await messageProxyForSchainWithoutSignature.setEtherbase(await etherbase.getAddress()); - const etherbaseBalance = ethers.utils.parseEther("0.5"); - const smallBalance = ethers.utils.parseEther("0.02"); - const rest = (await agent.getBalance()).sub(smallBalance).sub(etherbaseBalance); + const etherbaseBalance = ethers.parseEther("0.5"); + const smallBalance = ethers.parseEther("0.02"); + let agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + const rest = agentBalance - smallBalance - etherbaseBalance; // left small amount of eth on agent balance to emulate PoW. - await agent.sendTransaction({to: etherbase.address, value: etherbaseBalance}); + await agent.sendTransaction({to: await etherbase.getAddress(), value: etherbaseBalance}); await agent.sendTransaction({to: deployer.address, value: rest}); await messageProxyForSchainWithoutSignature @@ -1657,10 +1642,11 @@ describe("MessageProxy", () => { randomSignature ); - (await ethers.provider.getBalance(etherbase.address)) + (await ethers.provider.getBalance(await etherbase.getAddress())) .should.be.equal(0); - (await agent.getBalance()) - .should.be.gt(etherbaseBalance); + + agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + agentBalance.should.be.gt(etherbaseBalance); await deployer.sendTransaction({to: agent.address, value: rest}); }); @@ -1674,102 +1660,102 @@ describe("MessageProxy", () => { describe("register and remove extra contracts", async () => { it("should register extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForSchain.connect(user).registerExtraContract(schainName, messages.address) + await messageProxyForSchain.connect(user).registerExtraContract(schainName, messages.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForSchain.registerExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.address)).to.be.equal(false); - await messageProxyForSchain.registerExtraContract(schainName, messages.address); - expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.address)).to.be.equal(true); + expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.getAddress())).to.be.equal(false); + await messageProxyForSchain.registerExtraContract(schainName, messages.getAddress()); + expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.getAddress())).to.be.equal(true); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(messages.address); + expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(await messages.getAddress()); await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForSchain.getContractRegisteredRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForSchain.registerExtraContract(schainName, messages.address) + await messageProxyForSchain.registerExtraContract(schainName, messages.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should register extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForSchain.connect(user).registerExtraContractForAll(messages.address) + await messageProxyForSchain.connect(user).registerExtraContractForAll(messages.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForSchain.registerExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - expect(await messageProxyForSchain.isContractRegistered(zeroBytes32, messages.address)).to.be.equal(false); - await messageProxyForSchain.registerExtraContractForAll(messages.address); + expect(await messageProxyForSchain.isContractRegistered(zeroBytes32, messages.getAddress())).to.be.equal(false); + await messageProxyForSchain.registerExtraContractForAll(messages.getAddress()); - expect(await messageProxyForSchain.isContractRegistered(zeroBytes32, messages.address)).to.be.equal(true); + expect(await messageProxyForSchain.isContractRegistered(zeroBytes32, messages.getAddress())).to.be.equal(true); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(messages.address); + expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(await messages.getAddress()); await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForSchain.registerExtraContract(schainName, messages.address) + await messageProxyForSchain.registerExtraContract(schainName, messages.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered for all chains"); - await messageProxyForSchain.registerExtraContractForAll(messages.address) + await messageProxyForSchain.registerExtraContractForAll(messages.getAddress()) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should remove extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForSchain.connect(user).removeExtraContract(schainName, messages.address) + await messageProxyForSchain.connect(user).removeExtraContract(schainName, messages.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForSchain.removeExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForSchain.registerExtraContract(schainName, messages.address) + messageProxyForSchain.registerExtraContract(schainName, messages.getAddress()) ).to.emit( messageProxyForSchain, "ExtraContractRegistered" - ).withArgs(schainHash, messages.address); + ).withArgs(schainHash, messages.getAddress()); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); await expect( - messageProxyForSchain.removeExtraContract(schainName, messages.address) + messageProxyForSchain.removeExtraContract(schainName, messages.getAddress()) ).to.emit( messageProxyForSchain, "ExtraContractRemoved" - ).withArgs(schainHash, messages.address); + ).withArgs(schainHash, messages.getAddress()); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - await messageProxyForSchain.removeExtraContract(schainName, messages.address) + await messageProxyForSchain.removeExtraContract(schainName, messages.getAddress()) .should.be.eventually.rejectedWith("Extra contract is not registered"); - expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.address)).to.be.equal(false); + expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.getAddress())).to.be.equal(false); }); it("should remove extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForSchain.connect(user).removeExtraContractForAll(messages.address) + await messageProxyForSchain.connect(user).removeExtraContractForAll(messages.getAddress()) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForSchain.removeExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); await expect( - messageProxyForSchain.registerExtraContractForAll(messages.address) + messageProxyForSchain.registerExtraContractForAll(messages.getAddress()) ).to.emit( messageProxyForSchain, "ExtraContractRegistered" - ).withArgs(zeroBytes32, messages.address); + ).withArgs(zeroBytes32, messages.getAddress()); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); await expect( - messageProxyForSchain.removeExtraContractForAll(messages.address) + messageProxyForSchain.removeExtraContractForAll(messages.getAddress()) ).to.emit( messageProxyForSchain, "ExtraContractRemoved" - ).withArgs(zeroBytes32, messages.address); + ).withArgs(zeroBytes32, messages.getAddress()); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - await messageProxyForSchain.removeExtraContractForAll(messages.address) + await messageProxyForSchain.removeExtraContractForAll(messages.getAddress()) .should.be.eventually.rejectedWith("Extra contract is not registered"); }); }); diff --git a/test/extensions/ERC721MintingFromSchainToMainnet.ts b/test/extensions/ERC721MintingFromSchainToMainnet.ts index 08aac30c9..e37012d4e 100644 --- a/test/extensions/ERC721MintingFromSchainToMainnet.ts +++ b/test/extensions/ERC721MintingFromSchainToMainnet.ts @@ -23,7 +23,7 @@ * @copyright SKALE Labs 2019-Present */ -import { solidity } from "ethereum-waffle"; +// import { solidity } from "ethereum-waffle"; import chaiAsPromised from "chai-as-promised"; import chai = require("chai"); import { @@ -47,7 +47,7 @@ import { chai.should(); chai.use(chaiAsPromised); -chai.use(solidity); +// chai.use(solidity); import { deployLinker } from "../utils/deploy/mainnet/linker"; import { deployMessageProxyForMainnet } from "../utils/deploy/mainnet/messageProxyForMainnet"; @@ -69,8 +69,8 @@ import { deployMessageProxyForSchain } from "../utils/deploy/schain/messageProxy import { stringKeccak256, getPublicKey } from "../utils/helper"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { expect } from "chai"; import { deployCommunityLocker } from "../utils/deploy/schain/communityLocker"; @@ -81,7 +81,7 @@ describe("ERC721MintingFromSchainToMainnet", () => { let deployer: SignerWithAddress; let user: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let imaLinker: Linker; let communityPool: CommunityPool; @@ -110,8 +110,8 @@ describe("ERC721MintingFromSchainToMainnet", () => { before(async () => { [deployer, user, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - BigInt(ethers.parseEther("1"))}); }) beforeEach(async () => { @@ -123,17 +123,17 @@ describe("ERC721MintingFromSchainToMainnet", () => { schainsInternal = await (await ethers.getContractFactory("SchainsInternal")).deploy() as SchainsInternal; skaleVerifier = await (await ethers.getContractFactory("SkaleVerifierMock")).deploy() as SkaleVerifierMock; wallets = await (await ethers.getContractFactory("Wallets")).deploy() as Wallets; - await contractManager.connect(deployer).setContractsAddress("KeyStorage", keyStorage.address); - await contractManager.connect(deployer).setContractsAddress("Nodes", nodes.address); - await contractManager.connect(deployer).setContractsAddress("Schains", schains.address); - await contractManager.connect(deployer).setContractsAddress("SchainsInternal", schainsInternal.address); - await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", skaleVerifier.address); - await contractManager.connect(deployer).setContractsAddress("Wallets", wallets.address); + await contractManager.connect(deployer).setContractsAddress("KeyStorage", await keyStorage.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Nodes", await nodes.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Schains", await schains.getAddress()); + await contractManager.connect(deployer).setContractsAddress("SchainsInternal", await schainsInternal.getAddress()); + await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", await skaleVerifier.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Wallets", await wallets.getAddress()); // add ContractManager to contracts - await schains.connect(deployer).addContractManager(contractManager.address); - await schainsInternal.connect(deployer).addContractManager(contractManager.address); - await wallets.connect(deployer).addContractManager(contractManager.address); + await schains.connect(deployer).addContractManager(await contractManager.getAddress()); + await schainsInternal.connect(deployer).addContractManager(await contractManager.getAddress()); + await wallets.connect(deployer).addContractManager(await contractManager.getAddress()); // setup 16 nodes const nodeCreationParams = { @@ -191,36 +191,36 @@ describe("ERC721MintingFromSchainToMainnet", () => { const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); const chainConnectorRole2 = await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(); await messageProxyForMainnet.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForMainnet.connect(deployer).grantRole(chainConnectorRole2, imaLinker.address); + await messageProxyForMainnet.connect(deployer).grantRole(chainConnectorRole2, await imaLinker.getAddress()); // await messageProxyForMainnet.registerExtraContractForAll(depositBoxEth.address) // await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC20.address) // await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC721.address) - // await messageProxyForMainnet.registerExtraContractForAll(communityPool.address) + // await messageProxyForMainnet.registerExtraContractForAll(await communityPool.getAddress()) // IMA schain part deployment - messageProxyForSchain = await deployMessageProxyForSchain(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchain(await keyStorage.getAddress(), schainName); await keyStorage.connect(deployer).setBlsCommonPublicKey(BLSPublicKey); - tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, imaLinker.address); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, communityPool.address); + tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, await imaLinker.getAddress()); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, await communityPool.getAddress()); // tokenManagerEth = await deployTokenManagerEth( // schainName, - // messageProxyForSchain.address, + // await messageProxyForSchain.getAddress(), // tokenManagerLinker, // communityLocker, // depositBoxEth.address, // "0x0000000000000000000000000000000000000000"); - // tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, depositBoxERC20.address); - // tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, depositBoxERC721.address); + // tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, depositBoxERC20.address); + // tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, depositBoxERC721.address); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); // await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth.address) // await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC20.address) // await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address) - // await messageProxyForSchain.registerExtraContractForAll(communityLocker.address) + // await messageProxyForSchain.registerExtraContractForAll(await communityLocker.getAddress()) // ethERC20 = await deployEthErc20(tokenManagerEth); // await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20.address); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); - await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, tokenManagerLinker.address); + await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, await tokenManagerLinker.getAddress()); // await tokenManagerERC20.connect(deployer).grantRole(await tokenManagerERC20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); // await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); @@ -230,11 +230,11 @@ describe("ERC721MintingFromSchainToMainnet", () => { // await lockAndDataForSchain.setContract("ERC20Module", erc20ModuleForSchain.address); // await lockAndDataForSchain.setContract("ERC721Module", erc721ModuleForSchain.address); // await lockAndDataForSchain.setContract("TokenManager", tokenManager.address); - // await lockAndDataForSchain.setContract("MessageProxy", messageProxyForSchain.address); + // await lockAndDataForSchain.setContract("MessageProxy", await messageProxyForSchain.getAddress()); // await lockAndDataForSchain.setContract("TokenFactory", tokenFactory.address); // IMA registration - await imaLinker.connectSchain(schainName, [communityLocker.address, tokenManagerLinker.address]); + await imaLinker.connectSchain(schainName, [await communityLocker.getAddress(), await tokenManagerLinker.getAddress()]); // await communityPool.connect(user).rechargeUserWallet(schainName, { value: 1e18.toString() }); // await lockAndDataForSchain.addDepositBox(depositBoxEth.address); // await lockAndDataForSchain.addDepositBox(depositBoxERC20.address); @@ -269,27 +269,27 @@ describe("ERC721MintingFromSchainToMainnet", () => { const extensionMainnetFactory = await ethers.getContractFactory("ERC721ReferenceMintAndMetadataMainnet"); extensionMainnet = await extensionMainnetFactory.deploy( - messageProxyForMainnet.address, - ERC721TokenOnMainnet.address, + await messageProxyForMainnet.getAddress(), + await ERC721TokenOnMainnet.getAddress(), schainName ) as ERC721ReferenceMintAndMetadataMainnet; extensionSchain = await extensionSchainFactory.deploy( - messageProxyForSchain.address, - ERC721TokenOnSchain.address, - extensionMainnet.address + await messageProxyForSchain.getAddress(), + await ERC721TokenOnSchain.getAddress(), + await extensionMainnet.getAddress() ) as ERC721ReferenceMintAndMetadataSchain; - await extensionMainnet.connect(deployer).setSenderContractOnSchain(extensionSchain.address); + await extensionMainnet.connect(deployer).setSenderContractOnSchain(await extensionSchain.getAddress()); // add minter role const minterRoleERC721 = await ERC721TokenOnMainnet.MINTER_ROLE(); - await ERC721TokenOnMainnet.grantRole(minterRoleERC721, extensionMainnet.address); + await ERC721TokenOnMainnet.grantRole(minterRoleERC721, await extensionMainnet.getAddress()); }); it("should not send message if not registered", async () => { await ERC721TokenOnSchain.connect(user).setTokenURI(1, "MyToken1"); - await ERC721TokenOnSchain.connect(user).approve(extensionSchain.address, 1); + await ERC721TokenOnSchain.connect(user).approve(await extensionSchain.getAddress(), 1); await extensionSchain.connect(user).sendTokenToMainnet(user.address, 1).should.be.eventually.rejectedWith("Sender contract is not registered"); }); @@ -297,29 +297,29 @@ describe("ERC721MintingFromSchainToMainnet", () => { const tokenURI = "MyToken1"; const mainnetHash = stringKeccak256("Mainnet"); await ERC721TokenOnSchain.connect(user).setTokenURI(1, tokenURI); - await ERC721TokenOnSchain.connect(user).approve(extensionSchain.address, 1); - await messageProxyForSchain.connect(deployer).registerExtraContract("Mainnet", extensionSchain.address); + await ERC721TokenOnSchain.connect(user).approve(await extensionSchain.getAddress(), 1); + await messageProxyForSchain.connect(deployer).registerExtraContract("Mainnet", await extensionSchain.getAddress()); const res = await extensionSchain.connect(user).sendTokenToMainnet(user.address, 1); - const encodedData = ethers.utils.defaultAbiCoder.encode(["address", "uint", "string"], [user.address, 1, tokenURI]); + const encodedData = ethers.AbiCoder.defaultAbiCoder().encode(["address", "uint", "string"], [user.address, 1, tokenURI]); await expect(res) .to.emit(messageProxyForSchain, "OutgoingMessage") - .withArgs(mainnetHash, 0, extensionSchain.address, extensionMainnet.address, encodedData); + .withArgs(mainnetHash, 0, await extensionSchain.getAddress(), await extensionMainnet.getAddress(), encodedData); }); it("should POST message for token 1", async () => { const dataToPost = await extensionSchain.connect(user).encodeParams(user.address, 1, "MyToken1"); const message = { data: dataToPost, - destinationContract: extensionMainnet.address, - sender: extensionSchain.address, + destinationContract: await extensionMainnet.getAddress(), + sender: await extensionSchain.getAddress(), }; // prepare BLS signature // P.s. this is test signature from test of SkaleManager.SkaleVerifier - please do not use it!!! - const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781"), + const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781", ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -355,14 +355,14 @@ describe("ERC721MintingFromSchainToMainnet", () => { const message = { data: dataToPost, destinationContract: user.address, - sender: extensionSchain.address, + sender: await extensionSchain.getAddress(), }; // prepare BLS signature // P.s. this is test signature from test of SkaleManager.SkaleVerifier - please do not use it!!! - const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781"), + const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781", ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; @@ -388,22 +388,22 @@ describe("ERC721MintingFromSchainToMainnet", () => { 0, [message], sign - )).to.emit(messageProxyForMainnet, "PostMessageError").withArgs(0, ethers.utils.hexlify(ethers.utils.toUtf8Bytes("Destination contract is not a contract"))); + )).to.emit(messageProxyForMainnet, "PostMessageError").withArgs(0, ethers.hexlify(ethers.toUtf8Bytes("Destination contract is not a contract"))); }); it("should POST message for token 5", async () => { const dataToPost = await extensionSchain.connect(user).encodeParams(user.address, 5, "MyToken5Unique"); const message = { data: dataToPost, - destinationContract: extensionMainnet.address, - sender: extensionSchain.address, + destinationContract: await extensionMainnet.getAddress(), + sender: await extensionSchain.getAddress(), }; // prepare BLS signature // P.s. this is test signature from test of SkaleManager.SkaleVerifier - please do not use it!!! - const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781"), + const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781" ]; const HashA = "3080491942974172654518861600747466851589809241462384879086673256057179400078"; const HashB = "15163860114293529009901628456926790077787470245128337652112878212941459329347"; From 93faa7304b58268af30fcf4aea97cb45da0dd063 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:09:55 +0000 Subject: [PATCH 11/45] Refactor deployMainnet script --- migrations/deployMainnet.ts | 291 +++++++++++++++--------------------- 1 file changed, 124 insertions(+), 167 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index db2fe6b45..00f24ec1f 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -19,22 +19,21 @@ */ /** - * @file 1_migration_to_mainnet.js + * @file deployMainnet.ts * @copyright SKALE Labs 2019-Present */ import { promises as fs } from 'fs'; -import { Interface } from "ethers/lib/utils"; +import { Interface } from 'ethers'; import { ethers, upgrades } from "hardhat"; import { MessageProxyForMainnet, Linker } from "../typechain"; import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; -import { SkaleABIFile } from '@skalenetwork/upgrade-tools/dist/src/types/SkaleABIFile'; +import { SkaleABIFile } from "@skalenetwork/skale-contracts/lib/domain/types"; export function getContractKeyInAbiFile(contract: string) { - if (contract === "MessageProxyForMainnet") { - return "message_proxy_mainnet"; - } - return contract.replace(/([a-z0-9])(?=[A-Z])/g, '$1_').toLowerCase(); + return contract === "MessageProxyForMainnet" + ? "message_proxy_mainnet" + : contract.replace(/([a-z0-9])(?=[A-Z])/g, '$1_').toLowerCase(); } export async function getManifestFile(): Promise { @@ -43,205 +42,163 @@ export async function getManifestFile(): Promise { async function getContractManager() { const defaultFilePath = "data/skaleManagerComponents.json"; - const jsonData = JSON.parse(await fs.readFile(defaultFilePath)) as SkaleABIFile; + const jsonData = JSON.parse(await fs.readFile(defaultFilePath, "utf-8")) as SkaleABIFile; try { - const contractManagerAddress = jsonData.contract_manager_address as string; - const contractManagerABI = jsonData.contract_manager_abi as []; - return { address: contractManagerAddress, abi: contractManagerABI }; + const { contract_manager_address, contract_manager_abi } = jsonData; + return { address: contract_manager_address as unknown as string, abi: contract_manager_abi as [] }; } catch (e) { - console.log(e); - process.exit( 126 ); + console.error(e); + process.exit(126); } } -export const contractsToDeploy = [ +function isValidContractManager(contractManager: { address?: string, abi?: any[] }) { + return contractManager?.address && contractManager?.abi; +} + +async function setVersion(messageProxy: MessageProxyForMainnet, version: string) { + try { + console.log(`Set version ${version}`); + await (await messageProxy.setVersion(version)).wait(); + } catch { + console.error("Failed to set ima version on mainnet"); + } +} + +export const depositBoxes = [ "DepositBoxEth", "DepositBoxERC20", "DepositBoxERC721", "DepositBoxERC1155", "DepositBoxERC721WithMetadata" -] +]; export const contracts = [ "MessageProxyForMainnet", "Linker", "CommunityPool", - "DepositBoxEth", - "DepositBoxERC20", - "DepositBoxERC721", - "DepositBoxERC1155", - "DepositBoxERC721WithMetadata" -] + ...depositBoxes +]; + +async function deployContract(name: string, args: any[], initializer: string) { + console.log("Deploy", name); + const factory = await getContractFactory(name); + const proxy = await upgrades.deployProxy(factory, args, { initializer }); + await proxy.waitForDeployment(); + const address = await proxy.getAddress(); + console.log("Proxy Contract", name, "deployed to", address); + await verifyProxy(name, address, []); + return proxy; +} -async function main() { - const [ owner,] = await ethers.getSigners(); - const deployed = new Map(); +async function registerContracts(linker: Linker, messageProxy: MessageProxyForMainnet, addresses: string[]) { + for (const address of addresses) { + await (await linker.registerMainnetContract(address)).wait(); + await (await messageProxy.registerExtraContractForAll(address)).wait(); + } +} +async function registerInContractManager(contractManagerInst: any, deployed: Map) { + try { + for (const contractName of contracts) { + const contract = deployed.get(contractName); + if (!contract) throw new Error(`${contractName} was not found`); + await contractManagerInst.setContractsAddress(contractName, contract.address); + } + console.log("Successfully registered contracts in ContractManager"); + } catch (error) { + console.error("Registration of contracts failed in ContractManager. Please redo it manually!\nError:", error); + } +} + +async function main() { + const [owner] = await ethers.getSigners(); + const deployed = new Map(); const contractManager = await getContractManager(); const version = await getVersion(); - const messageProxyForMainnetName = "MessageProxyForMainnet"; - console.log("Deploy", messageProxyForMainnetName); - const messageProxyForMainnetFactory = await getContractFactory(messageProxyForMainnetName); - const messageProxyForMainnet = ( - await upgrades.deployProxy(messageProxyForMainnetFactory, [contractManager?.address], { initializer: 'initialize(address)' }) - ) as MessageProxyForMainnet; - await messageProxyForMainnet.deployTransaction.wait(); - console.log("Proxy Contract", messageProxyForMainnetName, "deployed to", messageProxyForMainnet.address); - deployed.set( - messageProxyForMainnetName, - { - address: messageProxyForMainnet.address, - interface: messageProxyForMainnet.interface - } - ); - await verifyProxy(messageProxyForMainnetName, messageProxyForMainnet.address, []); + const messageProxyForMainnet = await deployContract( + "MessageProxyForMainnet", + [contractManager?.address], + 'initialize(address)' + ) as unknown as MessageProxyForMainnet; + deployed.set("MessageProxyForMainnet", { + address: await messageProxyForMainnet.getAddress(), + interface: messageProxyForMainnet.interface + }); + const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); await (await messageProxyForMainnet.grantRole(extraContractRegistrarRole, owner.address)).wait(); - try { - console.log(`Set version ${version}`) - await (await (messageProxyForMainnet as MessageProxyForMainnet).setVersion(version)).wait(); - } catch { - console.log("Failed to set ima version on mainnet"); - } + await setVersion(messageProxyForMainnet, version); - const linkerName = "Linker"; - console.log("Deploy", linkerName); - const linkerFactory = await getContractFactory(linkerName); - const linker = ( - await upgrades.deployProxy(linkerFactory, [contractManager?.address, deployed.get(messageProxyForMainnetName)?.address], { initializer: 'initialize(address,address)' }) - ) as Linker; - await linker.deployTransaction.wait(); - await (await linker.registerMainnetContract(linker.address)).wait(); - await (await messageProxyForMainnet.registerExtraContractForAll(linker.address)).wait(); + const linker = await deployContract( + "Linker", + [contractManager?.address, deployed.get("MessageProxyForMainnet")?.address], + 'initialize(address,address)' + ) as unknown as Linker; + deployed.set("Linker", { + address: await linker.getAddress(), + interface: linker.interface + }); + + await registerContracts(linker, messageProxyForMainnet, [await linker.getAddress()]); const chainConnectorRole = await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(); - await (await messageProxyForMainnet.grantRole(chainConnectorRole, linker.address)).wait(); - console.log("Proxy Contract", linkerName, "deployed to", linker.address); - deployed.set( - linkerName, - { - address: linker.address, - interface: linker.interface - } + await (await messageProxyForMainnet.grantRole(chainConnectorRole, await linker.getAddress())).wait(); + + const communityPool = await deployContract( + "CommunityPool", + [contractManager?.address, deployed.get("Linker")?.address, deployed.get("MessageProxyForMainnet")?.address], + 'initialize(address,address,address)' ); - await verifyProxy(linkerName, linker.address, []); - - const communityPoolName = "CommunityPool"; - const communityPoolFactory = await getContractFactory(communityPoolName); - const communityPool = - await upgrades.deployProxy( - communityPoolFactory, - [ - contractManager?.address, - deployed.get(linkerName)?.address, - deployed.get(messageProxyForMainnetName)?.address - ], - { - initializer: 'initialize(address,address,address)' - } + const communityPoolAddress = await communityPool.getAddress(); + deployed.set("CommunityPool", { + address: communityPoolAddress, + interface: communityPool.interface + }); + await registerContracts(linker, messageProxyForMainnet, [communityPoolAddress]); + await (await messageProxyForMainnet.setCommunityPool(communityPoolAddress)).wait(); + + for (const contract of depositBoxes) { + const proxy = await deployContract( + contract, + [contractManager?.address, deployed.get("Linker")?.address, deployed.get("MessageProxyForMainnet")?.address], + 'initialize(address,address,address)' ); - await communityPool.deployTransaction.wait(); - await (await linker.registerMainnetContract(communityPool.address)).wait(); - await (await messageProxyForMainnet.registerExtraContractForAll(communityPool.address)).wait(); - await (await messageProxyForMainnet.setCommunityPool(communityPool.address)).wait(); - console.log("Proxy Contract", communityPoolName, "deployed to", communityPool.address); - deployed.set( - communityPoolName, - { - address: communityPool.address, - interface: communityPool.interface + const proxyAddress = await proxy.getAddress(); + deployed.set(contract, { + address: proxyAddress, + interface: proxy.interface + }); + await registerContracts(linker, messageProxyForMainnet, [proxyAddress]); + } + + if (isValidContractManager(contractManager) && await ethers.provider.getCode(contractManager.address) !== "0x") { + const contractManagerInst = new ethers.Contract(contractManager.address, contractManager.abi, owner); + if (await contractManagerInst.owner() === owner.address) { + await registerInContractManager(contractManagerInst, deployed); + } else { + console.error("Owner of ContractManager is not the same as the deployer"); } - ); - await verifyProxy(communityPoolName, communityPool.address, []); - - for (const contract of contractsToDeploy) { - const contractFactory = await getContractFactory(contract); - console.log("Deploy", contract); - const proxy = await upgrades.deployProxy( - contractFactory, - [ - contractManager?.address, - deployed.get(linkerName)?.address, - deployed.get(messageProxyForMainnetName)?.address - ], - { - initializer: 'initialize(address,address,address)' - } - ); - await proxy.deployTransaction.wait(); - const contractName = contract; - // // TODO: remove if - after adding tests to agent - // if (contractName !== "DepositBoxERC1155") { - console.log("Register", contract, "as", contractName, "=>", proxy.address); - await (await linker.registerMainnetContract(proxy.address)).wait(); - await (await messageProxyForMainnet.registerExtraContractForAll(proxy.address)).wait(); - console.log( "Contract", contractName, "with address", proxy.address, "is registered as DepositBox in Linker" ); - deployed.set( - contractName, - { - address: proxy.address, - interface: proxy.interface - } - ); - await verifyProxy(contract, proxy.address, []); + } else { + console.error("Invalid ContractManager address or ABI"); } + console.log("Registration is completed!"); console.log("Store ABIs"); - - const outputObject: {[k: string]: string | []} = {}; + const outputObject: { [k: string]: string | [] } = {}; for (const contract of contracts) { const contractKey = getContractKeyInAbiFile(contract); const deployedContract = deployed.get(contract); - if (deployedContract === undefined) { - throw Error(`Contract ${contract} was not found`); + if (!deployedContract) { + throw new Error(`Contract ${contract} was not found`); } - outputObject[contractKey + "_address"] = deployedContract.address; - outputObject[contractKey + "_abi"] = getAbi(deployedContract.interface); + outputObject[`${contractKey}_address`] = deployedContract.address; + outputObject[`${contractKey}_abi`] = getAbi(deployedContract.interface); } - const deployedDepositBoxERC721WithMetadata = deployed.get("DepositBoxERC721WithMetadata"); - if (deployedDepositBoxERC721WithMetadata === undefined) { - throw new Error("DepositBoxERC721WithMetadata was not found"); - } - outputObject[getContractKeyInAbiFile("DepositBoxERC721WithMetadata") + "_address"] = deployedDepositBoxERC721WithMetadata.address; - outputObject[getContractKeyInAbiFile("DepositBoxERC721WithMetadata") + "_abi"] = getAbi(deployedDepositBoxERC721WithMetadata.interface); await fs.writeFile("data/proxyMainnet.json", JSON.stringify(outputObject, null, 4)); - if( contractManager?.address !== null && contractManager?.address !== "" && contractManager?.address !== "0x0000000000000000000000000000000000000000" ) { - // register MessageProxy in ContractManager - if( contractManager?.abi !== undefined ) { - if( await ethers.provider.getCode( contractManager?.address) !== "0x") { - const contractManagerInst = new ethers.Contract(contractManager?.address, contractManager?.abi, owner); - if (await contractManagerInst.owner() !== owner.address) { - console.log( "Owner of ContractManager is not the same of the deployer" ); - } else { - try { - await contractManagerInst.setContractsAddress( "MessageProxyForMainnet", deployed.get( "MessageProxyForMainnet" )?.address); - await contractManagerInst.setContractsAddress( "CommunityPool", deployed.get( "CommunityPool" )?.address); - for (const contractName of contractsToDeploy) { - const contractAddress = deployed.get(contractName); - if (contractAddress === undefined) { - throw new Error(`${contractName} was not found`); - } - await contractManagerInst.setContractsAddress( contractName, contractAddress); - } - console.log( "Successfully registered MessageProxy in ContractManager" ); - } catch ( error ) { - console.log( "Registration of MessageProxy is failed on ContractManager. Please redo it by yourself!\nError:", error ); - } - } - } else - console.log( "Contract Manager address is not a contract" ); - - } else - console.log( "Please provide an abi of ContractManager" ); - - } else - console.log( "Please provide an address of ContractManager" ); - - console.log( "Registration is completed!" ); - console.log("Done"); } From 09ab3823d7a842b7748e944b8187e35af8879d95 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:10:24 +0000 Subject: [PATCH 12/45] Refactor upgradeMainnet script --- migrations/upgradeMainnet.ts | 71 +++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/migrations/upgradeMainnet.ts b/migrations/upgradeMainnet.ts index 0dad5177a..64af8ba8f 100644 --- a/migrations/upgradeMainnet.ts +++ b/migrations/upgradeMainnet.ts @@ -1,30 +1,43 @@ import chalk from "chalk"; import { ethers } from "hardhat"; -import { promises as fs } from "fs"; -import { AutoSubmitter, Upgrader } from "@skalenetwork/upgrade-tools"; -import { SkaleABIFile } from "@skalenetwork/upgrade-tools/dist/src/types/SkaleABIFile"; -import { contracts, contractsToDeploy, getContractKeyInAbiFile } from "./deployMainnet"; +import { Interface, Transaction } from "ethers"; +import { Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; +import { skaleContracts, Instance } from "@skalenetwork/skale-contracts-ethers-v6"; import { MessageProxyForMainnet } from "../typechain"; -import { Interface } from "@ethersproject/abi"; +import { contracts } from "./deployMainnet"; +async function getImaMainnetInstance() { + if (!process.env.TARGET) { + console.log(chalk.red("Specify desired mainnet-ima instance")); + console.log(chalk.red("Set instance alias or MessageProxyForMainnet address to TARGET environment variable")); + process.exit(1); + } + const network = await skaleContracts.getNetworkByProvider(ethers.provider); + const project = network.getProject("mainnet-ima"); + return await project.getInstance(process.env.TARGET); +} + class ImaMainnetUpgrader extends Upgrader { constructor( targetVersion: string, - abi: SkaleABIFile, + instance: Instance, contractNamesToUpgrade: string[], - submitter = new AutoSubmitter()) { + submitter?: Submitter) { super( - "proxyMainnet", - targetVersion, - abi, - contractNamesToUpgrade, - submitter); + { + contractNamesToUpgrade, + instance, + name: "proxyMainnet", + version: targetVersion, + }, + submitter + ); } - async getMessageProxyForMainnet() { - return await ethers.getContractAt("MessageProxyForMainnet", this.abi.message_proxy_mainnet_address as string) as MessageProxyForMainnet; + getMessageProxyForMainnet = async () => { + return await this.instance.getContract("MessageProxyForMainnet") as MessageProxyForMainnet; } getDeployedVersion = async () => { @@ -38,14 +51,14 @@ class ImaMainnetUpgrader extends Upgrader { setVersion = async (newVersion: string) => { const messageProxyForMainnet = await this.getMessageProxyForMainnet(); - this.transactions.push({ - to: messageProxyForMainnet.address, + this.transactions.push(Transaction.from({ + to: await messageProxyForMainnet.getAddress(), data: messageProxyForMainnet.interface.encodeFunctionData("setVersion", [newVersion]) - }); + })); } // deployNewContracts = () => { }; - + initialize = async () => { const contractManagerAddress = await (await this.getMessageProxyForMainnet()).contractManagerOfSkaleManager(); const contractManagerInterface = new Interface([{ @@ -89,22 +102,23 @@ class ImaMainnetUpgrader extends Upgrader { contractManagerInterface, ethers.provider ) - for (const contractName of contractsToDeploy) { + for (const contractName of contracts) { try { const contractAddress = await contractManager.getContract(contractName); console.log(`Address of ${contractName} is set to ${contractAddress}`); } catch { + // getContract failed because the contract is not set - const contractAddress = this.abi[`${getContractKeyInAbiFile(contractName)}_address`] as string; - this.transactions.push( + const contractAddress = await this.instance.getContract(contractName); + this.transactions.push(Transaction.from( { - to: contractManager.address, + to: await contractManager.getAddress(), data: contractManager.interface.encodeFunctionData( "setContractsAddress", [contractAddress] ) } - ) + )) console.log(`Set ${contractName} address to ${contractAddress}`); } } @@ -118,19 +132,10 @@ class ImaMainnetUpgrader extends Upgrader { } } -async function getImaMainnetAbiAndAddress(): Promise { - if (!process.env.ABI) { - console.log(chalk.red("Set path to file with ABI and addresses to ABI environment variables")); - process.exit(1); - } - const abiFilename = process.env.ABI; - return JSON.parse(await fs.readFile(abiFilename, "utf-8")); -} - async function main() { const upgrader = new ImaMainnetUpgrader( "2.1.0", - await getImaMainnetAbiAndAddress(), + await getImaMainnetInstance(), contracts ); await upgrader.upgrade(); From 64f5ee5507d08a9c854dd3e8741e1117ae7aaa71 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:11:19 +0000 Subject: [PATCH 13/45] Fix deploySkaleManagerComponents script --- migrations/deploySkaleManagerComponents.ts | 86 +++++++++++----------- migrations/generateManifest.ts | 2 +- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/migrations/deploySkaleManagerComponents.ts b/migrations/deploySkaleManagerComponents.ts index 8ab8fe3f2..8e90888c5 100644 --- a/migrations/deploySkaleManagerComponents.ts +++ b/migrations/deploySkaleManagerComponents.ts @@ -24,7 +24,7 @@ */ import { promises as fs } from 'fs'; import { ethers } from "hardhat"; -import { getAbi, getContractFactory } from '@skalenetwork/upgrade-tools'; +import { getAbi } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; import { KeyStorageMock } from '../typechain'; import { Wallet } from 'ethers'; @@ -59,64 +59,64 @@ async function main() { const schainName = process.env.CHAIN_NAME_SCHAIN; console.log("Deploy ContractManager"); - const contractManagerFactory = await getContractFactory("ContractManager"); + const contractManagerFactory = await ethers.getContractFactory("ContractManager"); const contractManager = await contractManagerFactory.deploy(); - console.log("Contract ContractManager deployed to", contractManager.address); + console.log("Contract ContractManager deployed to", await contractManager.getAddress()); console.log("Deploy Schains"); - const schainsFactory = await getContractFactory("Schains"); + const schainsFactory = await ethers.getContractFactory("Schains"); const schains = await schainsFactory.deploy(); - console.log("Contract Schains deployed to", schains.address); + console.log("Contract Schains deployed to", await schains.getAddress()); console.log("Deploy SchainsInternal"); - const schainsInternalFactory = await getContractFactory("SchainsInternal"); + const schainsInternalFactory = await ethers.getContractFactory("SchainsInternal"); const schainsInternal = await schainsInternalFactory.deploy(); - console.log("Contract SchainsInternal deployed to", schainsInternal.address); + console.log("Contract SchainsInternal deployed to", await schainsInternal.getAddress()); console.log("Deploy Wallets"); - const walletsFactory = await getContractFactory("Wallets"); + const walletsFactory = await ethers.getContractFactory("Wallets"); const wallets = await walletsFactory.deploy(); - console.log("Contract Wallets deployed to", wallets.address); + console.log("Contract Wallets deployed to", await wallets.getAddress()); console.log("Deploy SkaleVerifier"); - const skaleVerifierFactory = await getContractFactory("SkaleVerifierMock"); + const skaleVerifierFactory = await ethers.getContractFactory("SkaleVerifierMock"); const skaleVerifier = await skaleVerifierFactory.deploy(); - console.log("Contract SkaleVerifier deployed to", skaleVerifier.address); - + console.log("Contract SkaleVerifier deployed to", await skaleVerifier.getAddress()); + console.log("Deploy KeyStorage"); - const keyStorageFactory = await getContractFactory("KeyStorageMock"); + const keyStorageFactory = await ethers.getContractFactory("KeyStorageMock"); const keyStorage = await keyStorageFactory.deploy() as KeyStorageMock; - console.log("Contract KeyStorage deployed to", keyStorage.address); + console.log("Contract KeyStorage deployed to", await keyStorage.getAddress()); console.log("Deploy Nodes"); - const nodesFactory = await getContractFactory("Nodes"); + const nodesFactory = await ethers.getContractFactory("Nodes"); const nodes = await nodesFactory.deploy(); - console.log("Contract Nodes deployed to", nodes.address); + console.log("Contract Nodes deployed to", await nodes.getAddress()); console.log("Will set dependencies"); - await schains.addContractManager( contractManager.address ); - console.log("Add ContractManager address", contractManager.address, "as ContractManager to Contract Schains", schains.address, "\n"); - await schainsInternal.addContractManager( contractManager.address ); - console.log("Add ContractManager address", contractManager.address, "as ContractManager to Contract SchainsInternal", schainsInternal.address, "\n"); - await wallets.addContractManager( contractManager.address ); - console.log("Add ContractManager address", contractManager.address, "as ContractManager to Contract Wallets", wallets.address, "\n"); - await contractManager.setContractsAddress( "Schains", schains.address ); - console.log("Set Schains", schains.address, "to ContractManager", contractManager.address, "\n"); - await contractManager.setContractsAddress( "SchainsInternal", schainsInternal.address ); - console.log("Set SchainsInternal", schainsInternal.address, "to ContractManager", contractManager.address, "\n"); - await contractManager.setContractsAddress( "Wallets", wallets.address ); - console.log("Set Wallets", wallets.address, "to ContractManager", contractManager.address, "\n"); - await contractManager.setContractsAddress( "SkaleVerifier", skaleVerifier.address ); - console.log("Set SkaleVerifier", skaleVerifier.address, "to ContractManager", contractManager.address, "\n"); - await contractManager.setContractsAddress( "KeyStorage", keyStorage.address ); - console.log("Set KeyStorage", keyStorage.address, "to ContractManager", contractManager.address, "\n"); - await contractManager.setContractsAddress( "Nodes", nodes.address ); - console.log("Set Nodes", nodes.address, "to ContractManager", contractManager.address, "\n"); + await schains.addContractManager( await contractManager.getAddress() ); + console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract Schains", await schains.getAddress(), "\n"); + await schainsInternal.addContractManager( await contractManager.getAddress() ); + console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract SchainsInternal", await schainsInternal.getAddress(), "\n"); + await wallets.addContractManager( await contractManager.getAddress() ); + console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract Wallets", await wallets.getAddress(), "\n"); + await contractManager.setContractsAddress( "Schains", await schains.getAddress() ); + console.log("Set Schains", await schains.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await contractManager.setContractsAddress( "SchainsInternal", await schainsInternal.getAddress() ); + console.log("Set SchainsInternal", await schainsInternal.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await contractManager.setContractsAddress( "Wallets", await wallets.getAddress() ); + console.log("Set Wallets", await wallets.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await contractManager.setContractsAddress( "SkaleVerifier", await skaleVerifier.getAddress() ); + console.log("Set SkaleVerifier", await skaleVerifier.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await contractManager.setContractsAddress( "KeyStorage", await keyStorage.getAddress() ); + console.log("Set KeyStorage", await keyStorage.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await contractManager.setContractsAddress( "Nodes", await nodes.getAddress() ); + console.log("Set Nodes", await nodes.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); const nodeAddress1 = new Wallet(process.env.PRIVATE_KEY_FOR_ETHEREUM).connect(ethers.provider); const nodeAddress2 = new Wallet(process.env.PRIVATE_KEY_FOR_SCHAIN).connect(ethers.provider); - await owner.sendTransaction({to: nodeAddress1.address, value: ethers.utils.parseEther("1")}); - await owner.sendTransaction({to: nodeAddress2.address, value: ethers.utils.parseEther("1")}); + await owner.sendTransaction({to: nodeAddress1.address, value: ethers.parseEther("1")}); + await owner.sendTransaction({to: nodeAddress2.address, value: ethers.parseEther("1")}); const nodeCreationParams1 = { port: 1337, @@ -142,7 +142,7 @@ async function main() { console.log("Create Node 1 with address", nodeAddress2.address, "\n"); await schainsInternal.initializeSchain( schainName, owner.address, 1, 1 ); console.log("Initialize Schain", schainName, "with address", owner.address, "\n"); - await schainsInternal.connect(owner).addNodesToSchainsGroups(ethers.utils.id(schainName), [0, 1]); + await schainsInternal.connect(owner).addNodesToSchainsGroups(ethers.id(schainName), [0, 1]); console.log("Add Nodes 0 and 1 to schain", schainName, "\n"); const BLSPublicKey = { x: { @@ -155,18 +155,18 @@ async function main() { } }; await keyStorage.setBlsCommonPublicKeyForSchain( stringKeccak256(schainName), BLSPublicKey ); - console.log("Set common public key in KeyStorage contract", keyStorage.address, "\n"); + console.log("Set common public key in KeyStorage contract", await keyStorage.getAddress(), "\n"); await wallets.rechargeSchainWallet( stringKeccak256(schainName), { value: "10000000000000000000" } ); // originally it was 1000000000000000000 = 1ETH - console.log("Recharge schain wallet in Wallets contract", wallets.address, "\n"); + console.log("Recharge schain wallet in Wallets contract", await wallets.getAddress(), "\n"); const jsonObject = { - contract_manager_address: contractManager.address, + contract_manager_address: await contractManager.getAddress(), contract_manager_abi: getAbi(contractManager.interface), - schains_internal_address: schainsInternal.address, + schains_internal_address: await schainsInternal.getAddress(), schains_internal_abi: getAbi(schainsInternal.interface), - key_storage_address: keyStorage.address, + key_storage_address: await keyStorage.getAddress(), key_storage_abi: getAbi(keyStorage.interface), - wallets_address: wallets.address, + wallets_address: await wallets.getAddress(), wallets_abi: getAbi(wallets.interface) }; diff --git a/migrations/generateManifest.ts b/migrations/generateManifest.ts index 08cd6f346..046071c65 100644 --- a/migrations/generateManifest.ts +++ b/migrations/generateManifest.ts @@ -135,7 +135,7 @@ export async function importAddresses(manifest: ManifestData, abi: {[ key in str export async function manifestSetup(pathToManifest: string) { const chainId = (await ethers.provider.getNetwork()).chainId; - const manifestName = networkNames[chainId] ?? `unknown-${chainId}`; + const manifestName = networkNames[Number(chainId)] ?? `unknown-${chainId}`; const correctManifestPath = `.openzeppelin/${manifestName}.json`; if (pathToManifest === "" || pathToManifest === correctManifestPath) { await fs.access(correctManifestPath); From dfe7022d40eb0e45461f06815a5467178d48ef48 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:11:56 +0000 Subject: [PATCH 14/45] Fix test_upgrade script --- migrations/deploySchain.ts | 4 ++- scripts/test_upgrade.sh | 57 +++++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/migrations/deploySchain.ts b/migrations/deploySchain.ts index dcf726a16..19379ead9 100644 --- a/migrations/deploySchain.ts +++ b/migrations/deploySchain.ts @@ -19,9 +19,11 @@ */ /** - * @file deploySchain.js + * @file deploySchain.ts * @copyright SKALE Labs 2019-Present */ +// TODO: Remove this line after closing issue https://github.com/skalenetwork/IMA/issues/1720 +// @ts-nocheck import { promises as fs } from 'fs'; import { Interface } from "ethers/lib/utils"; import { ethers, upgrades } from "hardhat"; diff --git a/scripts/test_upgrade.sh b/scripts/test_upgrade.sh index bfe5d9f78..8c048b1af 100755 --- a/scripts/test_upgrade.sh +++ b/scripts/test_upgrade.sh @@ -2,9 +2,11 @@ set -e +trap 'npx ganache instances stop "$GANACHE"' EXIT + if [ -z "$GITHUB_WORKSPACE" ] then - GITHUB_WORKSPACE="$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")" + GITHUB_WORKSPACE=$(git rev-parse --show-toplevel) fi if [ -z "$GITHUB_REPOSITORY" ] @@ -41,31 +43,36 @@ VERSION="$DEPLOYED_VERSION" \ PRIVATE_KEY_FOR_ETHEREUM="$PRIVATE_KEY_FOR_ETHEREUM" \ PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ npx hardhat run migrations/deploySkaleManagerComponents.ts --network localhost +# TODO: remove this line after upgrading to 2.2.0 +perl -0777 -i -pe 's/await contractManagerInst\.setContractsAddress\( "MessageProxyForMainnet",[^\}]*console\.log\( "Successfully registered MessageProxy in ContractManager" \);/await contractManagerInst.setContractsAddress( "MessageProxyForMainnet", deployed.get( "MessageProxyForMainnet" )?.address);\nawait contractManagerInst.setContractsAddress( "CommunityPool", deployed.get( "CommunityPool" )?.address);\nawait contractManagerInst.setContractsAddress( "Linker", deployed.get( "Linker" )?.address);\nfor (const contractName of contractsToDeploy) {\n const contract = deployed.get(contractName);\n if (contract === undefined) {\n throw new Error(`\${contractName} was not found`);\n }\n await contractManagerInst.setContractsAddress( contractName, contract.address);\n}\nconsole.log( "Successfully registered MessageProxy in ContractManager" );/s' migrations/deployMainnet.ts +# end of TODO VERSION="$DEPLOYED_VERSION" npx hardhat run migrations/deployMainnet.ts --network localhost -CHAIN_NAME_SCHAIN="Test" \ -VERSION="$DEPLOYED_VERSION" \ -URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ -PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ -npx hardhat run migrations/deploySchain.ts --network schain +# TODO: uncomment upgrade schain test after closing issue https://github.com/skalenetwork/IMA/issues/1720 -ABI_FILENAME_SCHAIN="proxySchain_Test.json" -ABI="data/$ABI_FILENAME_SCHAIN" \ -MANIFEST=".openzeppelin/unknown-1337.json" \ -VERSION="$DEPLOYED_VERSION" \ -npx hardhat run migrations/changeManifest.ts --network localhost +# CHAIN_NAME_SCHAIN="Test" \ +# VERSION="$DEPLOYED_VERSION" \ +# URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ +# PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ +# npx hardhat run migrations/deploySchain.ts --network schain + +# ABI_FILENAME_SCHAIN="proxySchain_Test.json" +# ABI="data/$ABI_FILENAME_SCHAIN" \ +# MANIFEST=".openzeppelin/unknown-1337.json" \ +# VERSION="$DEPLOYED_VERSION" \ +# npx hardhat run migrations/changeManifest.ts --network localhost cp .openzeppelin/unknown-*.json "$GITHUB_WORKSPACE/.openzeppelin" cp ./data/skaleManagerComponents.json "$GITHUB_WORKSPACE/data/" -cp "./data/ima-schain-$DEPLOYED_VERSION-manifest.json" "$GITHUB_WORKSPACE/data/" -ABI_FILENAME_MAINNET="proxyMainnet.json" -cp "data/$ABI_FILENAME_MAINNET" "$GITHUB_WORKSPACE/data" -cp "data/$ABI_FILENAME_SCHAIN" "$GITHUB_WORKSPACE/data" +cp "data/proxyMainnet.json" "$GITHUB_WORKSPACE/data" +# cp "./data/ima-schain-$DEPLOYED_VERSION-manifest.json" "$GITHUB_WORKSPACE/data/" +# cp "data/$ABI_FILENAME_SCHAIN" "$GITHUB_WORKSPACE/data" cd "$GITHUB_WORKSPACE" -rm -r --interactive=never "$DEPLOYED_DIR" +rm -rf "$DEPLOYED_DIR" -ABI="data/$ABI_FILENAME_MAINNET" \ +MESSAGE_PROXY_FOR_MAINNET=$(cat data/proxyMainnet.json | jq -r .message_proxy_mainnet_address) TEST_UPGRADE=true \ +TARGET="$MESSAGE_PROXY_FOR_MAINNET" \ ALLOW_NOT_ATOMIC_UPGRADE="OK" \ VERSION=$VERSION_TAG \ npx hardhat run migrations/upgradeMainnet.ts --network localhost @@ -74,13 +81,13 @@ VERSION="$(git describe --tags | echo "$VERSION_TAG")" echo "$VERSION" mv "data/proxyMainnet-$VERSION-localhost-abi.json" "data/proxyMainnet.json" -ABI="data/$ABI_FILENAME_SCHAIN" \ -MANIFEST="data/ima-schain-$DEPLOYED_VERSION-manifest.json" \ -CHAIN_NAME_SCHAIN="Test" \ -ALLOW_NOT_ATOMIC_UPGRADE="OK" \ -VERSION=$VERSION_TAG \ -URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ -PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ -npx hardhat run migrations/upgradeSchain.ts --network schain +# ABI="data/$ABI_FILENAME_SCHAIN" \ +# MANIFEST="data/ima-schain-$DEPLOYED_VERSION-manifest.json" \ +# CHAIN_NAME_SCHAIN="Test" \ +# ALLOW_NOT_ATOMIC_UPGRADE="OK" \ +# VERSION=$VERSION_TAG \ +# URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ +# PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ +# npx hardhat run migrations/upgradeSchain.ts --network schain npx ganache instances stop "$GANACHE" From 9cb2ba245402b9f5a5b4672180568b5d0778ba2f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:12:14 +0000 Subject: [PATCH 15/45] Add excludes for tsconfig.json --- test/utils/helper.ts | 2 +- tsconfig.json | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/test/utils/helper.ts b/test/utils/helper.ts index ff8a076b0..7bf34cd1b 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -57,7 +57,7 @@ export function stringKeccak256(value: string): string { return ethers.solidityPackedKeccak256(["string"], [value]); } -export function getPublicKey(wallet: HDNodeWallet): [BytesLike, BytesLike] { +export function getPublicKey(wallet: HDNodeWallet | Wallet): [BytesLike, BytesLike] { const publicKey = secp256k1EC.keyFromPrivate(wallet.privateKey.slice(2)).getPublic(); return [ethers.hexlify(publicKey.getX().toBuffer()), ethers.hexlify(publicKey.getY().toBuffer())] } diff --git a/tsconfig.json b/tsconfig.json index d0d126c84..470e69af9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,5 +18,19 @@ "skipLibCheck": true }, "include": ["**/*.ts"], - "exclude": ["node_modules", "example", "build", "test-tokens"] + "exclude": [ + "node_modules", + "example", + "build", + "test-tokens", + // TODO: Remove these excludes after closing https://github.com/skalenetwork/IMA/issues/1720 + "migrations/deploySchain.ts", + "migrations/upgradeSchain.ts", + "migrations/transferOwnership.ts", + "migrations/submitTransactions.ts", + "migrations/hotfixUpgrade.ts", + "migrations/generateManifest.ts", + "gas/calculateGas.ts", + "migrations/deploySchain.ts" + ] } From c7850005f0f3ab6c3e414cd67c532edbb9733ecd Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 18:46:48 +0000 Subject: [PATCH 16/45] Fix eslinter --- migrations/deployMainnet.ts | 23 +++++++++++------------ migrations/deploySchain.ts | 3 ++- test/DepositBoxERC1155.ts | 2 +- test/DepositBoxERC20.ts | 4 ++-- test/DepositBoxERC721.ts | 4 ++-- test/DepositBoxERC721WithMetadata.ts | 4 ++-- test/DepositBoxEth.ts | 4 ++-- test/TokenManagerERC1155.ts | 1 - test/TokenManagerERC20.ts | 1 - test/TokenManagerERC721.ts | 1 - test/TokenManagerERC721WithMetadata.ts | 1 - 11 files changed, 22 insertions(+), 26 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index 00f24ec1f..25b9e51f2 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -25,7 +25,7 @@ import { promises as fs } from 'fs'; import { Interface } from 'ethers'; import { ethers, upgrades } from "hardhat"; -import { MessageProxyForMainnet, Linker } from "../typechain"; +import { MessageProxyForMainnet, Linker, ContractManager } from "../typechain"; import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; import { SkaleABIFile } from "@skalenetwork/skale-contracts/lib/domain/types"; @@ -52,7 +52,7 @@ async function getContractManager() { } } -function isValidContractManager(contractManager: { address?: string, abi?: any[] }) { +function isValidContractManager(contractManager: { address?: string, abi?: unknown[] }) { return contractManager?.address && contractManager?.abi; } @@ -80,7 +80,7 @@ export const contracts = [ ...depositBoxes ]; -async function deployContract(name: string, args: any[], initializer: string) { +async function deployContract(name: string, args: unknown[], initializer: string) { console.log("Deploy", name); const factory = await getContractFactory(name); const proxy = await upgrades.deployProxy(factory, args, { initializer }); @@ -98,7 +98,7 @@ async function registerContracts(linker: Linker, messageProxy: MessageProxyForMa } } -async function registerInContractManager(contractManagerInst: any, deployed: Map) { +async function registerInContractManager(contractManagerInst: ContractManager, deployed: Map) { try { for (const contractName of contracts) { const contract = deployed.get(contractName); @@ -173,16 +173,15 @@ async function main() { await registerContracts(linker, messageProxyForMainnet, [proxyAddress]); } - if (isValidContractManager(contractManager) && await ethers.provider.getCode(contractManager.address) !== "0x") { - const contractManagerInst = new ethers.Contract(contractManager.address, contractManager.abi, owner); - if (await contractManagerInst.owner() === owner.address) { - await registerInContractManager(contractManagerInst, deployed); - } else { - console.error("Owner of ContractManager is not the same as the deployer"); - } - } else { + if (!(isValidContractManager(contractManager) && await ethers.provider.getCode(contractManager.address) !== "0x")) { console.error("Invalid ContractManager address or ABI"); } + const contractManagerInst = (new ethers.Contract(contractManager.address, contractManager.abi, owner)) as unknown as ContractManager; + if (await contractManagerInst.owner() !== owner.address) { + console.error("Owner of ContractManager is not the same as the deployer"); + } + await registerInContractManager(contractManagerInst, deployed); + console.log("Registration is completed!"); console.log("Store ABIs"); diff --git a/migrations/deploySchain.ts b/migrations/deploySchain.ts index 19379ead9..cdaf2fd08 100644 --- a/migrations/deploySchain.ts +++ b/migrations/deploySchain.ts @@ -22,7 +22,8 @@ * @file deploySchain.ts * @copyright SKALE Labs 2019-Present */ -// TODO: Remove this line after closing issue https://github.com/skalenetwork/IMA/issues/1720 +// TODO: Remove this line after closing issue https://github.com/skalenetwork/IMA/issues/1720 +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { promises as fs } from 'fs'; import { Interface } from "ethers/lib/utils"; diff --git a/test/DepositBoxERC1155.ts b/test/DepositBoxERC1155.ts index 9ab06fa46..1190fedf7 100644 --- a/test/DepositBoxERC1155.ts +++ b/test/DepositBoxERC1155.ts @@ -56,7 +56,7 @@ import { deployCommunityPool } from "./utils/deploy/mainnet/communityPool"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish, HDNodeWallet, N, Wallet } from "ethers"; +import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index b3c3fb929..7323570d8 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -33,7 +33,7 @@ import { ERC20OnChain, CommunityPool } from "../typechain"; -import { stringFromHex, getPublicKey, stringKeccak256, stringToHex } from "./utils/helper"; +import { getPublicKey, stringKeccak256, stringToHex } from "./utils/helper"; import chai = require("chai"); @@ -55,7 +55,7 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; -import { assert, expect } from "chai"; +import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; import { currentTime, skipTime } from "./utils/time"; diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index 926607858..d5064f67c 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringFromHex, stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -58,7 +58,7 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; -import { assert, expect } from "chai"; +import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; const BlsSignature: [BigNumberish, BigNumberish] = [ diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index 3caa00978..47fbd1723 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringFromHex, stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -58,7 +58,7 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { BigNumberish, HDNodeWallet, Wallet } from "ethers"; -import { assert, expect } from "chai"; +import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; const BlsSignature: [BigNumberish, BigNumberish] = [ diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 4912e8e3e..91a14de02 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -55,9 +55,9 @@ import { deployFallbackEthTester } from "./utils/deploy/test/fallbackEthTester"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish, ContractTransaction, ContractTransactionResponse, HDNodeWallet, Wallet } from "ethers"; +import { BigNumberish, ContractTransactionResponse, HDNodeWallet, Wallet } from "ethers"; -import { assert, expect } from "chai"; +import { expect } from "chai"; import { createNode } from "./utils/skale-manager-utils/nodes"; const BlsSignature: [BigNumberish, BigNumberish] = [ diff --git a/test/TokenManagerERC1155.ts b/test/TokenManagerERC1155.ts index 95958886d..eebf4f97d 100644 --- a/test/TokenManagerERC1155.ts +++ b/test/TokenManagerERC1155.ts @@ -49,7 +49,6 @@ import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; diff --git a/test/TokenManagerERC20.ts b/test/TokenManagerERC20.ts index dcf2b160e..57f0b44d4 100644 --- a/test/TokenManagerERC20.ts +++ b/test/TokenManagerERC20.ts @@ -48,7 +48,6 @@ import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish } from "ethers"; import { assert, expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; diff --git a/test/TokenManagerERC721.ts b/test/TokenManagerERC721.ts index 53b367785..29fb5a9c1 100644 --- a/test/TokenManagerERC721.ts +++ b/test/TokenManagerERC721.ts @@ -49,7 +49,6 @@ import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; diff --git a/test/TokenManagerERC721WithMetadata.ts b/test/TokenManagerERC721WithMetadata.ts index 2d2c45a41..fdb59bc1d 100644 --- a/test/TokenManagerERC721WithMetadata.ts +++ b/test/TokenManagerERC721WithMetadata.ts @@ -49,7 +49,6 @@ import { deployCommunityLocker } from "./utils/deploy/schain/communityLocker"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish } from "ethers"; import { expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; From 08f460ae0b13dc98f10d2b6dce84ad406e4102e0 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 19:35:21 +0000 Subject: [PATCH 17/45] Fix calculateGas test --- gas/calculateGas.ts | 522 ++++++++++++++++++++++---------------------- 1 file changed, 261 insertions(+), 261 deletions(-) diff --git a/gas/calculateGas.ts b/gas/calculateGas.ts index 6b607edb3..5d10f92ed 100644 --- a/gas/calculateGas.ts +++ b/gas/calculateGas.ts @@ -82,8 +82,8 @@ import { deployMessages } from "../test/utils/deploy/messages"; import { stringKeccak256, getPublicKey } from "../test/utils/helper"; import { ethers } from "hardhat"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; -import { BigNumber, Wallet } from "ethers"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { BigNumberish, Wallet, HDNodeWallet } from "ethers"; import { expect } from "chai"; import { deployCommunityLocker } from "../test/utils/deploy/schain/communityLocker"; @@ -94,7 +94,7 @@ describe("Gas calculation", () => { let user: SignerWithAddress; let schainOwner: SignerWithAddress; let richGuy: SignerWithAddress; - let nodeAddress: Wallet; + let nodeAddress: HDNodeWallet; let imaLinker: Linker; let depositBoxEth: DepositBoxEth; @@ -137,13 +137,13 @@ describe("Gas calculation", () => { before(async () => { [deployer, schainOwner, user, richGuy] = await ethers.getSigners(); nodeAddress = Wallet.createRandom().connect(ethers.provider); - const balanceRichGuy = await richGuy.getBalance(); - await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy.sub(ethers.utils.parseEther("1"))}); + const balanceRichGuy = await ethers.provider.getBalance(richGuy.address); + await richGuy.sendTransaction({to: nodeAddress.address, value: balanceRichGuy - ethers.parseEther("1")}); }) after(async () => { - const balanceNode = await nodeAddress.getBalance(); - await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode.sub(ethers.utils.parseEther("1"))}); + const balanceNode = await ethers.provider.getBalance(nodeAddress.address); + await nodeAddress.sendTransaction({to: richGuy.address, value: balanceNode - ethers.parseEther("1")}); }); beforeEach(async () => { @@ -155,17 +155,17 @@ describe("Gas calculation", () => { schainsInternal = await (await ethers.getContractFactory("SchainsInternal")).deploy() as SchainsInternal; skaleVerifier = await (await ethers.getContractFactory("SkaleVerifierMock")).deploy() as SkaleVerifierMock; wallets = await (await ethers.getContractFactory("Wallets")).deploy() as Wallets; - await contractManager.connect(deployer).setContractsAddress("KeyStorage", keyStorage.address); - await contractManager.connect(deployer).setContractsAddress("Nodes", nodes.address); - await contractManager.connect(deployer).setContractsAddress("Schains", schains.address); - await contractManager.connect(deployer).setContractsAddress("SchainsInternal", schainsInternal.address); - await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", skaleVerifier.address); - await contractManager.connect(deployer).setContractsAddress("Wallets", wallets.address); + await contractManager.connect(deployer).setContractsAddress("KeyStorage", await keyStorage.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Nodes", await nodes.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Schains", await schains.getAddress()); + await contractManager.connect(deployer).setContractsAddress("SchainsInternal", await schainsInternal.getAddress()); + await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", await skaleVerifier.getAddress()); + await contractManager.connect(deployer).setContractsAddress("Wallets", await wallets.getAddress()); // add ContractManager to contracts - await schains.connect(deployer).addContractManager(contractManager.address); - await schainsInternal.connect(deployer).addContractManager(contractManager.address); - await wallets.connect(deployer).addContractManager(contractManager.address); + await schains.connect(deployer).addContractManager(await contractManager.getAddress()); + await schainsInternal.connect(deployer).addContractManager(await contractManager.getAddress()); + await wallets.connect(deployer).addContractManager(await contractManager.getAddress()); // setup 16 nodes const nodeCreationParams = { @@ -224,41 +224,41 @@ describe("Gas calculation", () => { depositBoxERC1155 = await deployDepositBoxERC1155(contractManager, imaLinker, messageProxyForMainnet); const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForMainnet.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForMainnet.registerExtraContractForAll(depositBoxEth.address) - await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC20.address) - await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC721.address) - await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC1155.address) - await messageProxyForMainnet.registerExtraContractForAll(communityPool.address) - await messageProxyForMainnet.registerExtraContractForAll(imaLinker.address) + await messageProxyForMainnet.registerExtraContractForAll(await depositBoxEth.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC20.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC721.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC1155.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(await communityPool.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(await imaLinker.getAddress()) messages = await deployMessages(); // IMA schain part deployment - messageProxyForSchain = await deployMessageProxyForSchain(keyStorage.address, schainName); + messageProxyForSchain = await deployMessageProxyForSchain(await keyStorage.getAddress(), schainName); await keyStorage.connect(deployer).setBlsCommonPublicKey(BLSPublicKey); - tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, imaLinker.address); - communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain.address, tokenManagerLinker, communityPool.address); + tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, await imaLinker.getAddress()); + communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, await communityPool.getAddress()); tokenManagerEth = await deployTokenManagerEth( schainName, - messageProxyForSchain.address, + await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, - depositBoxEth.address, + await depositBoxEth.getAddress(), "0x0000000000000000000000000000000000000000"); - tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, depositBoxERC20.address); - tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, depositBoxERC721.address); - tokenManagerERC1155 = await deployTokenManagerERC1155(schainName, messageProxyForSchain.address, tokenManagerLinker, communityLocker, depositBoxERC1155.address); + tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC20.getAddress()); + tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC721.getAddress()); + tokenManagerERC1155 = await deployTokenManagerERC1155(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC1155.getAddress()); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth.address) - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC20.address) - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address) - await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC1155.address) - await messageProxyForSchain.registerExtraContractForAll(communityLocker.address) + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerEth.getAddress()) + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC20.getAddress()) + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()) + await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC1155.getAddress()) + await messageProxyForSchain.registerExtraContractForAll(await communityLocker.getAddress()) ethERC20 = await deployEthErc20(tokenManagerEth); - await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20.address); + await tokenManagerEth.connect(deployer).setEthErc20Address(await ethERC20.getAddress()); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); - await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, tokenManagerLinker.address); + await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, await tokenManagerLinker.getAddress()); await tokenManagerERC20.connect(deployer).grantRole(await tokenManagerERC20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC1155.connect(deployer).grantRole(await tokenManagerERC1155.TOKEN_REGISTRAR_ROLE(), schainOwner.address); @@ -269,16 +269,16 @@ describe("Gas calculation", () => { // await lockAndDataForSchain.setContract("ERC20Module", erc20ModuleForSchain.address); // await lockAndDataForSchain.setContract("ERC721Module", erc721ModuleForSchain.address); // await lockAndDataForSchain.setContract("TokenManager", tokenManager.address); - // await lockAndDataForSchain.setContract("MessageProxy", messageProxyForSchain.address); + // await lockAndDataForSchain.setContract("MessageProxy", await messageProxyForSchain.getAddress()); // await lockAndDataForSchain.setContract("TokenFactory", tokenFactory.address); // IMA registration - await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), imaLinker.address); - await imaLinker.connectSchain(schainName, [tokenManagerLinker.address, communityLocker.address, tokenManagerEth.address, tokenManagerERC20.address, tokenManagerERC721.address, tokenManagerERC1155.address]); + await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), await imaLinker.getAddress()); + await imaLinker.connectSchain(schainName, [await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), await tokenManagerEth.getAddress(), await tokenManagerERC20.getAddress(), await tokenManagerERC721.getAddress(), await tokenManagerERC1155.getAddress()]); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: 1e18.toString() }); - // await lockAndDataForSchain.addDepositBox(depositBoxEth.address); - // await lockAndDataForSchain.addDepositBox(depositBoxERC20.address); - // await lockAndDataForSchain.addDepositBox(depositBoxERC721.address); + // await lockAndDataForSchain.addDepositBox(await depositBoxEth.getAddress()); + // await lockAndDataForSchain.addDepositBox(await depositBoxERC20.getAddress()); + // await lockAndDataForSchain.addDepositBox(await depositBoxERC721.getAddress()); // Deploy test tokens ERC20TokenOnMainnet = await deployERC20OnChain("GCERC20", "GCE"); @@ -291,7 +291,7 @@ describe("Gas calculation", () => { // Mint tokens and grant minter role await ERC20TokenOnMainnet.mint(user.address, 5); const minterRoleERC20 = await ERC20TokenOnSchain.MINTER_ROLE(); - await ERC20TokenOnSchain.grantRole(minterRoleERC20, tokenManagerERC20.address); + await ERC20TokenOnSchain.grantRole(minterRoleERC20, await tokenManagerERC20.getAddress()); await ERC721TokenOnMainnet.mint(user.address, 1); await ERC721TokenOnMainnet.mint(user.address, 2); @@ -304,7 +304,7 @@ describe("Gas calculation", () => { await ERC721TokenOnMainnet.mint(user.address, 9); await ERC721TokenOnMainnet.mint(user.address, 10); const minterRoleERC721 = await ERC721TokenOnSchain.MINTER_ROLE(); - await ERC721TokenOnSchain.grantRole(minterRoleERC721, tokenManagerERC721.address); + await ERC721TokenOnSchain.grantRole(minterRoleERC721, await tokenManagerERC721.getAddress()); await ERC1155TokenOnMainnet.mint(user.address, 1, 1, "0x"); await ERC1155TokenOnMainnet.mint(user.address, 2, 2, "0x"); @@ -317,7 +317,7 @@ describe("Gas calculation", () => { await ERC1155TokenOnMainnet.mint(user.address, 9, 9, "0x"); await ERC1155TokenOnMainnet.mint(user.address, 10, 10, "0x"); const minterRoleERC1155 = await ERC1155TokenOnSchain.MINTER_ROLE(); - await ERC1155TokenOnSchain.grantRole(minterRoleERC1155, tokenManagerERC1155.address); + await ERC1155TokenOnSchain.grantRole(minterRoleERC1155, await tokenManagerERC1155.getAddress()); // register user await communityPool.connect(user).rechargeUserWallet(schainName, user.address, {value: "1000000000000000000"}); @@ -325,234 +325,234 @@ describe("Gas calculation", () => { it("calculate eth deposits", async () => { let res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("First deposit eth cost:", res.gasUsed.toNumber()); + console.log("First deposit eth cost:", res?.gasUsed); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Second deposit eth cost:", res.gasUsed.toNumber()); + console.log("Second deposit eth cost:", res?.gasUsed); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Third deposit eth cost:", res.gasUsed.toNumber()); + console.log("Third deposit eth cost:", res?.gasUsed); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Forth deposit eth cost:", res.gasUsed.toNumber()); + console.log("Forth deposit eth cost:", res?.gasUsed); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Fifth deposit eth cost:", res.gasUsed.toNumber()); + console.log("Fifth deposit eth cost:", res?.gasUsed); }); describe("ERC20 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, ERC20TokenOnMainnet.address, ERC20TokenOnSchain.address)).wait(); - console.log("Registration of ERC20 token in TokenManager cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, ERC20TokenOnMainnet.address)).wait(); - console.log("Registration of ERC20 token in DepositBox cost:", res.gasUsed.toNumber()); + let res = await (await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await ERC20TokenOnMainnet.getAddress(), await ERC20TokenOnSchain.getAddress())).wait(); + console.log("Registration of ERC20 token in TokenManager cost:", res?.gasUsed); + res = await (await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await ERC20TokenOnMainnet.getAddress())).wait(); + console.log("Registration of ERC20 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC20", async () => { - let res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20.address, 2)).wait(); - console.log("First approve of ERC20 token cost:", res.gasUsed.toNumber()); - res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20.address, 2)).wait(); - console.log("Second approve of ERC20 token cost:", res.gasUsed.toNumber()); + let res = await (await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 2)).wait(); + console.log("First approve of ERC20 token cost:", res?.gasUsed); + res = await (await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 2)).wait(); + console.log("Second approve of ERC20 token cost:", res?.gasUsed); }); it("calculate erc20 deposits without eth without automatic deploy", async () => { - await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20.address, 5); - - let res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 1)).wait(); - console.log("First deposit erc20 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 1)).wait(); - console.log("Second deposit erc20 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 1)).wait(); - console.log("Third deposit erc20 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 1)).wait(); - console.log("Forth deposit erc20 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 1)).wait(); - console.log("Deposit all remaining approved erc20 tokens cost:", res.gasUsed.toNumber()); + await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); + + let res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + console.log("First deposit erc20 cost:", res?.gasUsed); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + console.log("Second deposit erc20 cost:", res?.gasUsed); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + console.log("Third deposit erc20 cost:", res?.gasUsed); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + console.log("Forth deposit erc20 cost:", res?.gasUsed); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + console.log("Deposit all remaining approved erc20 tokens cost:", res?.gasUsed); }); it("calculate erc20 deposits of all approved tokens without eth without automatic deploy", async () => { - await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20.address, 5); + await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); - const res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, 5)).wait(); - console.log("Deposit all approved erc20 tokens at once cost:", res.gasUsed.toNumber()); + const res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 5)).wait(); + console.log("Deposit all approved erc20 tokens at once cost:", res?.gasUsed); }); }); describe("ERC721 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, ERC721TokenOnMainnet.address, ERC721TokenOnSchain.address)).wait(); - console.log("Registration of ERC721 token in TokenManager cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, ERC721TokenOnMainnet.address)).wait(); - console.log("Registration of ERC721 token in DepositBox cost:", res.gasUsed.toNumber()); + let res = await (await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await ERC721TokenOnMainnet.getAddress(), await ERC721TokenOnSchain.getAddress())).wait(); + console.log("Registration of ERC721 token in TokenManager cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, await ERC721TokenOnMainnet.getAddress())).wait(); + console.log("Registration of ERC721 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC721", async () => { - let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 1)).wait(); - console.log("First transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 2)).wait(); - console.log("Second transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 3)).wait(); - console.log("Third transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 4)).wait(); - console.log("Forth transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 5)).wait(); - console.log("Fifth transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 6)).wait(); - console.log("Sixth transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 7)).wait(); - console.log("Seventh transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 8)).wait(); - console.log("Eighth transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 9)).wait(); - console.log("Ninth transfer of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 10)).wait(); - console.log("Tenth transfer of ERC721 token cost:", res.gasUsed.toNumber()); + let res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1)).wait(); + console.log("First transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2)).wait(); + console.log("Second transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3)).wait(); + console.log("Third transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4)).wait(); + console.log("Forth transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5)).wait(); + console.log("Fifth transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6)).wait(); + console.log("Sixth transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7)).wait(); + console.log("Seventh transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8)).wait(); + console.log("Eighth transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9)).wait(); + console.log("Ninth transfer of ERC721 token cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10)).wait(); + console.log("Tenth transfer of ERC721 token cost:", res?.gasUsed); }); it("calculate erc721 deposits without eth without automatic deploy", async () => { - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 1); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 2); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 3); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 4); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 5); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 6); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 7); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 8); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 9); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 10); - - let res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 1)).wait(); - console.log("First deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 2)).wait(); - console.log("Second deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 3)).wait(); - console.log("Third deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 4)).wait(); - console.log("Forth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 5)).wait(); - console.log("Fifth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 6)).wait(); - console.log("Sixth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 7)).wait(); - console.log("Seventh deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 8)).wait(); - console.log("Eighth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 9)).wait(); - console.log("Ninth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 10)).wait(); - console.log("Tenth deposit erc721 cost:", res.gasUsed.toNumber()); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10); + + let res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 1)).wait(); + console.log("First deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 2)).wait(); + console.log("Second deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 3)).wait(); + console.log("Third deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 4)).wait(); + console.log("Forth deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 5)).wait(); + console.log("Fifth deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 6)).wait(); + console.log("Sixth deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 7)).wait(); + console.log("Seventh deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 8)).wait(); + console.log("Eighth deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 9)).wait(); + console.log("Ninth deposit erc721 cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 10)).wait(); + console.log("Tenth deposit erc721 cost:", res?.gasUsed); }); it("calculate erc721 deposits without eth without automatic deploy and approve each time", async () => { - let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 1)).wait(); - console.log("First approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 1)).wait(); - console.log("First deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 2)).wait(); - console.log("Second approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 2)).wait(); - console.log("Second deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 3)).wait(); - console.log("Third approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 3)).wait(); - console.log("Third deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 4)).wait(); - console.log("Forth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 4)).wait(); - console.log("Forth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 5)).wait(); - console.log("Fifth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 5)).wait(); - console.log("Fifth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 6)).wait(); - console.log("Sixth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 6)).wait(); - console.log("Sixth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 7)).wait(); - console.log("Seventh approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 7)).wait(); - console.log("Seventh deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 8)).wait(); - console.log("Eighth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 8)).wait(); - console.log("Eighth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 9)).wait(); - console.log("Ninth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 9)).wait(); - console.log("Ninth deposit erc721 cost:", res.gasUsed.toNumber()); - res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 10)).wait(); - console.log("Tenth approve of ERC721 token cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, 10)).wait(); - console.log("Tenth deposit erc721 cost:", res.gasUsed.toNumber()); + let res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1)).wait(); + console.log("First approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 1)).wait(); + console.log("First deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2)).wait(); + console.log("Second approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 2)).wait(); + console.log("Second deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3)).wait(); + console.log("Third approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 3)).wait(); + console.log("Third deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4)).wait(); + console.log("Forth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 4)).wait(); + console.log("Forth deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5)).wait(); + console.log("Fifth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 5)).wait(); + console.log("Fifth deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6)).wait(); + console.log("Sixth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 6)).wait(); + console.log("Sixth deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7)).wait(); + console.log("Seventh approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 7)).wait(); + console.log("Seventh deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8)).wait(); + console.log("Eighth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 8)).wait(); + console.log("Eighth deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9)).wait(); + console.log("Ninth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 9)).wait(); + console.log("Ninth deposit erc721 cost:", res?.gasUsed); + res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10)).wait(); + console.log("Tenth approve of ERC721 token cost:", res?.gasUsed); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 10)).wait(); + console.log("Tenth deposit erc721 cost:", res?.gasUsed); }); }); describe("ERC1155 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, ERC1155TokenOnMainnet.address, ERC1155TokenOnSchain.address)).wait(); - console.log("Registration of ERC1155 token in TokenManager cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, ERC1155TokenOnMainnet.address)).wait(); - console.log("Registration of ERC1155 token in DepositBox cost:", res.gasUsed.toNumber()); + let res = await (await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await ERC1155TokenOnMainnet.getAddress(), await ERC1155TokenOnSchain.getAddress())).wait(); + console.log("Registration of ERC1155 token in TokenManager cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, await ERC1155TokenOnMainnet.getAddress())).wait(); + console.log("Registration of ERC1155 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC1155", async () => { - const res = await (await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155.address, true)).wait(); - console.log("Approve ERC1155 token cost:", res.gasUsed.toNumber()); + const res = await (await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true)).wait(); + console.log("Approve ERC1155 token cost:", res?.gasUsed); }); it("calculate erc1155 deposits without eth without automatic deploy", async () => { - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155.address, true); - - let res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 1, 1)).wait(); - console.log("First deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 2, 2)).wait(); - console.log("Second deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 3, 3)).wait(); - console.log("Third deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 4, 4)).wait(); - console.log("Forth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 5, 5)).wait(); - console.log("Fifth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 6, 6)).wait(); - console.log("Sixth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 7, 7)).wait(); - console.log("Seventh deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 8, 8)).wait(); - console.log("Eighth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 9, 9)).wait(); - console.log("Ninth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, 10, 10)).wait(); - console.log("Tenth deposit erc1155 cost:", res.gasUsed.toNumber()); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + + let res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 1, 1)).wait(); + console.log("First deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 2, 2)).wait(); + console.log("Second deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 3, 3)).wait(); + console.log("Third deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 4, 4)).wait(); + console.log("Forth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 5, 5)).wait(); + console.log("Fifth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 6, 6)).wait(); + console.log("Sixth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 7, 7)).wait(); + console.log("Seventh deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 8, 8)).wait(); + console.log("Eighth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 9, 9)).wait(); + console.log("Ninth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 10, 10)).wait(); + console.log("Tenth deposit erc1155 cost:", res?.gasUsed); }); it("calculate erc1155 deposits batches without eth without automatic deploy", async () => { - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155.address, true); - - let res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("First deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Second deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Third deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Forth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1])).wait(); - console.log("Fifth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [6, 7, 8, 9, 10], [1, 1, 1, 1, 1])).wait(); - console.log("Sixth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [7, 8, 9, 10], [1, 1, 1, 1])).wait(); - console.log("Seventh deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [8, 9, 10], [1, 1, 1])).wait(); - console.log("Eighth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [9, 10], [1, 1])).wait(); - console.log("Ninth deposit erc1155 cost:", res.gasUsed.toNumber()); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, [10], [1])).wait(); - console.log("Tenth deposit erc1155 cost:", res.gasUsed.toNumber()); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + + let res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); + console.log("First deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); + console.log("Second deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1])).wait(); + console.log("Third deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1])).wait(); + console.log("Forth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1])).wait(); + console.log("Fifth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [6, 7, 8, 9, 10], [1, 1, 1, 1, 1])).wait(); + console.log("Sixth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [7, 8, 9, 10], [1, 1, 1, 1])).wait(); + console.log("Seventh deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [8, 9, 10], [1, 1, 1])).wait(); + console.log("Eighth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [9, 10], [1, 1])).wait(); + console.log("Ninth deposit erc1155 cost:", res?.gasUsed); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [10], [1])).wait(); + console.log("Tenth deposit erc1155 cost:", res?.gasUsed); }); }); describe("Exits", async() => { // prepare BLS signature // P.s. this is test signature from test of SkaleManager.SkaleVerifier - please do not use it!!! - const BlsSignature: [BigNumber, BigNumber] = [ - BigNumber.from("178325537405109593276798394634841698946852714038246117383766698579865918287"), - BigNumber.from("493565443574555904019191451171395204672818649274520396086461475162723833781"), + const BlsSignature: [BigNumberish, BigNumberish] = [ + "178325537405109593276798394634841698946852714038246117383766698579865918287", + "493565443574555904019191451171395204672818649274520396086461475162723833781", ]; const sign = { blsSignature: BlsSignature, @@ -568,7 +568,7 @@ describe("Gas calculation", () => { arrayOfMessages, sign )).wait(); - console.log(action, "cost:", res.gasUsed.toNumber()); + console.log(action, "cost:", res?.gasUsed); } describe("Eth transfers ready", async () => { @@ -577,8 +577,8 @@ describe("Gas calculation", () => { async function getEthMessage() { return { data: await messages.encodeTransferEthMessage(user.address, "1000000000000000000"), - destinationContract: depositBoxEth.address, - sender: tokenManagerEth.address, + destinationContract: await depositBoxEth.getAddress(), + sender: await tokenManagerEth.getAddress(), }; } @@ -588,7 +588,7 @@ describe("Gas calculation", () => { async function getMyEth(action: string) { const res = await (await depositBoxEth.connect(user).getMyEth()).wait(); - console.log(action, "getMyEth eth cost:", res.gasUsed.toNumber()); + console.log(action, "getMyEth eth cost:", res?.gasUsed); } it("calculate 1 exit eth cost per one message", async () => { @@ -812,27 +812,27 @@ describe("Gas calculation", () => { describe("ERC20 Token registered and approved", async () => { - // prepare exit message of erc20 token - await TokenManager.exitToMainERC20(ERC20TokenOnMainnet.address, amount, {from: user}); + // prepare exit message of erc20 token - await TokenManager.exitToMainERC20(await ERC20TokenOnMainnet.getAddress(), amount, {from: user}); async function getERC20Message(amount: number) { return { - data: await messages.encodeTransferErc20Message(ERC20TokenOnMainnet.address, user.address, amount), - destinationContract: depositBoxERC20.address, - sender: tokenManagerERC20.address + data: await messages.encodeTransferErc20Message(await ERC20TokenOnMainnet.getAddress(), user.address, amount), + destinationContract: await depositBoxERC20.getAddress(), + sender: await tokenManagerERC20.getAddress() }; } async function sendERC20(amount: number) { - await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet.address, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), amount); } async function checkBalance() { - ((await ERC20TokenOnMainnet.balanceOf(user.address)).toString()).should.be.equal(BigNumber.from(5).toString()); + (await ERC20TokenOnMainnet.balanceOf(user.address)).should.be.equal(5); } beforeEach(async () => { - await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, ERC20TokenOnMainnet.address, ERC20TokenOnSchain.address); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, ERC20TokenOnMainnet.address); - await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20.address, 5); + await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await ERC20TokenOnMainnet.getAddress(), await ERC20TokenOnSchain.getAddress()); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await ERC20TokenOnMainnet.getAddress()); + await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); }); afterEach(async() => { @@ -919,17 +919,17 @@ describe("Gas calculation", () => { describe("ERC721 Token registered and approved", async() => { - // prepare exit message of erc721 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet.address, tokenId, {from: user}); + // prepare exit message of erc721 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, {from: user}); async function getERC721Message(tokenId: number) { return { - data: await messages.encodeTransferErc721Message(ERC721TokenOnMainnet.address, user.address, tokenId), - destinationContract: depositBoxERC721.address, - sender: tokenManagerERC721.address + data: await messages.encodeTransferErc721Message(await ERC721TokenOnMainnet.getAddress(), user.address, tokenId), + destinationContract: await depositBoxERC721.getAddress(), + sender: await tokenManagerERC721.getAddress() }; } async function sendERC721(tokenId: number) { - await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet.address, tokenId); + await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), tokenId); } async function checkBalance() { @@ -941,13 +941,13 @@ describe("Gas calculation", () => { } beforeEach(async() => { - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, ERC721TokenOnMainnet.address, ERC721TokenOnSchain.address); - await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, ERC721TokenOnMainnet.address); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 1); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 2); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 3); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 4); - await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721.address, 5); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await ERC721TokenOnMainnet.getAddress(), await ERC721TokenOnSchain.getAddress()); + await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, await ERC721TokenOnMainnet.getAddress()); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4); + await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5); }); afterEach(async() => { @@ -1054,45 +1054,45 @@ describe("Gas calculation", () => { describe("ERC1155 Token registered and approved", async() => { - // prepare exit message of erc1155 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet.address, tokenId, amount, {from: user}); + // prepare exit message of erc1155 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, amount, {from: user}); async function getERC1155Message(tokenId: number, amount: number) { return { - data: await messages.encodeTransferErc1155Message(ERC1155TokenOnMainnet.address, user.address, tokenId, amount), - destinationContract: depositBoxERC1155.address, - sender: tokenManagerERC1155.address + data: await messages.encodeTransferErc1155Message(await ERC1155TokenOnMainnet.getAddress(), user.address, tokenId, amount), + destinationContract: await depositBoxERC1155.getAddress(), + sender: await tokenManagerERC1155.getAddress() }; } - // prepare exit batch message of erc1155 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet.address, tokenId, amounts, {from: user}); + // prepare exit batch message of erc1155 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, amounts, {from: user}); async function getERC1155BatchMessage(tokenIds: number[], amounts: number[]) { return { - data: await messages.encodeTransferErc1155BatchMessage(ERC1155TokenOnMainnet.address, user.address, tokenIds, amounts), - destinationContract: depositBoxERC1155.address, - sender: tokenManagerERC1155.address + data: await messages.encodeTransferErc1155BatchMessage(await ERC1155TokenOnMainnet.getAddress(), user.address, tokenIds, amounts), + destinationContract: await depositBoxERC1155.getAddress(), + sender: await tokenManagerERC1155.getAddress() }; } async function sendERC1155(tokenId: number, amount: number) { - await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet.address, tokenId, amount); + await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), tokenId, amount); } async function sendERC1155Batch(tokenIds: number[], amounts: number[]) { - await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet.address, tokenIds, amounts); + await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), tokenIds, amounts); } async function checkBalance() { const balanceIds = await ERC1155TokenOnMainnet.balanceOfBatch([user.address, user.address, user.address, user.address, user.address], [1, 2, 3, 4, 5]); const balanceIdsNumber: number[] = []; balanceIds.forEach((element) => { - balanceIdsNumber.push(BigNumber.from(element).toNumber()) + balanceIdsNumber.push(Number(element)) }); expect(balanceIdsNumber).to.deep.equal([1, 2, 3, 4, 5]); } beforeEach(async() => { - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, ERC1155TokenOnMainnet.address, ERC1155TokenOnSchain.address); - await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, ERC1155TokenOnMainnet.address); - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155.address, true); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await ERC1155TokenOnMainnet.getAddress(), await ERC1155TokenOnSchain.getAddress()); + await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, await ERC1155TokenOnMainnet.getAddress()); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); }); afterEach(async() => { From 6c044e76330301181fd5a7b128dc427bb58828e4 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 19:42:02 +0000 Subject: [PATCH 18/45] Update test_deploy script to deploy only to mainnet --- scripts/test_deploy.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/test_deploy.sh b/scripts/test_deploy.sh index 25d88d5e1..debc46d64 100755 --- a/scripts/test_deploy.sh +++ b/scripts/test_deploy.sh @@ -15,6 +15,8 @@ export PRIVATE_KEY_FOR_ETHEREUM=$PRIVATE_KEY export PRIVATE_KEY_FOR_SCHAIN=$PRIVATE_KEY yarn deploy-skale-manager-components -yarn deploy-to-both-chains +yarn deploy-to-mainnet +# TODO: Uncomment after fixing deploy script for schain, related issue https://github.com/skalenetwork/IMA/issues/1720 +# yarn deploy-to-both-chains npx ganache instances stop "$GANACHE" From 33c432ed041f4a3770ad5ad2264cd9b9ff723d59 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 12 Nov 2024 19:50:07 +0000 Subject: [PATCH 19/45] Comment storing new abi after upgrade --- scripts/test_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_upgrade.sh b/scripts/test_upgrade.sh index 8c048b1af..ad311ce0b 100755 --- a/scripts/test_upgrade.sh +++ b/scripts/test_upgrade.sh @@ -79,7 +79,7 @@ npx hardhat run migrations/upgradeMainnet.ts --network localhost VERSION="$(git describe --tags | echo "$VERSION_TAG")" echo "$VERSION" -mv "data/proxyMainnet-$VERSION-localhost-abi.json" "data/proxyMainnet.json" +# mv "data/proxyMainnet-$VERSION-localhost-abi.json" "data/proxyMainnet.json" # ABI="data/$ABI_FILENAME_SCHAIN" \ # MANIFEST="data/ima-schain-$DEPLOYED_VERSION-manifest.json" \ From e62cfe69875d5eef5054ef88883417a98f4b92f8 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Wed, 13 Nov 2024 15:37:54 +0000 Subject: [PATCH 20/45] Refactor deployMainnet script --- migrations/deployMainnet.ts | 194 ++++++++++++++++++++++++------------ scripts/test_upgrade.sh | 3 +- 2 files changed, 135 insertions(+), 62 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index 25b9e51f2..fd8438f5d 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -22,13 +22,30 @@ * @file deployMainnet.ts * @copyright SKALE Labs 2019-Present */ -import { promises as fs } from 'fs'; +import chalk from "chalk"; +import { promises as fs, link } from 'fs'; import { Interface } from 'ethers'; import { ethers, upgrades } from "hardhat"; -import { MessageProxyForMainnet, Linker, ContractManager } from "../typechain"; +import { MessageProxyForMainnet, Linker, ContractManager, CommunityPool } from "../typechain"; import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; -import { SkaleABIFile } from "@skalenetwork/skale-contracts/lib/domain/types"; +import { skaleContracts } from "@skalenetwork/skale-contracts-ethers-v6"; + + +export const depositBoxes = [ + "DepositBoxEth", + "DepositBoxERC20", + "DepositBoxERC721", + "DepositBoxERC1155", + "DepositBoxERC721WithMetadata" +]; + +export const contracts = [ + "MessageProxyForMainnet", + "Linker", + "CommunityPool", + ...depositBoxes +]; export function getContractKeyInAbiFile(contract: string) { return contract === "MessageProxyForMainnet" @@ -41,19 +58,28 @@ export async function getManifestFile(): Promise { } async function getContractManager() { - const defaultFilePath = "data/skaleManagerComponents.json"; - const jsonData = JSON.parse(await fs.readFile(defaultFilePath, "utf-8")) as SkaleABIFile; - try { - const { contract_manager_address, contract_manager_abi } = jsonData; - return { address: contract_manager_address as unknown as string, abi: contract_manager_abi as [] }; - } catch (e) { - console.error(e); - process.exit(126); - } + const skaleManager = await getSkaleManagerInstance(); + return (await skaleManager.getContract("ContractManager")) as ContractManager; +} +async function getLinker(): Promise { + const contractManager = await getContractManager(); + return (await contractManager.getContract("Linker")) as unknown as Linker; } -function isValidContractManager(contractManager: { address?: string, abi?: unknown[] }) { - return contractManager?.address && contractManager?.abi; +async function getMessageProxyForMainnet(): Promise { + const contractManager = await getContractManager(); + return (await contractManager.getContract("MessageProxyForMainnet")) as unknown as MessageProxyForMainnet; +} + +async function getSkaleManagerInstance() { + if (!process.env.TARGET) { + console.log(chalk.red("Specify desired skale-manager instance")); + console.log(chalk.red("Set instance alias or SkaleManager address to TARGET environment variable")); + process.exit(1); + } + const network = await skaleContracts.getNetworkByProvider(ethers.provider); + const project = network.getProject("skale-manager"); + return await project.getInstance(process.env.TARGET); } async function setVersion(messageProxy: MessageProxyForMainnet, version: string) { @@ -65,21 +91,6 @@ async function setVersion(messageProxy: MessageProxyForMainnet, version: string) } } -export const depositBoxes = [ - "DepositBoxEth", - "DepositBoxERC20", - "DepositBoxERC721", - "DepositBoxERC1155", - "DepositBoxERC721WithMetadata" -]; - -export const contracts = [ - "MessageProxyForMainnet", - "Linker", - "CommunityPool", - ...depositBoxes -]; - async function deployContract(name: string, args: unknown[], initializer: string) { console.log("Deploy", name); const factory = await getContractFactory(name); @@ -111,78 +122,139 @@ async function registerInContractManager(contractManagerInst: ContractManager, d } } -async function main() { +async function deployMessageProxyForMainnet( + deployed: Map< + string, + { + address: string; + interface: Interface; + } + > +): Promise { const [owner] = await ethers.getSigners(); - const deployed = new Map(); const contractManager = await getContractManager(); - const version = await getVersion(); - + const contractManagerAddress = await contractManager.getAddress(); const messageProxyForMainnet = await deployContract( "MessageProxyForMainnet", - [contractManager?.address], + [contractManagerAddress], 'initialize(address)' ) as unknown as MessageProxyForMainnet; + const messageProxyForMainetAddress = await messageProxyForMainnet.getAddress(); + await contractManager.setContractsAddress("MessageProxyForMainnet", messageProxyForMainetAddress); + await messageProxyForMainnet.grantRole(await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(), owner.address); deployed.set("MessageProxyForMainnet", { - address: await messageProxyForMainnet.getAddress(), + address: messageProxyForMainetAddress, interface: messageProxyForMainnet.interface }); + return messageProxyForMainnet; +} - const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); - await (await messageProxyForMainnet.grantRole(extraContractRegistrarRole, owner.address)).wait(); - - await setVersion(messageProxyForMainnet, version); - +async function deployLinker( + deployed: Map< + string, + { + address: string; + interface: Interface; + } + > +): Promise { + const contractManager = await getContractManager(); + const messageProxyForMainnet = await getMessageProxyForMainnet(); const linker = await deployContract( "Linker", - [contractManager?.address, deployed.get("MessageProxyForMainnet")?.address], + [ + await contractManager.getAddress(), + await messageProxyForMainnet.getAddress(), + ], 'initialize(address,address)' ) as unknown as Linker; + const linkerAddress = await linker.getAddress(); + await contractManager.setContractsAddress("Linker", linkerAddress); + await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), linkerAddress); + await registerContracts(linker, messageProxyForMainnet, [linkerAddress]); + deployed.set("Linker", { - address: await linker.getAddress(), + address: linkerAddress, interface: linker.interface }); + return linker; +} - await registerContracts(linker, messageProxyForMainnet, [await linker.getAddress()]); - const chainConnectorRole = await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(); - await (await messageProxyForMainnet.grantRole(chainConnectorRole, await linker.getAddress())).wait(); - +async function deployCommunityPool( + deployed: Map< + string, + { + address: string; + interface: Interface; + } + > +): Promise { + const contractManager = await getContractManager(); + const messageProxyForMainnet = await getMessageProxyForMainnet(); + const linker = await getLinker(); const communityPool = await deployContract( "CommunityPool", - [contractManager?.address, deployed.get("Linker")?.address, deployed.get("MessageProxyForMainnet")?.address], + [ + await contractManager.getAddress(), + await messageProxyForMainnet.getAddress(), + await linker.getAddress() + ], 'initialize(address,address,address)' - ); + ) as unknown as CommunityPool; const communityPoolAddress = await communityPool.getAddress(); + await contractManager.setContractsAddress("CommunityPool", communityPoolAddress); + await messageProxyForMainnet.setCommunityPool(communityPoolAddress); + await registerContracts(linker, messageProxyForMainnet, [communityPoolAddress]); + deployed.set("CommunityPool", { address: communityPoolAddress, interface: communityPool.interface }); - await registerContracts(linker, messageProxyForMainnet, [communityPoolAddress]); - await (await messageProxyForMainnet.setCommunityPool(communityPoolAddress)).wait(); + return communityPool; +} +async function deployDepositBoxes( + deployed: Map< + string, + { + address: string; + interface: Interface; + } + > +) { + const contractManager = await getContractManager(); + const linker = await getLinker(); + const messageProxyForMainnet = await getMessageProxyForMainnet(); for (const contract of depositBoxes) { const proxy = await deployContract( contract, - [contractManager?.address, deployed.get("Linker")?.address, deployed.get("MessageProxyForMainnet")?.address], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxyForMainnet.getAddress() + ], 'initialize(address,address,address)' ); const proxyAddress = await proxy.getAddress(); + await registerContracts(linker, messageProxyForMainnet, [proxyAddress]); + await contractManager.setContractsAddress(contract, proxyAddress); deployed.set(contract, { address: proxyAddress, interface: proxy.interface }); - await registerContracts(linker, messageProxyForMainnet, [proxyAddress]); } +} - if (!(isValidContractManager(contractManager) && await ethers.provider.getCode(contractManager.address) !== "0x")) { - console.error("Invalid ContractManager address or ABI"); - } - const contractManagerInst = (new ethers.Contract(contractManager.address, contractManager.abi, owner)) as unknown as ContractManager; - if (await contractManagerInst.owner() !== owner.address) { - console.error("Owner of ContractManager is not the same as the deployer"); - } - await registerInContractManager(contractManagerInst, deployed); +async function main() { + const deployed = new Map(); + const version = await getVersion(); + + const messageProxyForMainnet = await deployMessageProxyForMainnet(deployed); + await setVersion(messageProxyForMainnet, version); - console.log("Registration is completed!"); + await deployLinker(deployed); + await deployCommunityPool(deployed); + await deployDepositBoxes(deployed); console.log("Store ABIs"); const outputObject: { [k: string]: string | [] } = {}; diff --git a/scripts/test_upgrade.sh b/scripts/test_upgrade.sh index ad311ce0b..a03d36d07 100755 --- a/scripts/test_upgrade.sh +++ b/scripts/test_upgrade.sh @@ -46,7 +46,8 @@ npx hardhat run migrations/deploySkaleManagerComponents.ts --network localhost # TODO: remove this line after upgrading to 2.2.0 perl -0777 -i -pe 's/await contractManagerInst\.setContractsAddress\( "MessageProxyForMainnet",[^\}]*console\.log\( "Successfully registered MessageProxy in ContractManager" \);/await contractManagerInst.setContractsAddress( "MessageProxyForMainnet", deployed.get( "MessageProxyForMainnet" )?.address);\nawait contractManagerInst.setContractsAddress( "CommunityPool", deployed.get( "CommunityPool" )?.address);\nawait contractManagerInst.setContractsAddress( "Linker", deployed.get( "Linker" )?.address);\nfor (const contractName of contractsToDeploy) {\n const contract = deployed.get(contractName);\n if (contract === undefined) {\n throw new Error(`\${contractName} was not found`);\n }\n await contractManagerInst.setContractsAddress( contractName, contract.address);\n}\nconsole.log( "Successfully registered MessageProxy in ContractManager" );/s' migrations/deployMainnet.ts # end of TODO -VERSION="$DEPLOYED_VERSION" npx hardhat run migrations/deployMainnet.ts --network localhost +SKALE_MANAGER=$(cat data/skaleManagerComponents.json | jq -r .skale_manager_address) +VERSION="$DEPLOYED_VERSION" TARGET=$SKALE_MANAGER npx hardhat run migrations/deployMainnet.ts --network localhost # TODO: uncomment upgrade schain test after closing issue https://github.com/skalenetwork/IMA/issues/1720 From 01749f276a980bf142b73b8208731430c0a94927 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Wed, 13 Nov 2024 15:47:17 +0000 Subject: [PATCH 21/45] Remove stringKeccak256, use ethers.id instead --- .gitignore | 2 ++ gas/calculateGas.ts | 4 +-- migrations/deployMainnet.ts | 15 +--------- migrations/deploySkaleManagerComponents.ts | 7 +++-- scripts/test_deploy.sh | 3 ++ test/CommunityLocker.ts | 5 ++-- test/CommunityPool.ts | 14 ++++----- test/DepositBoxERC1155.ts | 4 +-- test/DepositBoxERC20.ts | 4 +-- test/DepositBoxERC721.ts | 4 +-- test/DepositBoxERC721WithMetadata.ts | 4 +-- test/DepositBoxEth.ts | 6 ++-- test/Linker.ts | 29 ++++++++++--------- test/MessageProxy.ts | 6 ++-- test/TokenManagerERC1155.ts | 10 +++---- test/TokenManagerERC20.ts | 19 ++++++------ test/TokenManagerERC721.ts | 7 ++--- test/TokenManagerERC721WithMetadata.ts | 8 ++--- test/TokenManagerEth.ts | 14 +++++---- .../ERC721MintingFromSchainToMainnet.ts | 6 ++-- test/utils/helper.ts | 4 --- test/utils/skale-manager-utils/keyStorage.ts | 4 +-- .../skale-manager-utils/schainsInternal.ts | 4 +-- test/utils/skale-manager-utils/wallets.ts | 3 +- 24 files changed, 87 insertions(+), 99 deletions(-) diff --git a/.gitignore b/.gitignore index af421c671..927ce0b9c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ test-tokens/typechain .openzeppelin/dev-*.json .openzeppelin/unknown-*.json .openzeppelin/.session +.openzeppelin/holesky.json +.openzeppelin/sepolia.json # predeployed generator artificats predeployed/test/additional.json diff --git a/gas/calculateGas.ts b/gas/calculateGas.ts index 5d10f92ed..b916a3392 100644 --- a/gas/calculateGas.ts +++ b/gas/calculateGas.ts @@ -79,7 +79,7 @@ import { deployTokenManagerERC1155 } from "../test/utils/deploy/schain/tokenMana import { deployMessageProxyForSchain } from "../test/utils/deploy/schain/messageProxyForSchain"; import { deployMessages } from "../test/utils/deploy/messages"; -import { stringKeccak256, getPublicKey } from "../test/utils/helper"; +import { getPublicKey } from "../test/utils/helper"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; @@ -130,7 +130,7 @@ describe("Gas calculation", () => { let ERC1155TokenOnSchain: ERC1155OnChain; const schainName = "GasCalculation"; - const schainNameHash = stringKeccak256("GasCalculation"); + const schainNameHash = ethers.id("GasCalculation"); const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const mainnetName = "Mainnet"; diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index fd8438f5d..c3d800105 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -23,7 +23,7 @@ * @copyright SKALE Labs 2019-Present */ import chalk from "chalk"; -import { promises as fs, link } from 'fs'; +import { promises as fs } from 'fs'; import { Interface } from 'ethers'; import { ethers, upgrades } from "hardhat"; import { MessageProxyForMainnet, Linker, ContractManager, CommunityPool } from "../typechain"; @@ -109,19 +109,6 @@ async function registerContracts(linker: Linker, messageProxy: MessageProxyForMa } } -async function registerInContractManager(contractManagerInst: ContractManager, deployed: Map) { - try { - for (const contractName of contracts) { - const contract = deployed.get(contractName); - if (!contract) throw new Error(`${contractName} was not found`); - await contractManagerInst.setContractsAddress(contractName, contract.address); - } - console.log("Successfully registered contracts in ContractManager"); - } catch (error) { - console.error("Registration of contracts failed in ContractManager. Please redo it manually!\nError:", error); - } -} - async function deployMessageProxyForMainnet( deployed: Map< string, diff --git a/migrations/deploySkaleManagerComponents.ts b/migrations/deploySkaleManagerComponents.ts index 8e90888c5..2aa577f83 100644 --- a/migrations/deploySkaleManagerComponents.ts +++ b/migrations/deploySkaleManagerComponents.ts @@ -28,7 +28,7 @@ import { getAbi } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; import { KeyStorageMock } from '../typechain'; import { Wallet } from 'ethers'; -import { getPublicKey, stringKeccak256 } from '../test/utils/helper'; +import { getPublicKey } from '../test/utils/helper'; export function getContractKeyInAbiFile(contract: string) { return contract.replace(/([a-z0-9])(?=[A-Z])/g, '$1_').toLowerCase(); @@ -57,6 +57,7 @@ async function main() { } const schainName = process.env.CHAIN_NAME_SCHAIN; + const schainHash = ethers.id(schainName); console.log("Deploy ContractManager"); const contractManagerFactory = await ethers.getContractFactory("ContractManager"); @@ -154,9 +155,9 @@ async function main() { b: "14411459380456065006136894392078433460802915485975038137226267466736619639091" } }; - await keyStorage.setBlsCommonPublicKeyForSchain( stringKeccak256(schainName), BLSPublicKey ); + await keyStorage.setBlsCommonPublicKeyForSchain(schainHash, BLSPublicKey ); console.log("Set common public key in KeyStorage contract", await keyStorage.getAddress(), "\n"); - await wallets.rechargeSchainWallet( stringKeccak256(schainName), { value: "10000000000000000000" } ); // originally it was 1000000000000000000 = 1ETH + await wallets.rechargeSchainWallet(schainHash, { value: "10000000000000000000" } ); // originally it was 1000000000000000000 = 1ETH console.log("Recharge schain wallet in Wallets contract", await wallets.getAddress(), "\n"); const jsonObject = { diff --git a/scripts/test_deploy.sh b/scripts/test_deploy.sh index debc46d64..da918caf0 100755 --- a/scripts/test_deploy.sh +++ b/scripts/test_deploy.sh @@ -2,6 +2,8 @@ set -e +trap 'npx ganache instances stop "$GANACHE"' EXIT + ACCOUNTS=accounts.json GANACHE=$(npx ganache \ --😈 \ @@ -15,6 +17,7 @@ export PRIVATE_KEY_FOR_ETHEREUM=$PRIVATE_KEY export PRIVATE_KEY_FOR_SCHAIN=$PRIVATE_KEY yarn deploy-skale-manager-components +export TARGET=$(cat data/skaleManagerComponents.json | jq -r .skale_manager_address) yarn deploy-to-mainnet # TODO: Uncomment after fixing deploy script for schain, related issue https://github.com/skalenetwork/IMA/issues/1720 # yarn deploy-to-both-chains diff --git a/test/CommunityLocker.ts b/test/CommunityLocker.ts index 66e59120d..f674ab323 100644 --- a/test/CommunityLocker.ts +++ b/test/CommunityLocker.ts @@ -31,7 +31,6 @@ import { MessagesTester, TokenManagerLinker, } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; chai.should(); chai.use(chaiAsPromised); @@ -58,7 +57,7 @@ describe("CommunityLocker", () => { let messages: MessagesTester; let communityLocker: CommunityLocker; let fakeCommunityPool: string; - const mainnetHash = stringKeccak256("Mainnet"); + const mainnetHash = ethers.id("Mainnet"); before(async () => { [deployer, user] = await ethers.getSigners(); @@ -74,7 +73,7 @@ describe("CommunityLocker", () => { }) it("should activate user", async () => { - const schainHash = stringKeccak256("Schain"); + const schainHash = ethers.id("Schain"); const data = await messages.encodeActivateUserMessage(deployer.address); const fakeData = await messages.encodeTransferEthMessage(user.address, 1); await communityLocker.postMessage(mainnetHash, fakeCommunityPool, data) diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 2db2f29b6..7308b7ea7 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -8,7 +8,7 @@ import { MessagesTester } from "../typechain"; -import { stringKeccak256, getBalance } from "./utils/helper"; +import { getBalance } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -70,7 +70,7 @@ describe("CommunityPool", () => { it("should add link to contract on schain", async () => { const fakeContractOnSchain = user.address; const nullAddress = "0x0000000000000000000000000000000000000000"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); await communityPool.getSchainContract(schainHash) .should.be.eventually.rejectedWith("Destination contract must be defined"); @@ -226,8 +226,8 @@ describe("CommunityPool", () => { }); it("should recharge wallet for couple chains", async () => { - const schainHash = stringKeccak256(schainName); - const schainHash2 = stringKeccak256(schainName2); + const schainHash = ethers.id(schainName); + const schainHash2 = ethers.id(schainName2); const activateUserData = await messages.encodeActivateUserMessage(user.address); await communityPool.addSchainContract(schainName2, mockContractOnSchain); @@ -290,13 +290,13 @@ describe("CommunityPool", () => { }); it("should set rejected when call refundGasByUser not from messageProxy contract", async () => { - const schainHash = stringKeccak256("Schain"); + const schainHash = ethers.id("Schain"); await communityPool.connect(deployer).refundGasByUser(schainHash, node.address, user.address, 0) .should.be.eventually.rejectedWith("Sender is not a MessageProxy"); }); it("should set rejected when call refundGasBySchainWallet not from messageProxy contract", async () => { - const schainHash = stringKeccak256("Schain"); + const schainHash = ethers.id("Schain"); await communityPool.connect(deployer).refundGasBySchainWallet(schainHash, node.address, 0) .should.be.eventually.rejectedWith("Sender is not a MessageProxy"); }); @@ -308,7 +308,7 @@ describe("CommunityPool", () => { let communityPoolTester: CommunityPool; let mockContractOnSchain: string; const schainNameRGBU = "SchainRGBU"; - const schainHashRGBU = stringKeccak256("SchainRGBU"); + const schainHashRGBU = ethers.id("SchainRGBU"); beforeEach(async () => { messageProxyTester = await deployMessageProxyForMainnetTester(contractManager); diff --git a/test/DepositBoxERC1155.ts b/test/DepositBoxERC1155.ts index 1190fedf7..5c61c2575 100644 --- a/test/DepositBoxERC1155.ts +++ b/test/DepositBoxERC1155.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringKeccak256, getPublicKey, getBalance } from "./utils/helper"; +import { getPublicKey, getBalance } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -84,7 +84,7 @@ describe("DepositBoxERC1155", () => { let messages: MessagesTester; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index 7323570d8..083732990 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -33,7 +33,7 @@ import { ERC20OnChain, CommunityPool } from "../typechain"; -import { getPublicKey, stringKeccak256, stringToHex } from "./utils/helper"; +import { getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); @@ -83,7 +83,7 @@ describe("DepositBoxERC20", () => { let messages: MessagesTester; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); before(async () => { [deployer, schainOwner, user, user2, richGuy] = await ethers.getSigners(); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index d5064f67c..adf8f90e9 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -84,7 +84,7 @@ describe("DepositBoxERC721", () => { let messages: MessagesTester; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index 47fbd1723..1a145dd36 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -84,7 +84,7 @@ describe("DepositBoxERC721WithMetadata", () => { let messages: MessagesTester; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 91a14de02..881311672 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -33,7 +33,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { stringKeccak256, getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; import chai = require("chai"); import chaiAlmost = require("chai-almost"); @@ -105,7 +105,7 @@ describe("DepositBoxEth", () => { let messages: MessagesTester; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); before(async () => { [deployer, user, user2, richGuy] = await ethers.getSigners(); @@ -254,7 +254,7 @@ describe("DepositBoxEth", () => { // execution/expectation await depositBoxEth .connect(user) - .postMessage(stringKeccak256(schainName), sender, bytesData) + .postMessage(schainHash, sender, bytesData) .should.be.eventually.rejectedWith(error); }); diff --git a/test/Linker.ts b/test/Linker.ts index 627e7c551..8a6372d9d 100644 --- a/test/Linker.ts +++ b/test/Linker.ts @@ -33,7 +33,6 @@ import { Linker, MessageProxyForMainnet, } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; chai.should(); @@ -52,7 +51,6 @@ import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { expect } from "chai"; -const schainName = "TestSchain"; describe("Linker", () => { let deployer: SignerWithAddress; @@ -65,6 +63,8 @@ describe("Linker", () => { let messageProxy: MessageProxyForMainnet; let linker: Linker; const contractManagerAddress = "0x0000000000000000000000000000000000000000"; + const schainName = "TestSchain"; + const schainHash = ethers.id(schainName); before(async () => { [deployer, user] = await ethers.getSigners(); @@ -238,31 +238,32 @@ describe("Linker", () => { it("should kill schain by schain owner first", async () => { // schain owner is user + await initializeSchain(contractManager, schainName, user.address, 1, 1); await linker.connect(deployer).connectSchain(schainName, []); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(true); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(0); + expect(await linker.isNotKilled(schainHash)).to.equal(true); + expect(await linker.statuses(schainHash)).to.equal(0); await linker.connect(user).kill(schainName); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(true); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(1); + expect(await linker.isNotKilled(schainHash)).to.equal(true); + expect(await linker.statuses(schainHash)).to.equal(1); await linker.connect(user).kill(schainName).should.be.eventually.rejectedWith("Already killed or incorrect sender"); await linker.connect(deployer).kill(schainName); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(false); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(3); + expect(await linker.isNotKilled(schainHash)).to.equal(false); + expect(await linker.statuses(schainHash)).to.equal(3); }); it("should kill schain by deployer first", async () => { // schain owner is user await initializeSchain(contractManager, schainName, user.address, 1, 1); await linker.connect(deployer).connectSchain(schainName, []); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(true); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(0); + expect(await linker.isNotKilled(schainHash)).to.equal(true); + expect(await linker.statuses(schainHash)).to.equal(0); await linker.connect(deployer).kill(schainName); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(true); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(2); + expect(await linker.isNotKilled(schainHash)).to.equal(true); + expect(await linker.statuses(schainHash)).to.equal(2); await linker.connect(user).kill(schainName); - expect(await linker.isNotKilled(stringKeccak256(schainName))).to.equal(false); - expect(await linker.statuses(stringKeccak256(schainName))).to.equal(3); + expect(await linker.isNotKilled(schainHash)).to.equal(false); + expect(await linker.statuses(schainHash)).to.equal(3); }); }); diff --git a/test/MessageProxy.ts b/test/MessageProxy.ts index 6db9e6518..ba0af33aa 100644 --- a/test/MessageProxy.ts +++ b/test/MessageProxy.ts @@ -41,7 +41,7 @@ import { SchainsInternal, Wallets } from "../typechain/"; -import { getPublicKey, stringKeccak256 } from "./utils/helper"; +import { getPublicKey } from "./utils/helper"; import { deployLinker } from "./utils/deploy/mainnet/linker"; import { deployMessageProxyForMainnet } from "./utils/deploy/mainnet/messageProxyForMainnet"; import { deployDepositBoxEth } from "./utils/deploy/mainnet/depositBoxEth"; @@ -87,7 +87,7 @@ describe("MessageProxy", () => { const contractManagerAddress = "0x0000000000000000000000000000000000000000"; const zeroBytes32 = "0x0000000000000000000000000000000000000000000000000000000000000000" const schainName = "Schain"; - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); const BlsSignature: [BigNumberish, BigNumberish] = [ "178325537405109593276798394634841698946852714038246117383766698579865918287", @@ -334,7 +334,7 @@ describe("MessageProxy", () => { const SchainsInternalFactory = await ethers.getContractFactory("SchainsInternal"); const schainsInternal = SchainsInternalFactory.attach(await contractManager.getContract("SchainsInternal")) as SchainsInternal; const otherSchainName = "something else"; - const otherSchainHash = stringKeccak256(otherSchainName); + const otherSchainHash = ethers.id(otherSchainName); await schainsInternal.initializeSchain(schainName, schainOwner.address, 0, 0); await messageProxyForMainnet.addConnectedChain(schainName); diff --git a/test/TokenManagerERC1155.ts b/test/TokenManagerERC1155.ts index eebf4f97d..ff6ecf0b0 100644 --- a/test/TokenManagerERC1155.ts +++ b/test/TokenManagerERC1155.ts @@ -34,7 +34,7 @@ import { CommunityLocker } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; + import { skipTime } from "./utils/time"; chai.should(); @@ -59,13 +59,13 @@ describe("TokenManagerERC1155", () => { let schainOwner: SignerWithAddress; const schainName = "V-chain"; - const schainId = stringKeccak256(schainName); + const schainId = ethers.id(schainName); const id = 1; const amount = 4; const ids = [1, 2, 3, 4]; const amounts = [4, 3, 2, 1]; const mainnetName = "Mainnet"; - const mainnetId = stringKeccak256("Mainnet"); + const mainnetId = ethers.id("Mainnet"); let to: string; let token: ERC1155OnChain; let fakeDepositBox: string; @@ -194,7 +194,7 @@ describe("TokenManagerERC1155", () => { let tokenManagerERC11552: TokenManagerERC1155; let communityLocker2: CommunityLocker; const newSchainName = "NewChain"; - const newSchainId = stringKeccak256(newSchainName); + const newSchainId = ethers.id(newSchainName); beforeEach(async () => { erc1155OnOriginChain = await deployERC1155OnChain("NewToken"); @@ -1203,7 +1203,7 @@ describe("TokenManagerERC1155", () => { let tokenManagerERC11552: TokenManagerERC1155; let communityLocker2: CommunityLocker; const newSchainName = "NewChain"; - const newSchainId = stringKeccak256(newSchainName); + const newSchainId = ethers.id(newSchainName); beforeEach(async () => { erc1155OnOriginChain = await deployERC1155OnChain("NewToken"); diff --git a/test/TokenManagerERC20.ts b/test/TokenManagerERC20.ts index 57f0b44d4..92d906c84 100644 --- a/test/TokenManagerERC20.ts +++ b/test/TokenManagerERC20.ts @@ -52,7 +52,6 @@ import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; import { assert, expect } from "chai"; import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; import { skipTime } from "./utils/time"; -import { stringKeccak256 } from "./utils/helper"; describe("TokenManagerERC20", () => { let deployer: SignerWithAddress; @@ -61,8 +60,8 @@ describe("TokenManagerERC20", () => { const mainnetName = "Mainnet"; const schainName = "D2-chain"; - const schainId = stringKeccak256(schainName); - const mainnetId = stringKeccak256("Mainnet"); + const schainId = ethers.id(schainName); + const mainnetId = ethers.id("Mainnet"); let fakeDepositBox: string; let fakeCommunityPool: string; let erc20OnChain: ERC20OnChain; @@ -209,7 +208,7 @@ describe("TokenManagerERC20", () => { }); describe("when token added by owner", async () => { - const mainnetChainHash = stringKeccak256(mainnetName); + const mainnetChainHash = ethers.id(mainnetName); let erc20OnSchainTokenAddress: string; let erc20OnOriginChainTokenAddress: string; @@ -293,7 +292,7 @@ describe("TokenManagerERC20", () => { let tokenManagerErc202: TokenManagerERC20; let communityLocker2: CommunityLocker; const newSchainName = "NewChain"; - const newSchainId = stringKeccak256(newSchainName); + const newSchainId = ethers.id(newSchainName); beforeEach(async () => { erc20OnOriginChain = await deployERC20OnChain("NewToken", "NTN"); @@ -1372,7 +1371,7 @@ describe("TokenManagerERC20", () => { const to = user.address; const remoteTokenManagerAddress = fakeDepositBox; const fromSchainName = "fromSchainName"; - const fromSchainHash = stringKeccak256(fromSchainName); + const fromSchainHash = ethers.id(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); // await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); @@ -1403,7 +1402,7 @@ describe("TokenManagerERC20", () => { // preparation const remoteTokenManagerAddress = fakeDepositBox; const fromSchainName = "fromSchainName"; - const fromSchainHash = stringKeccak256(fromSchainName); + const fromSchainHash = ethers.id(fromSchainName); await messageProxyForSchain.connect(deployer).addConnectedChain(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(fromSchainName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); @@ -1432,7 +1431,7 @@ describe("TokenManagerERC20", () => { // preparation const remoteTokenManagerAddress = fakeDepositBox; const fromSchainName = "fromSchainName"; - const fromSchainHash = stringKeccak256(fromSchainName); + const fromSchainHash = ethers.id(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); const amount = 10; @@ -1481,7 +1480,7 @@ describe("TokenManagerERC20", () => { const to = user.address; const remoteTokenManagerAddress = fakeDepositBox; const fromSchainName = "fromSchainName"; - const fromSchainHash = stringKeccak256(fromSchainName); + const fromSchainHash = ethers.id(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); @@ -1518,7 +1517,7 @@ describe("TokenManagerERC20", () => { const receiver = ethers.Wallet.createRandom().connect(ethers.provider); const remoteTokenManager = ethers.Wallet.createRandom(); const sourceSchainName = "sourceSchain"; - const sourceSchainHash = stringKeccak256(sourceSchainName) + const sourceSchainHash = ethers.id(sourceSchainName) await tokenManagerErc20.addTokenManager(sourceSchainName, remoteTokenManager.address); const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); diff --git a/test/TokenManagerERC721.ts b/test/TokenManagerERC721.ts index 29fb5a9c1..d09352c0d 100644 --- a/test/TokenManagerERC721.ts +++ b/test/TokenManagerERC721.ts @@ -34,7 +34,6 @@ import { CommunityLocker } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; import { skipTime } from "./utils/time"; chai.should(); @@ -59,10 +58,10 @@ describe("TokenManagerERC721", () => { let schainOwner: SignerWithAddress; const schainName = "V-chain"; - const schainId = stringKeccak256(schainName); + const schainId = ethers.id(schainName); const tokenId = 1; const mainnetName = "Mainnet"; - const mainnetId = stringKeccak256("Mainnet"); + const mainnetId = ethers.id("Mainnet"); let to: string; let token: ERC721OnChain; let tokenClone: ERC721OnChain; @@ -203,7 +202,7 @@ describe("TokenManagerERC721", () => { let tokenManagerERC7212: TokenManagerERC721; let communityLocker2: CommunityLocker; const newSchainName = "NewChain"; - const newSchainId = stringKeccak256(newSchainName); + const newSchainId = ethers.id(newSchainName); beforeEach(async () => { erc721OnOriginChain = await deployERC721OnChain("NewToken", "NTN"); diff --git a/test/TokenManagerERC721WithMetadata.ts b/test/TokenManagerERC721WithMetadata.ts index fdb59bc1d..08610aad1 100644 --- a/test/TokenManagerERC721WithMetadata.ts +++ b/test/TokenManagerERC721WithMetadata.ts @@ -34,7 +34,7 @@ import { CommunityLocker } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; + import { skipTime } from "./utils/time"; chai.should(); @@ -59,11 +59,11 @@ describe("TokenManagerERC721WithMetadata", () => { let schainOwner: SignerWithAddress; const schainName = "V-chain"; - const schainId = stringKeccak256(schainName); + const schainId = ethers.id(schainName); const tokenId = 1; const tokenURI = "Hello1"; const mainnetName = "Mainnet"; - const mainnetId = stringKeccak256("Mainnet"); + const mainnetId = ethers.id("Mainnet"); let to: string; let token: ERC721OnChain; let tokenClone: ERC721OnChain; @@ -208,7 +208,7 @@ describe("TokenManagerERC721WithMetadata", () => { let tokenManagerERC721WithMetadata2: TokenManagerERC721WithMetadata; let communityLocker2: CommunityLocker; const newSchainName = "NewChain"; - const newSchainId = stringKeccak256(newSchainName); + const newSchainId = ethers.id(newSchainName); beforeEach(async () => { erc721OnOriginChain = await deployERC721OnChain("NewToken", "NTN"); diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index ac88f5ccd..a24b43980 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -33,7 +33,7 @@ import { TokenManagerEth, TokenManagerLinker, } from "../typechain"; -import { stringKeccak256 } from "./utils/helper"; + chai.should(); chai.use(chaiAsPromised); @@ -52,7 +52,7 @@ import { deployMessageProxyForSchainTester } from "./utils/deploy/test/messagePr import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; const schainName = "TestSchain"; -const schainHash = stringKeccak256(schainName); +const schainHash = ethers.id(schainName); describe("TokenManagerEth", () => { let deployer: SignerWithAddress; @@ -66,7 +66,7 @@ describe("TokenManagerEth", () => { let communityLocker: CommunityLocker; let fakeDepositBox: string; let fakeCommunityPool: string; - const mainnetHash = stringKeccak256("Mainnet"); + const mainnetHash = ethers.id("Mainnet"); before(async () => { [deployer, user] = await ethers.getSigners(); @@ -125,6 +125,7 @@ describe("TokenManagerEth", () => { const tokenManagerAddress = user.address; const nullAddress = "0x0000000000000000000000000000000000000000"; const schainName2 = "TestSchain2"; + const schainHash = ethers.id(schainName2); // only owner can add deposit box: await tokenManagerEth.connect(user).addTokenManager(schainName2, tokenManagerAddress).should.be.rejected; @@ -140,7 +141,7 @@ describe("TokenManagerEth", () => { await tokenManagerEth.connect(deployer).addTokenManager(schainName2, tokenManagerAddress). should.be.rejectedWith("Token Manager is already set"); - const storedDepositBox = await tokenManagerEth.tokenManagers(stringKeccak256(schainName2)); + const storedDepositBox = await tokenManagerEth.tokenManagers(schainHash); expect(storedDepositBox).to.equal(tokenManagerAddress); }); @@ -174,12 +175,13 @@ describe("TokenManagerEth", () => { const tokenManagerAddress = user.address; const nullAddress = "0x0000000000000000000000000000000000000000"; const schainName2 = "TestSchain2"; + const schainHash = ethers.id(schainName2); // add deposit box: await tokenManagerEth.connect(deployer).addTokenManager(schainName2, tokenManagerAddress); // execution await tokenManagerEth.connect(deployer).removeTokenManager(schainName2); // expectation - const getMapping = await tokenManagerEth.tokenManagers(stringKeccak256(schainName2)); + const getMapping = await tokenManagerEth.tokenManagers(schainHash); expect(getMapping).to.equal(nullAddress); }); @@ -273,7 +275,7 @@ describe("TokenManagerEth", () => { // preparation await messageProxyForSchain.registerExtraContractForAll(await tokenManagerEth.getAddress()); const fromSchainName = "fromSchainName"; - const fromSchainId = stringKeccak256(fromSchainName); + const fromSchainId = ethers.id(fromSchainName); const amount = "10"; const sender = deployer.address; const to = user.address; diff --git a/test/extensions/ERC721MintingFromSchainToMainnet.ts b/test/extensions/ERC721MintingFromSchainToMainnet.ts index e37012d4e..314eb3928 100644 --- a/test/extensions/ERC721MintingFromSchainToMainnet.ts +++ b/test/extensions/ERC721MintingFromSchainToMainnet.ts @@ -66,7 +66,7 @@ import { deployContractManager } from "../utils/skale-manager-utils/contractMana import { deployTokenManagerLinker } from "../utils/deploy/schain/tokenManagerLinker"; import { deployMessageProxyForSchain } from "../utils/deploy/schain/messageProxyForSchain"; -import { stringKeccak256, getPublicKey } from "../utils/helper"; +import { getPublicKey } from "../utils/helper"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; @@ -104,7 +104,7 @@ describe("ERC721MintingFromSchainToMainnet", () => { let extensionSchain: ERC721ReferenceMintAndMetadataSchain; const schainName = "ExtensionChain"; - const schainNameHash = stringKeccak256("ExtensionChain"); + const schainNameHash = ethers.id("ExtensionChain"); const contractManagerAddress = "0x0000000000000000000000000000000000000000"; before(async () => { @@ -295,7 +295,7 @@ describe("ERC721MintingFromSchainToMainnet", () => { it("should send message", async () => { const tokenURI = "MyToken1"; - const mainnetHash = stringKeccak256("Mainnet"); + const mainnetHash = ethers.id("Mainnet"); await ERC721TokenOnSchain.connect(user).setTokenURI(1, tokenURI); await ERC721TokenOnSchain.connect(user).approve(await extensionSchain.getAddress(), 1); await messageProxyForSchain.connect(deployer).registerExtraContract("Mainnet", await extensionSchain.getAddress()); diff --git a/test/utils/helper.ts b/test/utils/helper.ts index 7bf34cd1b..fa9339be7 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -51,10 +51,6 @@ export function stringToHex(str: string) { .map(char => char.charCodeAt(0).toString(16).padStart(2, '0')) .join(''); return `0x${hex}`; - } - -export function stringKeccak256(value: string): string { - return ethers.solidityPackedKeccak256(["string"], [value]); } export function getPublicKey(wallet: HDNodeWallet | Wallet): [BytesLike, BytesLike] { diff --git a/test/utils/skale-manager-utils/keyStorage.ts b/test/utils/skale-manager-utils/keyStorage.ts index 1c8e6ea4e..a0b03df6b 100644 --- a/test/utils/skale-manager-utils/keyStorage.ts +++ b/test/utils/skale-manager-utils/keyStorage.ts @@ -1,6 +1,5 @@ import { ethers } from "hardhat"; import { ContractManager, KeyStorageMock } from "../../../typechain"; -import { stringKeccak256 } from "../helper"; const BLSPublicKey = { x: { @@ -17,6 +16,7 @@ export async function setCommonPublicKey( contractManager: ContractManager, schainName: string ) { + const schainHash = ethers.id(schainName); const factory = await ethers.getContractFactory("KeyStorageMock"); let keyStorageInstance: KeyStorageMock; if (await contractManager.getContract("KeyStorage") === "0x0000000000000000000000000000000000000000") { @@ -26,5 +26,5 @@ export async function setCommonPublicKey( } else { keyStorageInstance = factory.attach(await contractManager.getContract("KeyStorage")) as KeyStorageMock; } - await keyStorageInstance.setBlsCommonPublicKeyForSchain(stringKeccak256(schainName), BLSPublicKey); + await keyStorageInstance.setBlsCommonPublicKeyForSchain(schainHash, BLSPublicKey); } diff --git a/test/utils/skale-manager-utils/schainsInternal.ts b/test/utils/skale-manager-utils/schainsInternal.ts index 3016fe8b7..1ebcadd09 100644 --- a/test/utils/skale-manager-utils/schainsInternal.ts +++ b/test/utils/skale-manager-utils/schainsInternal.ts @@ -1,6 +1,5 @@ import { ethers } from "hardhat"; import { ContractManager, SchainsInternal } from "../../../typechain"; -import { stringKeccak256 } from "../helper"; const nameSchainsInternal = "SchainsInternal"; @@ -32,6 +31,7 @@ export async function isSchainActive( contractManager: ContractManager, schainName: string ) { + const schainHash = ethers.id(schainName); const factory = await ethers.getContractFactory(nameSchainsInternal); let schainsInternalInstance: SchainsInternal; if (await contractManager.getContract(nameSchainsInternal) === "0x0000000000000000000000000000000000000000") { @@ -41,5 +41,5 @@ export async function isSchainActive( } else { schainsInternalInstance = factory.attach(await contractManager.getContract(nameSchainsInternal)) as SchainsInternal; } - return await schainsInternalInstance.isSchainActive(stringKeccak256(schainName)); + return await schainsInternalInstance.isSchainActive(schainHash); } diff --git a/test/utils/skale-manager-utils/wallets.ts b/test/utils/skale-manager-utils/wallets.ts index 08c5205f7..84c3a80bd 100644 --- a/test/utils/skale-manager-utils/wallets.ts +++ b/test/utils/skale-manager-utils/wallets.ts @@ -1,7 +1,6 @@ import { initializeSchain, isSchainActive } from "./schainsInternal"; import { ethers } from "hardhat"; import { ContractManager, Wallets } from "../../../typechain"; -import { stringKeccak256 } from "../helper"; const nameWallets = "Wallets"; @@ -26,6 +25,6 @@ export async function rechargeSchainWallet( if ( !schainActive ) await initializeSchain(contractManager, schainName, owner, 1, 1); - const schainHash = stringKeccak256(schainName); + const schainHash = ethers.id(schainName); await walletsInstance.rechargeSchainWallet(schainHash, {value: amountEth /*"1000000000000000000"*/}); } From 7feb173f6b7183b91731c8c9eba7c82d7687ad6f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Wed, 13 Nov 2024 16:21:51 +0000 Subject: [PATCH 22/45] Update TypeScript configuration and refactor BigInt usage in tests --- migrations/deployMainnet.ts | 2 +- test/CommunityLocker.ts | 12 ++++++------ test/CommunityPool.ts | 28 ++++++++++++++-------------- test/DepositBoxERC20.ts | 10 +++++----- test/DepositBoxERC721.ts | 4 ++-- test/DepositBoxERC721WithMetadata.ts | 4 ++-- test/DepositBoxEth.ts | 14 +++++++------- test/MessageProxy.ts | 2 +- tsconfig.json | 4 ++-- 9 files changed, 40 insertions(+), 40 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index c3d800105..6176c07e5 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -91,7 +91,7 @@ async function setVersion(messageProxy: MessageProxyForMainnet, version: string) } } -async function deployContract(name: string, args: unknown[], initializer: string) { +async function deployContract(name: string, args: unknown[], initializer: string) { console.log("Deploy", name); const factory = await getContractFactory(name); const proxy = await upgrades.deployProxy(factory, args, { initializer }); diff --git a/test/CommunityLocker.ts b/test/CommunityLocker.ts index f674ab323..5cd895398 100644 --- a/test/CommunityLocker.ts +++ b/test/CommunityLocker.ts @@ -106,25 +106,25 @@ describe("CommunityLocker", () => { }); it("should set time limit per message", async () => { - expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(BigInt(300)); + expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(300n); await communityLocker.setTimeLimitPerMessage("Mainnet", 0) .should.be.eventually.rejectedWith("Not enough permissions to set constant"); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage("Mainnet", 0); - expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(BigInt(0)); + expect(await communityLocker.timeLimitPerMessage(mainnetHash)).to.be.equal(0n); }); it("should set time limit per message for schain", async () => { const anotherSchainName = "Schain Sierra"; const schainHash = ethers.id(anotherSchainName); - expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(BigInt(0)); + expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(0n); await communityLocker.setTimeLimitPerMessage(anotherSchainName, 1200) .should.be.eventually.rejectedWith("Not enough permissions to set constant"); await communityLocker.grantRole(await communityLocker.CONSTANT_SETTER_ROLE(), deployer.address); await communityLocker.setTimeLimitPerMessage(schainName, 1200) .should.be.eventually.rejectedWith("Incorrect chain"); await communityLocker.setTimeLimitPerMessage(anotherSchainName, 1200); - expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(BigInt(1200)); + expect(await communityLocker.timeLimitPerMessage(schainHash)).to.be.equal(1200n); }); it("should set gasprice", async () => { @@ -141,7 +141,7 @@ describe("CommunityLocker", () => { const time = await currentTime(); await communityLocker.setGasPrice(100, time + 200, sign).should.be.eventually.rejectedWith("Timestamp should not be in the future"); await communityLocker.setGasPrice(100, time, sign); - expect(await communityLocker.mainnetGasPrice()).to.be.equal(BigInt(100)); + expect(await communityLocker.mainnetGasPrice()).to.be.equal(100n); expect(await communityLocker.gasPriceTimestamp()).to.be.equal(BigInt(time)); skipTime(60); @@ -150,7 +150,7 @@ describe("CommunityLocker", () => { await communityLocker.setGasPrice(101, time, sign).should.be.eventually.rejectedWith("Gas price timestamp already updated"); await communityLocker.setGasPrice(101, time + 70, sign).should.be.eventually.rejectedWith("Timestamp should not be in the future"); await communityLocker.setGasPrice(101, time + 40, sign); - expect(await communityLocker.mainnetGasPrice()).to.be.equal(BigInt(101)); + expect(await communityLocker.mainnetGasPrice()).to.be.equal(101n); expect(await communityLocker.gasPriceTimestamp()).to.be.equal(BigInt(time + 40)); }); }); diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 7308b7ea7..3b462ce6a 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -154,7 +154,7 @@ describe("CommunityPool", () => { }); it("should revert if user recharged not enough money for most costly transaction", async () => { - const amount = BigInt(minTransactionGas) * BigInt(gasPrice) - BigInt(1); + const amount = BigInt(minTransactionGas) * BigInt(gasPrice) - 1n; await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }) .should.be.eventually.rejectedWith("Not enough ETH for transaction"); }); @@ -178,19 +178,19 @@ describe("CommunityPool", () => { userBalance.should.be.deep.equal(amount); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); userBalance = await communityPool.getBalance(user.address, schainName); - userBalance.should.be.deep.equal(amount * BigInt(2)); + userBalance.should.be.deep.equal(amount * 2n); expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(1); }); it("should reject if user tries to withdraw more than he has", async () => { const amount = BigInt(minTransactionGas) * BigInt(gasPrice); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); - await communityPool.connect(user).withdrawFunds(schainName, amount + BigInt(1), { gasPrice }) + await communityPool.connect(user).withdrawFunds(schainName, amount + 1n, { gasPrice }) .should.be.eventually.rejectedWith("Balance is too low"); }); it("should reject if user passes not enough money for transaction", async () => { - const tooSmallAmount = BigInt(1); + const tooSmallAmount = 1n; await communityPool .connect(user) .rechargeUserWallet(schainName, user.address, { value: tooSmallAmount, gasPrice }) @@ -200,22 +200,22 @@ describe("CommunityPool", () => { it("should recharge wallet if user passed enough money", async () => { const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice: gasPrice }); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: gasPrice}); - expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(1n); let userBalance = await communityPool.getBalance(user.address, schainName); userBalance.should.be.deep.equal(amount); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice: gasPrice}); userBalance = await communityPool.getBalance(user.address, schainName); - userBalance.should.be.deep.equal(amount * BigInt(2)); - expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); + userBalance.should.be.deep.equal(amount * 2n); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(1n); }); - + it("should recharge wallet, withdraw all money and check outgoingMessageCounter", async () => { const amount = await communityPool.getRecommendedRechargeAmount(ethers.id(schainName), user.address, { gasPrice }); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString(), gasPrice }); - expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(1)); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(1n); await communityPool.connect(user).withdrawFunds(schainName, amount.toString(), { gasPrice }); - expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(BigInt(2)); + expect(await messageProxy.getOutgoingMessagesCounter(schainName)).to.be.equal(2n); }); it("should allow to withdraw money", async () => { @@ -238,7 +238,7 @@ describe("CommunityPool", () => { } const gasPrice = BigInt(1e9); const wei = BigInt(minTransactionGas) * gasPrice; - const wei2 = BigInt(minTransactionGas) * gasPrice * BigInt(2); + const wei2 = BigInt(minTransactionGas) * gasPrice * 2n; const res1 = await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString(), gasPrice }); const res2 = await communityPool.connect(user).rechargeUserWallet(schainName2, user.address, { value: wei2.toString(), gasPrice }); const userBalance = await communityPool.getBalance(user.address, schainName); @@ -323,7 +323,7 @@ describe("CommunityPool", () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); const gasPrice = tx.gasPrice as BigNumberish; - const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * BigInt(2); + const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * 2n; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, "0x0000000000000000000000000000000000000000", user.address, 0) .should.be.eventually.rejectedWith("Node address must be set"); @@ -334,7 +334,7 @@ describe("CommunityPool", () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); const gasPrice = tx.gasPrice as BigNumberish; - const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * BigInt(2); + const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * 2n; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice }); const balanceAfter = await getBalance(node.address); @@ -359,7 +359,7 @@ describe("CommunityPool", () => { await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice); - const gasPriceDuringGasSpikes = BigInt(gasPrice) * BigInt(2); + const gasPriceDuringGasSpikes = BigInt(gasPrice) * 2n; expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.true; diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index 083732990..1b3ece311 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -370,12 +370,12 @@ describe("DepositBoxERC20", () => { await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("Given address is not a contract")); - + .withArgs(0n, stringToHex("Given address is not a contract")); + await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(1), stringToHex("Not enough money")); - + .withArgs(1n, stringToHex("Not enough money")); + const balanceBefore = await ethers.provider.getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 2, [message], sign); @@ -386,7 +386,7 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 3, [message], sign); const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, await erc20.getAddress()); - expect(transferredAmount).to.be.equal(BigInt(0)); + expect(transferredAmount).to.be.equal(0n); (await erc20.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index adf8f90e9..03a3c734e 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -352,7 +352,7 @@ describe("DepositBoxERC721", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("Given address is not a contract")); + .withArgs(0n, stringToHex("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -371,7 +371,7 @@ describe("DepositBoxERC721", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("Incorrect tokenId")); + .withArgs(0n, stringToHex("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index 1a145dd36..f6c372556 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -361,7 +361,7 @@ describe("DepositBoxERC721WithMetadata", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("Given address is not a contract")); + .withArgs(0n, stringToHex("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -382,7 +382,7 @@ describe("DepositBoxERC721WithMetadata", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("Incorrect tokenId")); + .withArgs(0n, stringToHex("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 881311672..4da4ab5cc 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -293,7 +293,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex(error)); + .withArgs(0n, stringToHex(error)); }); it("should rejected with message `Not enough money to finish this transaction` when " @@ -331,7 +331,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex(error)); + .withArgs(0n, stringToHex(error)); }); it("should rejected with message `Not enough money to finish this transaction`", async () => { @@ -370,7 +370,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex(error)); + .withArgs(0n, stringToHex(error)); }); it("should rejected with message `null`", async () => { @@ -411,7 +411,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(0), stringToHex("")); + .withArgs(0n, stringToHex("")); }); it("should transfer eth", async () => { @@ -502,7 +502,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * BigInt(2)); + expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * 2n); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -578,7 +578,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * BigInt(2)); + expect(await depositBoxEth.transferredAmount(schainHash)).to.be.equal(BigInt(wei) * 2n); await reimbursed(await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)); @@ -603,7 +603,7 @@ describe("DepositBoxEth", () => { await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(BigInt(1), stringToHex("Address: unable to send value, recipient may have reverted")); + .withArgs(1n, stringToHex("Address: unable to send value, recipient may have reverted")); expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); diff --git a/test/MessageProxy.ts b/test/MessageProxy.ts index ba0af33aa..b5953743c 100644 --- a/test/MessageProxy.ts +++ b/test/MessageProxy.ts @@ -461,7 +461,7 @@ describe("MessageProxy", () => { await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); await depositBox.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); - const amountWei = minTransactionGas * BigInt(gasPrice) * BigInt(2); + const amountWei = minTransactionGas * BigInt(gasPrice) * 2n; await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); diff --git a/tsconfig.json b/tsconfig.json index 470e69af9..2a25c3916 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2018", + "target": "es2020", "module": "commonjs", "strict": true, "moduleResolution": "node", @@ -10,7 +10,7 @@ "emitDecoratorMetadata": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, - "lib": ["es2018", "esnext.asynciterable"], + "lib": ["es2020", "esnext.asynciterable"], "sourceMap": true, "typeRoots": ["./node_modules/@types", "./typechain"], "types": ["node"], From 9a0e9a0bde1a94820eaf1a53770d0c7835e8c0c2 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Wed, 13 Nov 2024 19:22:57 +0000 Subject: [PATCH 23/45] Refactor contract interaction to use instance directly instead of getAddress --- .../test/MessageProxyForSchainTester.sol | 4 +- test/CommunityLocker.ts | 18 +- test/CommunityPool.ts | 22 +- test/DepositBoxERC1155.ts | 94 +- test/DepositBoxERC20.ts | 216 ++--- test/DepositBoxERC721.ts | 80 +- test/DepositBoxERC721WithMetadata.ts | 80 +- test/DepositBoxEth.ts | 42 +- test/Linker.ts | 82 +- test/MessageProxy.ts | 232 ++--- test/TokenManagerERC1155.ts | 834 +++++++++--------- test/TokenManagerERC20.ts | 558 ++++++------ test/TokenManagerERC721.ts | 490 +++++----- test/TokenManagerERC721WithMetadata.ts | 500 +++++------ test/TokenManagerEth.ts | 69 +- test/TokenManagerLinker.ts | 74 +- .../ERC721MintingFromSchainToMainnet.ts | 70 +- test/utils/deploy/mainnet/communityPool.ts | 12 +- .../utils/deploy/mainnet/depositBoxERC1155.ts | 4 +- test/utils/deploy/mainnet/depositBoxERC20.ts | 4 +- test/utils/deploy/mainnet/depositBoxERC721.ts | 4 +- .../mainnet/depositBoxERC721WithMetadata.ts | 4 +- test/utils/deploy/mainnet/depositBoxEth.ts | 4 +- test/utils/deploy/mainnet/linker.ts | 4 +- .../deploy/mainnet/messageProxyForMainnet.ts | 4 +- test/utils/deploy/schain/communityLocker.ts | 11 +- .../deploy/schain/tokenManagerERC1155.ts | 6 +- test/utils/deploy/schain/tokenManagerERC20.ts | 6 +- .../utils/deploy/schain/tokenManagerERC721.ts | 6 +- .../schain/tokenManagerERC721WithMetadata.ts | 6 +- test/utils/deploy/schain/tokenManagerEth.ts | 6 +- .../utils/deploy/schain/tokenManagerLinker.ts | 8 +- test/utils/deploy/test/communityPoolTester.ts | 6 +- test/utils/deploy/test/fallbackEthTester.ts | 2 +- .../test/messageProxyForMainnetTester.ts | 4 +- .../test/messageProxyForSchainTester.ts | 4 +- .../skale-manager-utils/contractManager.ts | 18 +- test/utils/skale-manager-utils/keyStorage.ts | 2 +- .../skale-manager-utils/schainsInternal.ts | 2 +- test/utils/skale-manager-utils/wallets.ts | 4 +- 40 files changed, 1813 insertions(+), 1783 deletions(-) diff --git a/contracts/test/MessageProxyForSchainTester.sol b/contracts/test/MessageProxyForSchainTester.sol index a40c88093..6838d25f8 100644 --- a/contracts/test/MessageProxyForSchainTester.sol +++ b/contracts/test/MessageProxyForSchainTester.sol @@ -43,7 +43,7 @@ interface IMessageProxyForSchainTester { } -contract MessageProxyForSchainTester is MessageProxyForSchain, IMessageProxyForSchainTester { +contract MessageProxyForSchainTester is MessageProxyForSchain, IMessageProxyForSchainTester { IEtherbaseUpgradeable public etherbase = ETHERBASE; @@ -82,4 +82,4 @@ contract MessageProxyForSchainTester is MessageProxyForSchain, IMessageProxyForS function _getEtherbase() internal view override returns (IEtherbaseUpgradeable) { return etherbase; } -} \ No newline at end of file +} diff --git a/test/CommunityLocker.ts b/test/CommunityLocker.ts index 5cd895398..088b67b0c 100644 --- a/test/CommunityLocker.ts +++ b/test/CommunityLocker.ts @@ -65,11 +65,11 @@ describe("CommunityLocker", () => { beforeEach(async () => { messages = await deployMessages(); - fakeCommunityPool = await messages.getAddress(); + fakeCommunityPool = user.address; const messageProxyForSchainWithoutSignatureFactory = await ethers.getContractFactory("MessageProxyForSchainWithoutSignature"); messageProxyForSchain = await messageProxyForSchainWithoutSignatureFactory.deploy("MyChain") as MessageProxyForSchainWithoutSignature; tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, fakeCommunityPool); }) it("should activate user", async () => { @@ -79,19 +79,19 @@ describe("CommunityLocker", () => { await communityLocker.postMessage(mainnetHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Sender is not a message proxy"); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, deployer.address, data) + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, deployer.address, data) .should.be.eventually.rejectedWith("Sender must be CommunityPool"); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), schainHash, fakeCommunityPool, data) + await messageProxyForSchain.postMessage(communityLocker, schainHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Source chain name must be Mainnet"); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, fakeData) + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, fakeData) .should.be.eventually.rejectedWith("The message should contain a status of user"); expect(await communityLocker.activeUsers(deployer.address)).to.be.equal(false); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data) + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, data) .should.be.eventually.rejectedWith("Active user statuses must be different"); expect(await communityLocker.activeUsers(deployer.address)).to.be.equal(true); }); @@ -99,9 +99,9 @@ describe("CommunityLocker", () => { it("should activate and then lock user", async () => { const activateData = await messages.encodeActivateUserMessage(user.address); const lockData = await messages.encodeLockUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, activateData); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, activateData); expect(await communityLocker.activeUsers(user.address)).to.be.equal(true); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, lockData); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, lockData); expect(await communityLocker.activeUsers(user.address)).to.be.equal(false); }); diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 3b462ce6a..b7d07b5f7 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -129,11 +129,11 @@ describe("CommunityPool", () => { it("should not allow to withdraw from user wallet if CommunityPool is not registered for all chains", async () => { const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxy.grantRole(extraContractRegistrarRole, deployer.address); - await messageProxy.registerExtraContractForAll(await communityPool.getAddress()); + await messageProxy.registerExtraContractForAll(communityPool); const tx = await messageProxy.addConnectedChain(schainName); const wei = BigInt(minTransactionGas) * tx.gasPrice; await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: wei.toString() }); - await messageProxy.removeExtraContractForAll(await communityPool.getAddress()); + await messageProxy.removeExtraContractForAll(communityPool); await communityPool.connect(user).withdrawFunds(schainName, wei.toString()) .should.be.eventually.rejectedWith("Sender contract is not registered"); }); @@ -141,14 +141,14 @@ describe("CommunityPool", () => { describe("when chain connected and contract registered", async () => { let gasPrice: BigNumberish; beforeEach(async () => { - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schainName, communityPool); gasPrice = ((await messageProxy.addConnectedChain(schainName)).gasPrice) as BigNumberish; }); it("should not allow to withdraw from user wallet if CommunityPool is not registered", async () => { const amount = BigInt(minTransactionGas) * BigInt(gasPrice); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: amount.toString() }); - await messageProxy.removeExtraContract(schainName, await communityPool.getAddress()); + await messageProxy.removeExtraContract(schainName, communityPool); await communityPool.connect(user).withdrawFunds(schainName, amount.toString()) .should.be.eventually.rejectedWith("Sender contract is not registered"); }); @@ -232,7 +232,7 @@ describe("CommunityPool", () => { await communityPool.addSchainContract(schainName2, mockContractOnSchain); for (const schain of [schainName, schainName2]) { - await messageProxy.registerExtraContract(schain, await communityPool.getAddress()); + await messageProxy.registerExtraContract(schain, communityPool); await messageProxy.addConnectedChain(schain); } @@ -248,12 +248,12 @@ describe("CommunityPool", () => { await expect(res1) .to.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await communityPool.getAddress(), mockContractOnSchain, activateUserData); + .withArgs(schainHash, 0, communityPool, mockContractOnSchain, activateUserData); await expect(res2) .to.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash2, 0, await communityPool.getAddress(), mockContractOnSchain, activateUserData); + .withArgs(schainHash2, 0, communityPool, mockContractOnSchain, activateUserData); const res3 = await communityPool.connect(user).rechargeUserWallet( schainName, @@ -321,7 +321,7 @@ describe("CommunityPool", () => { it("should be rejected with Node address must be set", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * 2n; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); @@ -332,7 +332,7 @@ describe("CommunityPool", () => { it("should refund node", async () => { const balanceBefore = await getBalance(node.address); const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice) * 2n; await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); @@ -344,7 +344,7 @@ describe("CommunityPool", () => { it("should lock user", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice); expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; @@ -356,7 +356,7 @@ describe("CommunityPool", () => { it("should lock user with extra low balance", async () => { const tx = await messageProxyTester.addConnectedChain(schainNameRGBU); - await messageProxyTester.registerExtraContract(schainNameRGBU, await communityPoolTester.getAddress()); + await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice); const gasPriceDuringGasSpikes = BigInt(gasPrice) * 2n; diff --git a/test/DepositBoxERC1155.ts b/test/DepositBoxERC1155.ts index 5c61c2575..34257c362 100644 --- a/test/DepositBoxERC1155.ts +++ b/test/DepositBoxERC1155.ts @@ -106,7 +106,7 @@ describe("DepositBoxERC1155", () => { depositBoxERC1155 = await deployDepositBoxERC1155(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -121,9 +121,9 @@ describe("DepositBoxERC1155", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(await depositBoxERC1155.getAddress()); - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); - await messageProxy.registerExtraContract(schainName, await linker.getAddress()); + await messageProxy.registerExtraContractForAll(depositBoxERC1155); + await messageProxy.registerExtraContract(schainName, communityPool); + await messageProxy.registerExtraContract(schainName, linker); }); describe("tests with `ERC1155`", async () => { @@ -152,13 +152,13 @@ describe("DepositBoxERC1155", () => { const fakeERC1155Contract = deployer.address; await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, fakeERC1155Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC1155.connect(deployer).addERC1155TokenByOwner(schainName, await erc1155.getAddress()) + await depositBoxERC1155.connect(deployer).addERC1155TokenByOwner(schainName, erc1155) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()).should.be.eventually.rejectedWith("ERC1155 Token was already added"); - expect(await depositBoxERC1155.getSchainToERC1155(schainName, await erc1155.getAddress())).to.be.equal(true); - expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1))[0]).to.be.equal(await erc1155.getAddress()); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155).should.be.eventually.rejectedWith("ERC1155 Token was already added"); + expect(await depositBoxERC1155.getSchainToERC1155(schainName, erc1155)).to.be.equal(true); + expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1))[0]).to.be.equal(erc1155); expect((await depositBoxERC1155.getSchainToAllERC1155(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC1155.getSchainToAllERC1155Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC1155.getSchainToAllERC1155(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -169,7 +169,7 @@ describe("DepositBoxERC1155", () => { it("should rejected with `DepositBox was not approved for ERC1155 token`", async () => { // preparation const error = "DepositBox was not approved for ERC1155 token"; - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const id = 5; const amount = 7; // the wei should be MORE than (55000 * 1000000000) @@ -188,7 +188,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155` without mistakes", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const id = 5; const amount = 7; const id2 = 10; @@ -200,7 +200,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // execution await depositBoxERC1155 .connect(deployer) @@ -214,13 +214,13 @@ describe("DepositBoxERC1155", () => { .depositERC1155(schainName, contractHere, id2, amount2)).wait(); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id)).to.equal(amount); - expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id2)).to.equal(amount2); + expect(await erc1155.balanceOf(depositBoxERC1155, id)).to.equal(amount); + expect(await erc1155.balanceOf(depositBoxERC1155, id2)).to.equal(amount2); }); it("should invoke `depositERC1155Direct` without mistakes", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const to = user.address; const id = 5; const amount = 7; @@ -233,7 +233,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // execution await depositBoxERC1155 .connect(deployer) @@ -245,22 +245,22 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .depositERC1155Direct(schainName, contractHere, id, amount, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxERC1155.getAddress(), deployer.address, data1); + .withArgs(schainHash, 0, depositBoxERC1155, deployer.address, data1); await depositBoxERC1155 .connect(deployer) .depositERC1155Direct(schainName, contractHere, id2, amount2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, await depositBoxERC1155.getAddress(), deployer.address, data2); + .withArgs(schainHash, 1, depositBoxERC1155, deployer.address, data2); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id)).to.equal(amount); - expect(await erc1155.balanceOf(await depositBoxERC1155.getAddress(), id2)).to.equal(amount2); + expect(await erc1155.balanceOf(depositBoxERC1155, id)).to.equal(amount); + expect(await erc1155.balanceOf(depositBoxERC1155, id2)).to.equal(amount2); }); it("should rejected with `DepositBox was not approved for ERC1155 token Batch`", async () => { // preparation const error = "DepositBox was not approved for ERC1155 token Batch"; - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const ids = [1, 2, 3]; const amounts = [3, 2, 1]; // the wei should be MORE than (55000 * 1000000000) @@ -279,7 +279,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155Batch` without mistakes", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const ids = [1, 2, 3]; const amounts = [3, 2, 1]; const ids2 = [5, 4, 99]; @@ -291,7 +291,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // execution await depositBoxERC1155 .connect(deployer) @@ -305,8 +305,8 @@ describe("DepositBoxERC1155", () => { .depositERC1155Batch(schainName, contractHere, ids2, amounts2)).wait(); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - const balanceIds = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids); - const balanceIds2 = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids2); + const balanceIds = await erc1155.balanceOfBatch([depositBoxERC1155, depositBoxERC1155, depositBoxERC1155], ids); + const balanceIds2 = await erc1155.balanceOfBatch([depositBoxERC1155, depositBoxERC1155, depositBoxERC1155], ids2); const balanceIdsNumber: number[] = []; const balanceIds2Number: number[] = []; balanceIds.forEach(element => { @@ -321,7 +321,7 @@ describe("DepositBoxERC1155", () => { it("should invoke `depositERC1155BatchDirect` without mistakes", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const to = user.address; const ids = [1, 2, 3]; const amounts = [3, 2, 1]; @@ -334,7 +334,7 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC1155` - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // execution await depositBoxERC1155 .connect(deployer) @@ -346,16 +346,16 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .depositERC1155BatchDirect(schainName, contractHere, ids, amounts, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxERC1155.getAddress(), deployer.address, data1); + .withArgs(schainHash, 0, depositBoxERC1155, deployer.address, data1); await depositBoxERC1155 .connect(deployer) .depositERC1155BatchDirect(schainName, contractHere, ids2, amounts2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, await depositBoxERC1155.getAddress(), deployer.address, data2); + .withArgs(schainHash, 1, depositBoxERC1155, deployer.address, data2); // console.log("Gas for depositERC1155:", res.receipt.gasUsed); // expectation - const balanceIds = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids); - const balanceIds2 = await erc1155.balanceOfBatch([await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress(), await depositBoxERC1155.getAddress()], ids2); + const balanceIds = await erc1155.balanceOfBatch([depositBoxERC1155, depositBoxERC1155, depositBoxERC1155], ids); + const balanceIds2 = await erc1155.balanceOfBatch([depositBoxERC1155, depositBoxERC1155, depositBoxERC1155], ids2); const balanceIdsNumber: number[] = []; const balanceIds2Number: number[] = []; balanceIds.forEach(element => { @@ -374,16 +374,16 @@ describe("DepositBoxERC1155", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); await erc1155.connect(deployer).mint(deployer.address, 4, 100, "0x"); - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); await depositBoxERC1155.connect(user).disableWhitelist(schainName); await depositBoxERC1155 .connect(deployer) - .depositERC1155(schainName, await erc1155.getAddress(), 4, 50); - await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [50]).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC1155(schainName, erc1155, 4, 50); + await depositBoxERC1155.connect(user).getFunds(schainName, erc1155, user.address, [4], [50]).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [60]).should.be.eventually.rejectedWith("Incorrect amount"); - await depositBoxERC1155.connect(user).getFunds(schainName, await erc1155.getAddress(), user.address, [4], [50]); + await depositBoxERC1155.connect(user).getFunds(schainName, erc1155, user.address, [4], [60]).should.be.eventually.rejectedWith("Incorrect amount"); + await depositBoxERC1155.connect(user).getFunds(schainName, erc1155, user.address, [4], [50]); expect(await erc1155.balanceOf(user.address, 4)).to.equal("50"); }); @@ -391,14 +391,14 @@ describe("DepositBoxERC1155", () => { const fakeERC1155Contract = deployer.address; await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, fakeERC1155Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()); - expect(await depositBoxERC1155.getSchainToERC1155(schainName, await erc1155.getAddress())).to.be.equal(true); + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155); + expect(await depositBoxERC1155.getSchainToERC1155(schainName, erc1155)).to.be.equal(true); }); it("should not allow to add token by schain owner if schain killed", async () => { await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, await erc1155.getAddress()) + await depositBoxERC1155.connect(user).addERC1155TokenByOwner(schainName, erc1155) .should.be.eventually.rejectedWith("Schain is killed"); }); }); @@ -412,7 +412,7 @@ describe("DepositBoxERC1155", () => { it("should transfer ERC1155 token", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const id = 5; const amount = 7; const to = user.address; @@ -429,7 +429,7 @@ describe("DepositBoxERC1155", () => { const message = { data: await messages.encodeTransferErc1155Message(contractHere, to, id, amount), - destinationContract: await depositBoxERC1155.getAddress(), + destinationContract: depositBoxERC1155, sender: senderFromSchain }; @@ -445,9 +445,9 @@ describe("DepositBoxERC1155", () => { // mint some ERC1155 of for `deployer` address await erc1155.connect(deployer).mint(deployer.address, id, amount, "0x"); - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // transfer tokenId from `deployer` to `depositBoxERC1155` - // await erc1155.connect(deployer).transferFrom(deployer.address, await depositBoxERC1155.getAddress(), tokenId); + // await erc1155.connect(deployer).transferFrom(deployer.address, depositBoxERC1155, tokenId); // get data from `receiveERC1155` await depositBoxERC1155.connect(user2).disableWhitelist(schainName); await depositBoxERC1155 @@ -467,7 +467,7 @@ describe("DepositBoxERC1155", () => { it("should transfer ERC1155 token Batch", async () => { // preparation - const contractHere = await erc1155.getAddress(); + const contractHere = erc1155; const ids = [5, 6, 7]; const amounts = [100, 100, 100]; const to = user.address; @@ -484,7 +484,7 @@ describe("DepositBoxERC1155", () => { const message = { data: await messages.encodeTransferErc1155BatchMessage(contractHere, to, ids, amounts), - destinationContract: await depositBoxERC1155.getAddress(), + destinationContract: depositBoxERC1155, sender: senderFromSchain }; @@ -500,9 +500,9 @@ describe("DepositBoxERC1155", () => { // mint some ERC1155 of for `deployer` address await erc1155.connect(deployer).mintBatch(deployer.address, ids, amounts, "0x"); - await erc1155.connect(deployer).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await erc1155.connect(deployer).setApprovalForAll(depositBoxERC1155, true); // transfer tokenId from `deployer` to `depositBoxERC1155` - // await erc1155.connect(deployer).transferFrom(deployer.address, await depositBoxERC1155.getAddress(), tokenId); + // await erc1155.connect(deployer).transferFrom(deployer.address, depositBoxERC1155, tokenId); // get data from `receiveERC1155` await depositBoxERC1155.connect(user2).disableWhitelist(schainName); await depositBoxERC1155 diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index 1b3ece311..df7d8cb8a 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -103,7 +103,7 @@ describe("DepositBoxERC20", () => { linker = await deployLinker(contractManager, messageProxy); depositBoxERC20 = await deployDepositBoxERC20(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); const nodeCreationParams = { @@ -118,9 +118,9 @@ describe("DepositBoxERC20", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(await depositBoxERC20.getAddress()); - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); - await messageProxy.registerExtraContract(schainName, await linker.getAddress()); + await messageProxy.registerExtraContractForAll(depositBoxERC20); + await messageProxy.registerExtraContract(schainName, communityPool); + await messageProxy.registerExtraContract(schainName, linker); messages = await deployMessages(); }); @@ -141,12 +141,12 @@ describe("DepositBoxERC20", () => { const error = "Whitelist is enabled"; await depositBoxERC20.connect(schainOwner).enableWhitelist(schainName); await erc20.connect(deployer).mint(user.address, "1000000000"); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), "1000000"); + await erc20.connect(deployer).approve(depositBoxERC20, "1000000"); // set `DepositBox` contract to avoid the `Not allowed` error in LockAndDataForMainnet.sol // execution/expectation await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 100) + .depositERC20(schainName, erc20, 100) .should.be.eventually.rejectedWith(error); }); @@ -158,7 +158,7 @@ describe("DepositBoxERC20", () => { // execution/expectation await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 100) + .depositERC20(schainName, erc20, 100) .should.be.eventually.rejectedWith(error); }); @@ -167,18 +167,18 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20.connect(deployer).approve(depositBoxERC20, amount); // execution await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 1).should.be.eventually.rejectedWith("Whitelist is enabled"); + .depositERC20(schainName, erc20, 1).should.be.eventually.rejectedWith("Whitelist is enabled"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 1); + .depositERC20(schainName, erc20, 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 1); + .depositERC20(schainName, erc20, 1); }); it("should invoke `depositERC20Direct` without mistakes", async () => { @@ -186,25 +186,25 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20.connect(deployer).approve(depositBoxERC20, amount); // execution await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address).should.be.eventually.rejectedWith("Whitelist is enabled"); + .depositERC20Direct(schainName, erc20, 1, user.address).should.be.eventually.rejectedWith("Whitelist is enabled"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); - const data1 = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20.getAddress(), user.address, 1, amount, { name: "D2-token", symbol: "D2", decimals: 18 }); - const data2 = await messages.encodeTransferErc20AndTotalSupplyMessage(await erc20.getAddress(), user.address, 1, amount); + const data1 = await messages.encodeTransferErc20AndTokenInfoMessage(erc20, user.address, 1, amount, { name: "D2-token", symbol: "D2", decimals: 18 }); + const data2 = await messages.encodeTransferErc20AndTotalSupplyMessage(erc20, user.address, 1, amount); await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address) + .depositERC20Direct(schainName, erc20, 1, user.address) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxERC20.getAddress(), deployer.address, data1); + .withArgs(schainHash, 0, depositBoxERC20, deployer.address, data1); await depositBoxERC20 .connect(deployer) - .depositERC20Direct(schainName, await erc20.getAddress(), 1, user.address) + .depositERC20Direct(schainName, erc20, 1, user.address) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, await depositBoxERC20.getAddress(), deployer.address, data2); + .withArgs(schainHash, 1, depositBoxERC20, deployer.address, data2); }); it("should rejected with `Amount is incorrect`", async () => { @@ -212,28 +212,28 @@ describe("DepositBoxERC20", () => { // mint some quantity of ERC20 tokens for `deployer` address const amount = 10; await erc20.connect(deployer).mint(deployer.address, amount); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount + 1); + await erc20.connect(deployer).approve(depositBoxERC20, amount + 1); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), amount + 1) + .depositERC20(schainName, erc20, amount + 1) .should.be.eventually.rejectedWith("Amount is incorrect"); }); }); it("should get funds after kill", async () => { await erc20.connect(deployer).mint(deployer.address, "1000000000"); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), "1000000"); + await erc20.connect(deployer).approve(depositBoxERC20, "1000000"); await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 1); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 1).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC20(schainName, erc20, 1); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20, schainOwner.address, 1).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(schainOwner).kill(schainName); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 2).should.be.eventually.rejectedWith("Incorrect amount"); - await depositBoxERC20.connect(schainOwner).getFunds(schainName, await erc20.getAddress(), schainOwner.address, 1); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20, schainOwner.address, 2).should.be.eventually.rejectedWith("Incorrect amount"); + await depositBoxERC20.connect(schainOwner).getFunds(schainName, erc20, schainOwner.address, 1); expect(await erc20.balanceOf(schainOwner.address)).to.equal("1"); }); @@ -241,10 +241,10 @@ describe("DepositBoxERC20", () => { const fakeERC20Contract = deployer.address; await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, fakeERC20Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()).should.be.eventually.rejectedWith("ERC20 Token was already added"); - expect(await depositBoxERC20.getSchainToERC20(schainName, await erc20.getAddress())).to.be.equal(true); - expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1))[0]).to.be.equal(await erc20.getAddress()); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20).should.be.eventually.rejectedWith("ERC20 Token was already added"); + expect(await depositBoxERC20.getSchainToERC20(schainName, erc20)).to.be.equal(true); + expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1))[0]).to.be.equal(erc20); expect((await depositBoxERC20.getSchainToAllERC20(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC20.getSchainToAllERC20Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC20.getSchainToAllERC20(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -254,7 +254,7 @@ describe("DepositBoxERC20", () => { it("should not allow to add token by schain owner if schain killed", async () => { await linker.connect(deployer).kill(schainName); await linker.connect(schainOwner).kill(schainName); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20.getAddress()) + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, erc20) .should.be.eventually.rejectedWith("Schain is killed"); }); @@ -269,25 +269,25 @@ describe("DepositBoxERC20", () => { await erc20TWFR.connect(deployer).mint(deployer.address, amount); await erc20IT.connect(deployer).mint(deployer.address, amount); await erc20.connect(deployer).mint(deployer.address, amount); - await erc20TWR.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); - await erc20TWFR.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); - await erc20IT.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); - await erc20.connect(deployer).approve(await depositBoxERC20.getAddress(), amount); + await erc20TWR.connect(deployer).approve(depositBoxERC20, amount); + await erc20TWFR.connect(deployer).approve(depositBoxERC20, amount); + await erc20IT.connect(deployer).approve(depositBoxERC20, amount); + await erc20.connect(deployer).approve(depositBoxERC20, amount); // execution await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20.getAddress(), 1); + .depositERC20(schainName, erc20, 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20TWR.getAddress(), 1); + .depositERC20(schainName, erc20TWR, 1); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20IT.getAddress(), 1) + .depositERC20(schainName, erc20IT, 1) .should.be.eventually.rejectedWith("SafeERC20: low-level call failed"); await depositBoxERC20 .connect(deployer) - .depositERC20(schainName, await erc20TWFR.getAddress(), 1) + .depositERC20(schainName, erc20TWFR, 1) .should.be.eventually.rejectedWith("SafeERC20: ERC20 operation did not succeed"); }); }); @@ -303,8 +303,8 @@ describe("DepositBoxERC20", () => { it("should transfer ERC20 token", async () => { // preparation - const ercOnSchain = await erc20.getAddress(); - const fakeErc20OnSchain = await erc20Clone.getAddress(); + const ercOnSchain = erc20; + const fakeErc20OnSchain = erc20Clone; const amount = 10; const to = user.address; const senderFromSchain = deployer.address; @@ -319,25 +319,25 @@ describe("DepositBoxERC20", () => { const message = { data: await messages.encodeTransferErc20Message(ercOnSchain, to, amount), - destinationContract: await depositBoxERC20.getAddress(), + destinationContract: depositBoxERC20, sender: senderFromSchain }; const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc20Message(user2.address, to, amount), - destinationContract: await depositBoxERC20.getAddress(), + destinationContract: depositBoxERC20, sender: senderFromSchain }; const messageWithNotMintedToken = { data: await messages.encodeTransferErc20Message(fakeErc20OnSchain, to, amount), - destinationContract: await depositBoxERC20.getAddress(), + destinationContract: depositBoxERC20, sender: senderFromSchain }; await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); await setCommonPublicKey(contractManager, schainName); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount) .should.be.eventually.rejectedWith("Unconnected chain"); await linker @@ -351,11 +351,11 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.connect(schainOwner).disableWhitelist(schainName); await erc20.connect(deployer).mint(user.address, amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount) .should.be.eventually.rejectedWith("DepositBox was not approved for ERC20 token"); - await erc20.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); + await erc20.connect(user).approve(depositBoxERC20, amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount); const tx = await messageProxy .connect(nodeAddress) @@ -383,9 +383,9 @@ describe("DepositBoxERC20", () => { balance.should.be.least(balanceBefore); balance.should.be.closeTo(balanceBefore, 10); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 3, [message], sign); - const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, await erc20.getAddress()); + const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, erc20); expect(transferredAmount).to.be.equal(0n); (await erc20.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); @@ -408,20 +408,20 @@ describe("DepositBoxERC20", () => { }; const message = { - data: await messages.encodeTransferErc20Message(await erc20.getAddress(), to, amount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(erc20, to, amount), + destinationContract: depositBoxERC20, sender: senderFromSchain }; const messageTWR = { - data: await messages.encodeTransferErc20Message(await erc20TWR.getAddress(), to, amount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(erc20TWR, to, amount), + destinationContract: depositBoxERC20, sender: senderFromSchain }; await initializeSchain(contractManager, schainName, schainOwner.address, 1, 1); await setCommonPublicKey(contractManager, schainName); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount) + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount) .should.be.eventually.rejectedWith("Unconnected chain"); await linker @@ -436,11 +436,11 @@ describe("DepositBoxERC20", () => { await erc20.connect(deployer).mint(user.address, amount * 2); await erc20TWR.connect(deployer).mint(user.address, amount * 2); - await erc20.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); - await erc20TWR.connect(user).approve(await depositBoxERC20.getAddress(), amount * 2); + await erc20.connect(user).approve(depositBoxERC20, amount * 2); + await erc20TWR.connect(user).approve(depositBoxERC20, amount * 2); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20TWR.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20TWR, amount); const balanceBefore = await ethers.provider.getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message, messageTWR], sign); @@ -448,12 +448,12 @@ describe("DepositBoxERC20", () => { balance.should.be.least(balanceBefore); balance.should.be.closeTo(balanceBefore, 10); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20.getAddress(), amount); - await depositBoxERC20.connect(user).depositERC20(schainName, await erc20TWR.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20, amount); + await depositBoxERC20.connect(user).depositERC20(schainName, erc20TWR, amount); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 2, [message, messageTWR], sign); - const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, await erc20.getAddress()); + const transferredAmount = await depositBoxERC20.transferredAmount(schainHash, erc20); expect(transferredAmount).to.be.equal(0); - const transferredAmountTWR = await depositBoxERC20.transferredAmount(schainHash, await erc20TWR.getAddress()); + const transferredAmountTWR = await depositBoxERC20.transferredAmount(schainHash, erc20TWR); expect(transferredAmountTWR).to.be.equal(0); (await erc20.balanceOf(user.address)).toString().should.be.equal((amount * 2).toString()); @@ -495,17 +495,17 @@ describe("DepositBoxERC20", () => { await token.mint(user.address, depositedAmount); await token2.mint(user.address, depositedAmount); - await token.connect(user).approve(await depositBoxERC20.getAddress(), depositedAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, await token.getAddress(), depositedAmount); + await token.connect(user).approve(depositBoxERC20, depositedAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, token, depositedAmount); - await token2.connect(user).approve(await depositBoxERC20.getAddress(), depositedAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, await token2.getAddress(), depositedAmount); + await token2.connect(user).approve(depositBoxERC20, depositedAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, token2, depositedAmount); await expect( - depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, await token.getAddress(), bigAmount) + depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, token, bigAmount) ).to.emit(depositBoxERC20, "BigTransferThresholdIsChanged") - .withArgs(schainHash, await token.getAddress(), 0, bigAmount); - await depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, await token2.getAddress(), bigAmount); + .withArgs(schainHash, token, 0, bigAmount); + await depositBoxERC20.connect(schainOwner).setBigTransferValue(schainName, token2, bigAmount); await expect( depositBoxERC20.connect(schainOwner).setBigTransferDelay(schainName, timeDelay) ).to.emit(depositBoxERC20, "BigTransferDelayIsChanged") @@ -522,15 +522,15 @@ describe("DepositBoxERC20", () => { const balanceBefore = await token.balanceOf(user.address); const message = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; await expect( messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], randomSignature) ).to.emit(depositBoxERC20, "TransferDelayed") - .withArgs(0, user.address, await token.getAddress(), bigAmount); + .withArgs(0, user.address, token, bigAmount); (await token.balanceOf(user.address)).should.be.equal(balanceBefore); @@ -548,26 +548,26 @@ describe("DepositBoxERC20", () => { it("should allow to perform arbitrage", async () => { const smallTransferOfToken1 = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, amount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, amount), + destinationContract: depositBoxERC20, sender: deployer.address }; const bigTransferOfToken1 = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; const smallTransferOfToken2 = { - data: await messages.encodeTransferErc20Message(await token2.getAddress(), user.address, amount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token2, user.address, amount), + destinationContract: depositBoxERC20, sender: deployer.address }; const bigTransferOfToken2 = { - data: await messages.encodeTransferErc20Message(await token2.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token2, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -591,13 +591,13 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(4 * bigAmount); - (await depositBoxERC20.getDelayedAmount(user.address, await token2.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token2)) .should.be.equal(bigAmount); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token)) .should.be.equal((await currentTime()) + timeDelay); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token2.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token2)) .should.be.equal((await currentTime()) + timeDelay); // 2 small transfers of token 1 and 2 small transfers of token 2 must be processed without delay @@ -654,8 +654,8 @@ describe("DepositBoxERC20", () => { it("should not stuck after big amount of competed transfers", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -706,19 +706,19 @@ describe("DepositBoxERC20", () => { it("should not stuck if a token reverts transfer", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; const badToken = await (await ethers.getContractFactory("RevertableERC20")).deploy("Test", "TST"); await badToken.mint(user.address, bigAmount); - await badToken.connect(user).approve(await depositBoxERC20.getAddress(), bigAmount); - await depositBoxERC20.connect(user).depositERC20(schainName, await badToken.getAddress(), bigAmount); + await badToken.connect(user).approve(depositBoxERC20, bigAmount); + await depositBoxERC20.connect(user).depositERC20(schainName, badToken, bigAmount); const badTokenBigTransfer = { - data: await messages.encodeTransferErc20Message(await badToken.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(badToken, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -755,8 +755,8 @@ describe("DepositBoxERC20", () => { it("should disable delay for trusted receivers", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -791,14 +791,14 @@ describe("DepositBoxERC20", () => { ); (await token.balanceOf(user.address)).should.be.equal(bigAmount); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(bigAmount); }) it("should reduce delay", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -809,7 +809,7 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token)) .should.be.equal(await currentTime() + timeDelay); @@ -823,16 +823,16 @@ describe("DepositBoxERC20", () => { randomSignature ); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token)) .should.be.equal(await currentTime() + lowerDelay); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(2 * bigAmount); }); it("should process correctly in non linear order", async () => { const bigTransfer = { - data: await messages.encodeTransferErc20Message(await token.getAddress(), user.address, bigAmount), - destinationContract: await depositBoxERC20.getAddress(), + data: await messages.encodeTransferErc20Message(token, user.address, bigAmount), + destinationContract: depositBoxERC20, sender: deployer.address }; @@ -850,14 +850,14 @@ describe("DepositBoxERC20", () => { await depositBoxERC20.escalate(0); - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token)) .should.be.equal(lockedUntil); await skipTime(timeDelay); await depositBoxERC20.retrieveFor(user.address); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(bigAmount); await messageProxy.connect(nodeAddress).postIncomingMessages( @@ -870,15 +870,15 @@ describe("DepositBoxERC20", () => { ); lockedUntil = await currentTime() + timeDelay; - (await depositBoxERC20.getNextUnlockTimestamp(user.address, await token.getAddress())) + (await depositBoxERC20.getNextUnlockTimestamp(user.address, token)) .should.be.equal(lockedUntil); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(2 * bigAmount); await skipTime(timeDelay); await depositBoxERC20.retrieveFor(user.address); - (await depositBoxERC20.getDelayedAmount(user.address, await token.getAddress())) + (await depositBoxERC20.getDelayedAmount(user.address, token)) .should.be.equal(bigAmount); (await token.balanceOf(user.address)) .should.be.equal(2 * bigAmount); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index 03a3c734e..998634fd0 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -105,7 +105,7 @@ describe("DepositBoxERC721", () => { depositBoxERC721 = await deployDepositBoxERC721(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -120,9 +120,9 @@ describe("DepositBoxERC721", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(await depositBoxERC721.getAddress()); - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); - await messageProxy.registerExtraContract(schainName, await linker.getAddress()); + await messageProxy.registerExtraContractForAll(depositBoxERC721); + await messageProxy.registerExtraContract(schainName, communityPool); + await messageProxy.registerExtraContract(schainName, linker); }); describe("tests with `ERC721`", async () => { @@ -147,14 +147,14 @@ describe("DepositBoxERC721", () => { // preparation const amount = 10; - await depositBoxERC721.connect(user).depositERC721(schainName, await erc721.getAddress(), amount) + await depositBoxERC721.connect(user).depositERC721(schainName, erc721, amount) .should.be.eventually.rejectedWith("Unconnected chain"); }); it("should rejected with `DepositBox was not approved for ERC721 token`", async () => { // preparation const error = "DepositBox was not approved for ERC721 token"; - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const tokenId = 10; // the wei should be MORE than (55000 * 1000000000) // GAS_AMOUNT_POST_MESSAGE * AVERAGE_TX_PRICE constants in DepositBox.sol @@ -172,7 +172,7 @@ describe("DepositBoxERC721", () => { it("should invoke `depositERC721` without mistakes", async () => { // preparation - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const tokenId = 10; const tokenId2 = 11; // the wei should be MORE than (55000 * 1000000000) @@ -182,8 +182,8 @@ describe("DepositBoxERC721", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId2); + await erc721OnChain.connect(deployer).approve(depositBoxERC721, tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721, tokenId2); // execution await depositBoxERC721 .connect(deployer) @@ -197,13 +197,13 @@ describe("DepositBoxERC721", () => { .depositERC721(schainName, contractHere, tokenId2)).wait(); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721.getAddress()); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721); }); it("should invoke `depositERC721Direct` without mistakes", async () => { // preparation - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const to = user.address; const tokenId = 10; const tokenId2 = 11; @@ -214,8 +214,8 @@ describe("DepositBoxERC721", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId2); + await erc721OnChain.connect(deployer).approve(depositBoxERC721, tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721, tokenId2); // execution await depositBoxERC721 .connect(deployer) @@ -227,16 +227,16 @@ describe("DepositBoxERC721", () => { .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxERC721.getAddress(), deployer.address, data1); + .withArgs(schainHash, 0, depositBoxERC721, deployer.address, data1); await depositBoxERC721 .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, await depositBoxERC721.getAddress(), deployer.address, data2); + .withArgs(schainHash, 1, depositBoxERC721, deployer.address, data2); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721.getAddress()); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721); }); }); @@ -247,16 +247,16 @@ describe("DepositBoxERC721", () => { await linker .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721, tokenId); await depositBoxERC721.connect(user).disableWhitelist(schainName); await depositBoxERC721 .connect(deployer) - .depositERC721(schainName, await erc721OnChain.getAddress(), tokenId); - await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC721(schainName, erc721OnChain, tokenId); + await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); - await depositBoxERC721.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId); + await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); + await depositBoxERC721.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId); expect(await erc721OnChain.ownerOf(tokenId)).to.equal(user.address); }); @@ -264,13 +264,13 @@ describe("DepositBoxERC721", () => { const fakeERC721Contract = deployer.address; await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, fakeERC721Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC721.connect(deployer).addERC721TokenByOwner(schainName, await erc721.getAddress()) + await depositBoxERC721.connect(deployer).addERC721TokenByOwner(schainName, erc721) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()); - await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()).should.be.eventually.rejectedWith("ERC721 Token was already added"); - expect(await depositBoxERC721.getSchainToERC721(schainName, await erc721.getAddress())).to.be.equal(true); - expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(await erc721.getAddress()); + await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, erc721); + await depositBoxERC721.connect(user).addERC721TokenByOwner(schainName, erc721).should.be.eventually.rejectedWith("ERC721 Token was already added"); + expect(await depositBoxERC721.getSchainToERC721(schainName, erc721)).to.be.equal(true); + expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(erc721); expect((await depositBoxERC721.getSchainToAllERC721(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC721.getSchainToAllERC721Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC721.getSchainToAllERC721(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -317,13 +317,13 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), - destinationContract: await depositBoxERC721.getAddress(), + data: await messages.encodeTransferErc721Message(erc721, to, tokenId), + destinationContract: depositBoxERC721, sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); - await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721.getAddress(), tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721, tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -342,12 +342,12 @@ describe("DepositBoxERC721", () => { const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc721Message(user2.address, to, tokenId), - destinationContract: await depositBoxERC721.getAddress(), + destinationContract: depositBoxERC721, sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); - await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721.getAddress(), tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721, tokenId); const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) @@ -361,8 +361,8 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const messageWithWrongTokenAddress = { - data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), - destinationContract: await depositBoxERC721.getAddress(), + data: await messages.encodeTransferErc721Message(erc721, to, tokenId), + destinationContract: depositBoxERC721, sender: senderFromSchain }; @@ -382,23 +382,23 @@ describe("DepositBoxERC721", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721Message(await erc721.getAddress(), to, tokenId), - destinationContract: await depositBoxERC721.getAddress(), + data: await messages.encodeTransferErc721Message(erc721, to, tokenId), + destinationContract: depositBoxERC721, sender: senderFromSchain }; await erc721.mint(deployer.address, tokenId); - await erc721.approve(await depositBoxERC721.getAddress(), tokenId); + await erc721.approve(depositBoxERC721, tokenId); await depositBoxERC721 - .depositERC721(schainName, await erc721.getAddress(), tokenId); + .depositERC721(schainName, erc721, tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); const balance = await getBalance(deployer.address); balance.should.not.be.lessThan(balanceBefore); balance.should.be.almost(balanceBefore); - expect(await depositBoxERC721.transferredAmount(await erc721.getAddress(), tokenId)).to.be.equal(zeroHash); + expect(await depositBoxERC721.transferredAmount(erc721, tokenId)).to.be.equal(zeroHash); (await erc721.ownerOf(tokenId)).should.be.equal(user.address); }); diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index f6c372556..300827e21 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -105,7 +105,7 @@ describe("DepositBoxERC721WithMetadata", () => { depositBoxERC721WithMetadata = await deployDepositBoxERC721WithMetadata(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -120,9 +120,9 @@ describe("DepositBoxERC721WithMetadata", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(await depositBoxERC721WithMetadata.getAddress()); - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); - await messageProxy.registerExtraContract(schainName, await linker.getAddress()); + await messageProxy.registerExtraContractForAll(depositBoxERC721WithMetadata); + await messageProxy.registerExtraContract(schainName, communityPool); + await messageProxy.registerExtraContract(schainName, linker); }); describe("tests with `ERC721`", async () => { @@ -151,14 +151,14 @@ describe("DepositBoxERC721WithMetadata", () => { // preparation const amount = 10; - await depositBoxERC721WithMetadata.connect(user).depositERC721(schainName, await erc721.getAddress(), amount) + await depositBoxERC721WithMetadata.connect(user).depositERC721(schainName, erc721, amount) .should.be.eventually.rejectedWith("Unconnected chain"); }); it("should rejected with `DepositBox was not approved for ERC721 token`", async () => { // preparation const error = "DepositBox was not approved for ERC721 token"; - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const tokenId = 10; // the wei should be MORE than (55000 * 1000000000) // GAS_AMOUNT_POST_MESSAGE * AVERAGE_TX_PRICE constants in DepositBox.sol @@ -176,7 +176,7 @@ describe("DepositBoxERC721WithMetadata", () => { it("should invoke `depositERC721` without mistakes", async () => { // preparation - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const tokenId = 10; const tokenId2 = 11; // the wei should be MORE than (55000 * 1000000000) @@ -186,8 +186,8 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721WithMetadata` - await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId2); + await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata, tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata, tokenId2); // execution await depositBoxERC721WithMetadata .connect(deployer) @@ -201,13 +201,13 @@ describe("DepositBoxERC721WithMetadata", () => { .depositERC721(schainName, contractHere, tokenId2)).wait(); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721WithMetadata.getAddress()); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721WithMetadata.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721WithMetadata); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721WithMetadata); }); it("should invoke `depositERC721Direct` without mistakes", async () => { // preparation - const contractHere = await erc721OnChain.getAddress(); + const contractHere = erc721OnChain; const to = user.address; const tokenId = 10; const tokenId2 = 11; @@ -218,8 +218,8 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); // transfer tokenId from `deployer` to `depositBoxERC721` - await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId2); + await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata, tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata, tokenId2); // execution await depositBoxERC721WithMetadata .connect(deployer) @@ -231,16 +231,16 @@ describe("DepositBoxERC721WithMetadata", () => { .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxERC721WithMetadata.getAddress(), deployer.address, data1); + .withArgs(schainHash, 0, depositBoxERC721WithMetadata, deployer.address, data1); await depositBoxERC721WithMetadata .connect(deployer) .depositERC721Direct(schainName, contractHere, tokenId2, to) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 1, await depositBoxERC721WithMetadata.getAddress(), deployer.address, data2); + .withArgs(schainHash, 1, depositBoxERC721WithMetadata, deployer.address, data2); // console.log("Gas for depositERC721:", res.receipt.gasUsed); // expectation - expect(await erc721OnChain.ownerOf(tokenId)).to.equal(await depositBoxERC721WithMetadata.getAddress()); - expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(await depositBoxERC721WithMetadata.getAddress()); + expect(await erc721OnChain.ownerOf(tokenId)).to.equal(depositBoxERC721WithMetadata); + expect(await erc721OnChain.ownerOf(tokenId2)).to.equal(depositBoxERC721WithMetadata); }); }); @@ -251,16 +251,16 @@ describe("DepositBoxERC721WithMetadata", () => { await linker .connect(deployer) .connectSchain(schainName, [deployer.address, deployer.address, deployer.address]); - await erc721OnChain.connect(deployer).approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721OnChain.connect(deployer).approve(depositBoxERC721WithMetadata, tokenId); await depositBoxERC721WithMetadata.connect(user).disableWhitelist(schainName); await depositBoxERC721WithMetadata .connect(deployer) - .depositERC721(schainName, await erc721OnChain.getAddress(), tokenId); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); + .depositERC721(schainName, erc721OnChain, tokenId); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId).should.be.eventually.rejectedWith("Schain is not killed"); await linker.connect(deployer).kill(schainName); await linker.connect(user).kill(schainName); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); - await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, await erc721OnChain.getAddress(), user.address, tokenId); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId2).should.be.eventually.rejectedWith("Incorrect tokenId"); + await depositBoxERC721WithMetadata.connect(user).getFunds(schainName, erc721OnChain, user.address, tokenId); expect(await erc721OnChain.ownerOf(tokenId)).to.equal(user.address); }); @@ -268,13 +268,13 @@ describe("DepositBoxERC721WithMetadata", () => { const fakeERC721Contract = deployer.address; await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, fakeERC721Contract) .should.be.eventually.rejectedWith("Given address is not a contract"); - await depositBoxERC721WithMetadata.connect(deployer).addERC721TokenByOwner(schainName, await erc721.getAddress()) + await depositBoxERC721WithMetadata.connect(deployer).addERC721TokenByOwner(schainName, erc721) .should.be.eventually.rejectedWith("Sender is not an Schain owner"); - await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()); - await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, await erc721.getAddress()).should.be.eventually.rejectedWith("ERC721 Token was already added"); - expect(await depositBoxERC721WithMetadata.getSchainToERC721(schainName, await erc721.getAddress())).to.be.equal(true); - expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(await erc721.getAddress()); + await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, erc721); + await depositBoxERC721WithMetadata.connect(user).addERC721TokenByOwner(schainName, erc721).should.be.eventually.rejectedWith("ERC721 Token was already added"); + expect(await depositBoxERC721WithMetadata.getSchainToERC721(schainName, erc721)).to.be.equal(true); + expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1))[0]).to.be.equal(erc721); expect((await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 0, 1)).length).to.be.equal(1); expect((await depositBoxERC721WithMetadata.getSchainToAllERC721Length(schainName)).toString()).to.be.equal("1"); await depositBoxERC721WithMetadata.getSchainToAllERC721(schainName, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -322,14 +322,14 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), - destinationContract: await depositBoxERC721WithMetadata.getAddress(), + data: await messages.encodeTransferErc721MessageWithMetadata(erc721, to, tokenId, tokenURI), + destinationContract: depositBoxERC721WithMetadata, sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721WithMetadata, tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); @@ -350,13 +350,13 @@ describe("DepositBoxERC721WithMetadata", () => { const messageWithWrongTokenAddress = { data: await messages.encodeTransferErc721MessageWithMetadata(user2.address, to, tokenId, tokenURI), - destinationContract: await depositBoxERC721WithMetadata.getAddress(), + destinationContract: depositBoxERC721WithMetadata, sender: senderFromSchain }; await erc721.connect(deployer).mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.connect(deployer).transferFrom(deployer.address, await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721.connect(deployer).transferFrom(deployer.address, depositBoxERC721WithMetadata, tokenId); const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) @@ -371,8 +371,8 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const messageWithWrongTokenAddress = { - data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), - destinationContract: await depositBoxERC721WithMetadata.getAddress(), + data: await messages.encodeTransferErc721MessageWithMetadata(erc721, to, tokenId, tokenURI), + destinationContract: depositBoxERC721WithMetadata, sender: senderFromSchain }; @@ -394,24 +394,24 @@ describe("DepositBoxERC721WithMetadata", () => { const senderFromSchain = deployer.address; const message = { - data: await messages.encodeTransferErc721MessageWithMetadata(await erc721.getAddress(), to, tokenId, tokenURI), - destinationContract: await depositBoxERC721WithMetadata.getAddress(), + data: await messages.encodeTransferErc721MessageWithMetadata(erc721, to, tokenId, tokenURI), + destinationContract: depositBoxERC721WithMetadata, sender: senderFromSchain }; await erc721.mint(deployer.address, tokenId); await erc721.connect(deployer).setTokenURI(tokenId, tokenURI); - await erc721.approve(await depositBoxERC721WithMetadata.getAddress(), tokenId); + await erc721.approve(depositBoxERC721WithMetadata, tokenId); await depositBoxERC721WithMetadata - .depositERC721(schainName, await erc721.getAddress(), tokenId); + .depositERC721(schainName, erc721, tokenId); const balanceBefore = await getBalance(deployer.address); await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); const balance = await getBalance(deployer.address); balance.should.not.be.lessThan(balanceBefore); balance.should.be.almost(balanceBefore); - expect(await depositBoxERC721WithMetadata.transferredAmount(await erc721.getAddress(), tokenId)).to.be.equal(zeroHash); + expect(await depositBoxERC721WithMetadata.transferredAmount(erc721, tokenId)).to.be.equal(zeroHash); (await erc721.ownerOf(tokenId)).should.be.equal(user.address); (await erc721.tokenURI(tokenId)).should.be.equal(tokenURI); diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 4da4ab5cc..7c2e10909 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -126,7 +126,7 @@ describe("DepositBoxEth", () => { depositBoxEth = await deployDepositBoxEth(contractManager, linker, messageProxy); communityPool = await deployCommunityPool(contractManager, linker, messageProxy); messages = await deployMessages(); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, user.address, 1, 1); const nodeCreationParams = { @@ -141,9 +141,9 @@ describe("DepositBoxEth", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, user2.address, "1000000000000000000"); - await messageProxy.registerExtraContractForAll(await depositBoxEth.getAddress()); - await messageProxy.registerExtraContract(schainName, await communityPool.getAddress()); - await messageProxy.registerExtraContract(schainName, await linker.getAddress()); + await messageProxy.registerExtraContractForAll(depositBoxEth); + await messageProxy.registerExtraContract(schainName, communityPool); + await messageProxy.registerExtraContract(schainName, linker); }); describe("tests for `deposit` function", async () => { @@ -184,7 +184,7 @@ describe("DepositBoxEth", () => { .connect(deployer) .deposit(schainName, { value: wei }); - const lockAndDataBalance = await ethers.provider.getBalance(await depositBoxEth.getAddress()); + const lockAndDataBalance = await ethers.provider.getBalance(depositBoxEth); // expectation expect(lockAndDataBalance).to.equal(wei); }); @@ -206,9 +206,9 @@ describe("DepositBoxEth", () => { .connect(deployer) .depositDirect(schainName, user.address, { value: wei }) .should.emit(messageProxy, "OutgoingMessage") - .withArgs(schainHash, 0, await depositBoxEth.getAddress(), deployer.address, data); + .withArgs(schainHash, 0, depositBoxEth, deployer.address, data); - const lockAndDataBalance = await ethers.provider.getBalance(await depositBoxEth.getAddress()); + const lockAndDataBalance = await ethers.provider.getBalance(depositBoxEth); // expectation expect(lockAndDataBalance).to.equal(wei); }); @@ -217,7 +217,7 @@ describe("DepositBoxEth", () => { // preparation const error = "Use deposit function"; // execution/expectation - await deployer.sendTransaction({to: await depositBoxEth.getAddress(), value: ethers.parseEther("1") }) + await deployer.sendTransaction({to: depositBoxEth, value: ethers.parseEther("1") }) .should.be.eventually.rejectedWith(error); }); @@ -276,7 +276,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -314,7 +314,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -360,7 +360,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -397,7 +397,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain, }; // redeploy depositBoxEth with `developer` address instead `messageProxyForMainnet.address` @@ -431,7 +431,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain, }; @@ -480,7 +480,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain, }; @@ -543,7 +543,7 @@ describe("DepositBoxEth", () => { const wei = "30000000000000000"; const fallbackEthTester = await deployFallbackEthTester(depositBoxEth, communityPool, schainName); - const bytesData = await messages.encodeTransferEthMessage(await fallbackEthTester.getAddress(), wei); + const bytesData = await messages.encodeTransferEthMessage(fallbackEthTester, wei); await setCommonPublicKey(contractManager, schainName); @@ -556,7 +556,7 @@ describe("DepositBoxEth", () => { const message = { data: bytesData, - destinationContract: await depositBoxEth.getAddress(), + destinationContract: depositBoxEth, sender: senderFromSchain, }; @@ -582,12 +582,12 @@ describe("DepositBoxEth", () => { await reimbursed(await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign)); - expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); + expect(await depositBoxEth.approveTransfers(fallbackEthTester)).to.equal(wei); await depositBoxEth.connect(user2).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); - expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); + expect(await depositBoxEth.approveTransfers(fallbackEthTester)).to.equal(wei); expect(await depositBoxEth.activeEthTransfers(schainHash)).to.be.equal(false); await depositBoxEth.connect(user2).enableActiveEthTransfers(schainName).should.be.rejectedWith("Sender is not an Schain owner"); @@ -597,7 +597,7 @@ describe("DepositBoxEth", () => { await depositBoxEth.connect(deployer).enableActiveEthTransfers(schainName).should.be.eventually.rejectedWith("Active eth transfers enabled"); expect(await depositBoxEth.activeEthTransfers(schainHash)).to.be.equal(true); - await ethers.provider.getBalance(await fallbackEthTester.getAddress()); + await ethers.provider.getBalance(fallbackEthTester); const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 1, [message], sign); @@ -606,9 +606,9 @@ describe("DepositBoxEth", () => { .withArgs(1n, stringToHex("Address: unable to send value, recipient may have reverted")); - expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal(wei); + expect(await depositBoxEth.approveTransfers(fallbackEthTester)).to.equal(wei); await fallbackEthTester.connect(user).getMyEth(); - expect(await depositBoxEth.approveTransfers(await fallbackEthTester.getAddress())).to.equal("0"); + expect(await depositBoxEth.approveTransfers(fallbackEthTester)).to.equal("0"); await fallbackEthTester.connect(user).getMyEth() .should.be.eventually.rejectedWith("User has insufficient ETH"); }); diff --git a/test/Linker.ts b/test/Linker.ts index 8a6372d9d..a34b5d514 100644 --- a/test/Linker.ts +++ b/test/Linker.ts @@ -78,16 +78,16 @@ describe("Linker", () => { depositBoxEth = await deployDepositBoxEth(contractManager, linker, messageProxy); depositBoxERC20 = await deployDepositBoxERC20(contractManager, linker, messageProxy); depositBoxERC721 = await deployDepositBoxERC721(contractManager, linker, messageProxy); - await linker.removeMainnetContract(await depositBoxEth.getAddress()); - await linker.removeMainnetContract(await depositBoxERC20.getAddress()); - await linker.removeMainnetContract(await depositBoxERC721.getAddress()); - await linker.removeMainnetContract(await linker.getAddress()); + await linker.removeMainnetContract(depositBoxEth); + await linker.removeMainnetContract(depositBoxERC20); + await linker.removeMainnetContract(depositBoxERC721); + await linker.removeMainnetContract(linker); await linker.grantRole(await linker.LINKER_ROLE(), deployer.address); - await linker.grantRole(await linker.LINKER_ROLE(), await linker.getAddress()); - await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), await linker.getAddress()); + await linker.grantRole(await linker.LINKER_ROLE(), linker); + await messageProxy.grantRole(await messageProxy.CHAIN_CONNECTOR_ROLE(), linker); await messageProxy.grantRole(await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await initializeSchain(contractManager, schainName, deployer.address, 1, 1); - await messageProxy.registerExtraContractForAll(await linker.getAddress()); + await messageProxy.registerExtraContractForAll(linker); }); it("should connect schain", async () => { @@ -107,11 +107,11 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(false); - await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); + await linker.connect(deployer).registerMainnetContract(depositBoxEth); - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(true); await linker.connect(deployer).connectSchain(schainName, []) .should.be.eventually.rejectedWith("Incorrect number of addresses"); @@ -134,20 +134,20 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await linker.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC20)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC721)).to.equal(false); + expect(await linker.hasMainnetContract(linker)).to.equal(false); - await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); - await linker.connect(deployer).registerMainnetContract(await linker.getAddress()); + await linker.connect(deployer).registerMainnetContract(depositBoxEth); + await linker.connect(deployer).registerMainnetContract(depositBoxERC20); + await linker.connect(deployer).registerMainnetContract(depositBoxERC721); + await linker.connect(deployer).registerMainnetContract(linker); - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); - expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(true); - expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(true); - expect(await linker.hasMainnetContract(await linker.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxERC20)).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxERC721)).to.equal(true); + expect(await linker.hasMainnetContract(linker)).to.equal(true); await linker.connect(deployer).connectSchain(schainName, []) .should.be.eventually.rejectedWith("Incorrect number of addresses"); @@ -174,10 +174,10 @@ describe("Linker", () => { it("should invoke `disconnectSchain` without mistakes", async () => { const tokenManagerAddress = user.address; - await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); - await linker.connect(deployer).registerMainnetContract(await linker.getAddress()); + await linker.connect(deployer).registerMainnetContract(depositBoxEth); + await linker.connect(deployer).registerMainnetContract(depositBoxERC20); + await linker.connect(deployer).registerMainnetContract(depositBoxERC721); + await linker.connect(deployer).registerMainnetContract(linker); await linker.connect(deployer).connectSchain(schainName, [tokenManagerAddress, tokenManagerAddress, tokenManagerAddress, tokenManagerAddress]); @@ -193,17 +193,17 @@ describe("Linker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC20)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC721)).to.equal(false); - await linker.connect(deployer).registerMainnetContract(await depositBoxEth.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC20.getAddress()); - await linker.connect(deployer).registerMainnetContract(await depositBoxERC721.getAddress()); + await linker.connect(deployer).registerMainnetContract(depositBoxEth); + await linker.connect(deployer).registerMainnetContract(depositBoxERC20); + await linker.connect(deployer).registerMainnetContract(depositBoxERC721); - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(true); - expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(true); - expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxERC20)).to.equal(true); + expect(await linker.hasMainnetContract(depositBoxERC721)).to.equal(true); expect(await linker.hasMainnetContract(nullAddress)).to.equal(false); expect(await linker.hasMainnetContract(tokenManagerAddress)).to.equal(false); @@ -227,13 +227,13 @@ describe("Linker", () => { expect(await linker.hasMainnetContract(nullAddress)).to.equal(false); - await linker.connect(deployer).removeMainnetContract(await depositBoxEth.getAddress()); - await linker.connect(deployer).removeMainnetContract(await depositBoxERC20.getAddress()); - await linker.connect(deployer).removeMainnetContract(await depositBoxERC721.getAddress()); + await linker.connect(deployer).removeMainnetContract(depositBoxEth); + await linker.connect(deployer).removeMainnetContract(depositBoxERC20); + await linker.connect(deployer).removeMainnetContract(depositBoxERC721); - expect(await linker.hasMainnetContract(await depositBoxEth.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC20.getAddress())).to.equal(false); - expect(await linker.hasMainnetContract(await depositBoxERC721.getAddress())).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxEth)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC20)).to.equal(false); + expect(await linker.hasMainnetContract(depositBoxERC721)).to.equal(false); }); it("should kill schain by schain owner first", async () => { diff --git a/test/MessageProxy.ts b/test/MessageProxy.ts index b5953743c..f5295aa39 100644 --- a/test/MessageProxy.ts +++ b/test/MessageProxy.ts @@ -121,7 +121,7 @@ describe("MessageProxy", () => { communityPool = await deployCommunityPool(contractManager, imaLinker, messageProxyForMainnet); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(), deployer.address); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), deployer.address); - const registerTx = await messageProxyForMainnet.registerExtraContract(schainName, await caller.getAddress()); + const registerTx = await messageProxyForMainnet.registerExtraContract(schainName, caller); if (registerTx.gasPrice) { gasPrice = registerTx.gasPrice; } @@ -214,16 +214,16 @@ describe("MessageProxy", () => { }); it("should post outgoing message twice", async () => { - const contractAddress = await messageProxyForMainnet.getAddress(); + const contractAddress = messageProxyForMainnet; const amount = 4; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - const message1 = caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + const message1 = caller.postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); await expect(message1) .to.emit(messageProxyForMainnet, 'PreviousMessageReference') @@ -233,7 +233,7 @@ describe("MessageProxy", () => { outgoingMessagesCounter.should.be.equal(1); const lastOutgoingMessageBlockId = await messageProxyForMainnet.getLastOutgoingMessageBlockId(schainName); - const message2 = caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + const message2 = caller.postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); await expect(message2) .to.emit(messageProxyForMainnet, 'PreviousMessageReference') .withArgs(1, lastOutgoingMessageBlockId); @@ -243,13 +243,13 @@ describe("MessageProxy", () => { }); it("should pause with a role and unpause", async () => { - const contractAddress = await messageProxyForMainnet.getAddress(); + const contractAddress = messageProxyForMainnet; const amount = 4; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); const schainOwner = user; await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); const schainsInternal = (await ethers.getContractFactory("SchainsInternal")).attach(await contractManager.getContract("SchainsInternal")) as SchainsInternal; @@ -259,7 +259,7 @@ describe("MessageProxy", () => { await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); let outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(1); @@ -287,7 +287,7 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(true); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData) .should.be.rejectedWith("IMA is paused"); await messageProxyForMainnet.connect(client).resume(schainName).should.be.rejectedWith("Incorrect sender"); @@ -303,7 +303,7 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(false); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(2); @@ -315,14 +315,14 @@ describe("MessageProxy", () => { pausedInfo.should.be.equal(true); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData) + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData) .should.be.rejectedWith("IMA is paused"); await messageProxyForMainnet.connect(deployer).resume(schainName); await messageProxyForMainnet.connect(schainOwner).resume(schainName).should.be.rejectedWith("Already unpaused"); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(3); @@ -370,20 +370,20 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, communityPool); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -458,15 +458,15 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, communityPool); await depositBox.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); const amountWei = minTransactionGas * BigInt(gasPrice) * 2n; - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, depositBox); const message1 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 1), }; @@ -480,7 +480,7 @@ describe("MessageProxy", () => { }; await messageProxyForMainnet.connect(deployer).addConnectedChain(schainName); - await communityPool.connect(deployer).addSchainContract(schainName, await communityPool.getAddress()); + await communityPool.connect(deployer).addSchainContract(schainName, communityPool); await communityPool.connect(client).rechargeUserWallet(schainName, client.address, {value: amountWei.toString()}); @@ -510,7 +510,7 @@ describe("MessageProxy", () => { newBalance.should.be.lt(balance); newUserBalance.should.be.deep.equal(userBalance); - await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()); + await messageProxyForMainnet.addReimbursedContract(schainName, depositBox); balance = newBalance; userBalance = newUserBalance; @@ -547,7 +547,7 @@ describe("MessageProxy", () => { await createNode(contractManager, nodeAddress.address, nodeCreationParams); await addNodesToSchain(contractManager, schainName, [0]); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, communityPool); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); @@ -555,13 +555,13 @@ describe("MessageProxy", () => { const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -665,20 +665,20 @@ describe("MessageProxy", () => { await addNodesToSchain(contractManager, schainName, [0]); await rechargeSchainWallet(contractManager, schainName, deployer.address, "1000000000000000000"); await setCommonPublicKey(contractManager, schainName); - await messageProxyForMainnet.registerExtraContract(schainName, await communityPool.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, communityPool); await depositBox.addSchainContract(schainName, deployer.address); await communityPool.addSchainContract(schainName, deployer.address); const minTransactionGas = await communityPool.minTransactionGas(); const amountWei = minTransactionGas * BigInt(gasPrice); const message1 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(client.address, 0), }; const message2 = { - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, data: await messages.encodeTransferEthMessage(customer.address, 7), }; @@ -747,7 +747,7 @@ describe("MessageProxy", () => { }); it("should get outgoing messages counter", async () => { - const contractAddress = await depositBox.getAddress(); + const contractAddress = depositBox; const amount = 5; const addressTo = client.address; const bytesData = await messages.encodeTransferEthMessage(addressTo, amount); @@ -761,7 +761,7 @@ describe("MessageProxy", () => { outgoingMessagesCounter0.should.be.equal(0); await caller - .postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), schainHash, contractAddress, bytesData); + .postOutgoingMessageTester(messageProxyForMainnet, schainHash, contractAddress, bytesData); const outgoingMessagesCounter = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(1); @@ -786,14 +786,14 @@ describe("MessageProxy", () => { const message1 = { amount: 3, data: "0x11", - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, to: client.address }; const message2 = { amount: 7, data: "0x22", - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: user.address, to: customer.address }; @@ -853,14 +853,14 @@ describe("MessageProxy", () => { const message1 = { amount: 3, data: "0x11", - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: deployer.address, to: client.address }; const message2 = { amount: 7, data: "0x22", - destinationContract: await depositBox.getAddress(), + destinationContract: depositBox, sender: user.address, to: customer.address }; @@ -891,9 +891,9 @@ describe("MessageProxy", () => { const outgoingMessagesCounter0 = await messageProxyForMainnet.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter0.should.be.equal(0); - await caller.postOutgoingMessageTester(await messageProxyForMainnet.getAddress(), + await caller.postOutgoingMessageTester(messageProxyForMainnet, schainHash, - await depositBox.getAddress(), + depositBox, bytesData, ); @@ -925,7 +925,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; @@ -938,7 +938,7 @@ describe("MessageProxy", () => { hashB: HashB, }; - await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, receiverMock); let a = await receiverMock.a(); expect(a).be.equal(0); @@ -977,13 +977,13 @@ describe("MessageProxy", () => { const testCallReceiverContract = await ethers.getContractFactory("TestCallReceiverContract"); const receiverMock = await testCallReceiverContract.deploy(); - await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, receiverMock); const startingCounter = 0; const message1 = { amount: 0, data: ethers.AbiCoder.defaultAbiCoder().encode(["uint"], [1]), - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; @@ -1033,14 +1033,14 @@ describe("MessageProxy", () => { const testCallReceiverContract = await ethers.getContractFactory("TestCallReceiverContract"); const receiverMock = await testCallReceiverContract.deploy(); - await messageProxyForMainnet.registerExtraContract(schainName, await receiverMock.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, receiverMock); const startingCounter = 0; const message1 = { amount: 0, data: ethers.AbiCoder.defaultAbiCoder().encode(["uint"], [2]), - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; @@ -1083,184 +1083,184 @@ describe("MessageProxy", () => { describe("register and remove extra contracts", async () => { it("should register extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).registerExtraContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).registerExtraContract(schainName, depositBox) .should.be.eventually.rejectedWith("Not enough permissions to register extra contract"); await messageProxyForMainnet.registerExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(false); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(true); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox)).to.be.equal(false); + await messageProxyForMainnet.registerExtraContract(schainName, depositBox); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox)).to.be.equal(true); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(await depositBox.getAddress()); + expect((await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(depositBox); await messageProxyForMainnet.getContractRegisteredRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getContractRegisteredRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.registerExtraContract(schainName, depositBox) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should register extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).registerExtraContractForAll(await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).registerExtraContractForAll(depositBox) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForMainnet.registerExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, await depositBox.getAddress())).to.be.equal(false); - await messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()); - expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, await depositBox.getAddress())).to.be.equal(true); + expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, depositBox)).to.be.equal(false); + await messageProxyForMainnet.registerExtraContractForAll(depositBox); + expect(await messageProxyForMainnet.isContractRegistered(zeroBytes32, depositBox)).to.be.equal(true); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(await depositBox.getAddress()); + expect((await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(depositBox); await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getContractRegisteredRange(zeroBytes32, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.registerExtraContract(schainName, depositBox) .should.be.eventually.rejectedWith("Extra contract is already registered for all chains"); - await messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(depositBox) .should.be.eventually.rejectedWith("Extra contract is already registered"); }); it("should register reimbursed contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).addReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).addReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Not enough permissions to add reimbursed contract"); await messageProxyForMainnet.addReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Given address is not a contract"); - await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.addReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Contract is not registered"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); - await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(true); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox)).to.be.equal(false); + await messageProxyForMainnet.registerExtraContract(schainName, depositBox); + await messageProxyForMainnet.addReimbursedContract(schainName, depositBox); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox)).to.be.equal(true); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1))[0]).to.be.equal(await depositBox.getAddress()); + expect((await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 1))[0]).to.be.equal(depositBox); await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForMainnet.getReimbursedContractsRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); - await messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.addReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Reimbursed contract is already added"); }); it("should remove extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeExtraContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).removeExtraContract(schainName, depositBox) .should.be.eventually.rejectedWith("Not enough permissions to register extra contract"); await messageProxyForMainnet.removeExtraContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.registerExtraContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ExtraContractRegistered" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); await expect( - messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.removeExtraContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ExtraContractRemoved" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getContractRegisteredLength(schainHash)).toString()).to.be.equal("1"); - await messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.removeExtraContract(schainName, depositBox) .should.be.eventually.rejectedWith("Extra contract is not registered"); - expect(await messageProxyForMainnet.isContractRegistered(schainHash, await depositBox.getAddress())).to.be.equal(false); + expect(await messageProxyForMainnet.isContractRegistered(schainHash, depositBox)).to.be.equal(false); }); it("should remove extra contract for all", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeExtraContractForAll(await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).removeExtraContractForAll(depositBox) .should.be.eventually.rejectedWith("EXTRA_CONTRACT_REGISTRAR_ROLE is required"); await messageProxyForMainnet.removeExtraContractForAll(fakeContractOnSchain) .should.be.eventually.rejectedWith("Extra contract is not registered"); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); await expect( - messageProxyForMainnet.registerExtraContractForAll(await depositBox.getAddress()) + messageProxyForMainnet.registerExtraContractForAll(depositBox) ).to.emit( messageProxyForMainnet, "ExtraContractRegistered" - ).withArgs(zeroBytes32, await depositBox.getAddress()); + ).withArgs(zeroBytes32, depositBox); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeExtraContractForAll(await depositBox.getAddress()) + messageProxyForMainnet.removeExtraContractForAll(depositBox) ).to.emit( messageProxyForMainnet, "ExtraContractRemoved" - ).withArgs(zeroBytes32, await depositBox.getAddress()); + ).withArgs(zeroBytes32, depositBox); expect((await messageProxyForMainnet.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeExtraContractForAll(await depositBox.getAddress()) + await messageProxyForMainnet.removeExtraContractForAll(depositBox) .should.be.eventually.rejectedWith("Extra contract is not registered"); }); it("should remove reimbursed contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Not enough permissions to remove reimbursed contract"); await messageProxyForMainnet.removeReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, depositBox); await expect( - messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.addReimbursedContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ReimbursedContractAdded" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.removeReimbursedContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ReimbursedContractRemoved" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.removeReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox)).to.be.equal(false); }); it("should remove reimbursed contract when remove extra contract", async () => { const fakeContractOnSchain = deployer.address; - await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.connect(user).removeReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Not enough permissions to remove reimbursed contract"); await messageProxyForMainnet.removeReimbursedContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.registerExtraContract(schainName, await depositBox.getAddress()); + await messageProxyForMainnet.registerExtraContract(schainName, depositBox); await expect( - messageProxyForMainnet.addReimbursedContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.addReimbursedContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ReimbursedContractAdded" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("1"); await expect( - messageProxyForMainnet.removeExtraContract(schainName, await depositBox.getAddress()) + messageProxyForMainnet.removeExtraContract(schainName, depositBox) ).to.emit( messageProxyForMainnet, "ReimbursedContractRemoved" - ).withArgs(schainHash, await depositBox.getAddress()); + ).withArgs(schainHash, depositBox); expect((await messageProxyForMainnet.getReimbursedContractsLength(schainHash)).toString()).to.be.equal("0"); - await messageProxyForMainnet.removeReimbursedContract(schainName, await depositBox.getAddress()) + await messageProxyForMainnet.removeReimbursedContract(schainName, depositBox) .should.be.eventually.rejectedWith("Reimbursed contract is not added"); - expect(await messageProxyForMainnet.isReimbursedContract(schainHash, await depositBox.getAddress())).to.be.equal(false); + expect(await messageProxyForMainnet.isReimbursedContract(schainHash, depositBox)).to.be.equal(false); }); }); @@ -1270,14 +1270,14 @@ describe("MessageProxy", () => { beforeEach(async () => { keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), "Base schain"); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, "Base schain"); messages = await deployMessages(); caller = await deployMessageProxyCaller(); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, deployer.address); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContract(schainName, await caller.getAddress()); + await messageProxyForSchain.registerExtraContract(schainName, caller); }); it("should set constants", async () => { @@ -1337,17 +1337,17 @@ describe("MessageProxy", () => { }); it("should post outgoing message", async () => { - const contractAddress = await messageProxyForSchain.getAddress(); + const contractAddress = messageProxyForSchain; const amount = 4; const addressTo = user.address; const bytesData = await messages.encodeTransferEthMessage(addressTo, amount); await caller - .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, contractAddress, bytesData) + .postOutgoingMessageTesterOnSchain(messageProxyForSchain, schainHash, contractAddress, bytesData) .should.be.rejectedWith("Destination chain is not initialized"); await messageProxyForSchain.connect(deployer).addConnectedChain(schainName); await caller - .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, contractAddress, bytesData); + .postOutgoingMessageTesterOnSchain(messageProxyForSchain, schainHash, contractAddress, bytesData); const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(1); }); @@ -1492,7 +1492,7 @@ describe("MessageProxy", () => { outgoingMessagesCounter0.should.be.equal(0); await caller - .postOutgoingMessageTesterOnSchain(await messageProxyForSchain.getAddress(), schainHash, messages.getAddress(), bytesData); + .postOutgoingMessageTesterOnSchain(messageProxyForSchain, schainHash, messages.getAddress(), bytesData); const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(schainName); outgoingMessagesCounter.should.be.equal(1); @@ -1528,7 +1528,7 @@ describe("MessageProxy", () => { await messageProxyForSchainWithoutSignature.connect(deployer).grantRole(chainConnectorRole, deployer.address); const extraContractRegistrarRole = await messageProxyForSchainWithoutSignature.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchainWithoutSignature.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchainWithoutSignature.registerExtraContract(schainName, await caller.getAddress()); + await messageProxyForSchainWithoutSignature.registerExtraContract(schainName, caller); const receiverMockFactory = await ethers.getContractFactory("ReceiverGasLimitSchainMock"); receiverMock = await receiverMockFactory.deploy() as ReceiverGasLimitSchainMock; @@ -1539,14 +1539,14 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; const outgoingMessages = [message1]; - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock); let a = await receiverMock.a(); expect(a).be.equal(0); @@ -1571,7 +1571,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; @@ -1579,15 +1579,15 @@ describe("MessageProxy", () => { const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchainWithoutSignature.getAddress()); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchainWithoutSignature); - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); - await messageProxyForSchainWithoutSignature.setEtherbase(await etherbase.getAddress()); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock); + await messageProxyForSchainWithoutSignature.setEtherbase(etherbase); const smallBalance = ethers.parseEther("0.02"); // left small amount of eth on agent balance to emulate PoW. - let agentBalance = await ethers.provider.getBalance(await agent.getAddress()); - await agent.sendTransaction({to: await etherbase.getAddress(), value: agentBalance - smallBalance}); + let agentBalance = await ethers.provider.getBalance(agent); + await agent.sendTransaction({to: etherbase, value: agentBalance - smallBalance}); await messageProxyForSchainWithoutSignature .connect(agent) @@ -1598,7 +1598,7 @@ describe("MessageProxy", () => { randomSignature ); - agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + agentBalance = await ethers.provider.getBalance(agent); agentBalance.should.be.closeTo( await messageProxyForSchainWithoutSignature.MINIMUM_BALANCE(), ethers.parseEther("0.001") @@ -1612,7 +1612,7 @@ describe("MessageProxy", () => { const message1 = { amount: 0, data: "0x11", - destinationContract: await receiverMock.getAddress(), + destinationContract: receiverMock, sender: deployer.address, to: client.address }; @@ -1620,17 +1620,17 @@ describe("MessageProxy", () => { const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchainWithoutSignature.getAddress()); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchainWithoutSignature); - await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", await receiverMock.getAddress()); - await messageProxyForSchainWithoutSignature.setEtherbase(await etherbase.getAddress()); + await messageProxyForSchainWithoutSignature.registerExtraContract("Mainnet", receiverMock); + await messageProxyForSchainWithoutSignature.setEtherbase(etherbase); const etherbaseBalance = ethers.parseEther("0.5"); const smallBalance = ethers.parseEther("0.02"); - let agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + let agentBalance = await ethers.provider.getBalance(agent); const rest = agentBalance - smallBalance - etherbaseBalance; // left small amount of eth on agent balance to emulate PoW. - await agent.sendTransaction({to: await etherbase.getAddress(), value: etherbaseBalance}); + await agent.sendTransaction({to: etherbase, value: etherbaseBalance}); await agent.sendTransaction({to: deployer.address, value: rest}); await messageProxyForSchainWithoutSignature @@ -1642,10 +1642,10 @@ describe("MessageProxy", () => { randomSignature ); - (await ethers.provider.getBalance(await etherbase.getAddress())) + (await ethers.provider.getBalance(etherbase)) .should.be.equal(0); - agentBalance = await ethers.provider.getBalance(await agent.getAddress()); + agentBalance = await ethers.provider.getBalance(agent); agentBalance.should.be.gt(etherbaseBalance); await deployer.sendTransaction({to: agent.address, value: rest}); @@ -1671,7 +1671,7 @@ describe("MessageProxy", () => { expect(await messageProxyForSchain.isContractRegistered(schainHash, messages.getAddress())).to.be.equal(true); expect((await messageProxyForSchain.getContractRegisteredLength(schainHash)).toString()).to.be.equal("2"); expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(await messages.getAddress()); + expect((await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 2))[1]).to.be.equal(messages); await messageProxyForSchain.getContractRegisteredRange(schainHash, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForSchain.getContractRegisteredRange(schainHash, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); @@ -1693,7 +1693,7 @@ describe("MessageProxy", () => { expect(await messageProxyForSchain.isContractRegistered(zeroBytes32, messages.getAddress())).to.be.equal(true); expect((await messageProxyForSchain.getContractRegisteredLength(zeroBytes32)).toString()).to.be.equal("1"); expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1)).length).to.be.equal(1); - expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(await messages.getAddress()); + expect((await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 1))[0]).to.be.equal(messages); await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 0, 11).should.be.eventually.rejectedWith("Range is incorrect"); await messageProxyForSchain.getContractRegisteredRange(zeroBytes32, 1, 0).should.be.eventually.rejectedWith("Range is incorrect"); diff --git a/test/TokenManagerERC1155.ts b/test/TokenManagerERC1155.ts index ff6ecf0b0..fbade719c 100644 --- a/test/TokenManagerERC1155.ts +++ b/test/TokenManagerERC1155.ts @@ -85,23 +85,23 @@ describe("TokenManagerERC1155", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = await messages.getAddress(); - fakeCommunityPool = await messages.getAddress(); + fakeDepositBox = user.address; + fakeCommunityPool = user.address; - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, fakeCommunityPool); tokenManagerERC1155 = await deployTokenManagerERC1155( schainName, - await messageProxyForSchain.getAddress(), + messageProxyForSchain, tokenManagerLinker, communityLocker, fakeDepositBox ); - await tokenManagerLinker.registerTokenManager(await tokenManagerERC1155.getAddress()); + await tokenManagerLinker.registerTokenManager(tokenManagerERC1155); await tokenManagerERC1155.grantRole(await tokenManagerERC1155.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC1155.grantRole(await tokenManagerERC1155.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); @@ -113,16 +113,16 @@ describe("TokenManagerERC1155", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC1155.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC1155); }); it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC1155.depositBox()).to.equal(await messages.getAddress()); + expect(await tokenManagerERC1155.depositBox()).to.equal(fakeDepositBox); await tokenManagerERC1155.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC1155.changeDepositBoxAddress(newDepositBox); @@ -131,19 +131,19 @@ describe("TokenManagerERC1155", () => { it("should successfully call exitToMainERC1155", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) + await tokenManagerERC1155.connect(user).exitToMainERC1155(token, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone); + await tokenManagerERC1155.connect(user).exitToMainERC1155(token, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenClone.connect(deployer).mint(user.address, id, amount, "0x"); - await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount) + await tokenManagerERC1155.connect(user).exitToMainERC1155(token, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenClone.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.connect(user).exitToMainERC1155(await token.getAddress(), id, amount); + await tokenClone.connect(user).setApprovalForAll(tokenManagerERC1155, true); + await tokenManagerERC1155.connect(user).exitToMainERC1155(token, id, amount); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); outgoingMessagesCounterMainnet.should.be.equal(1); @@ -151,37 +151,37 @@ describe("TokenManagerERC1155", () => { it("should successfully call exitToMainERC1155Batch", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone); + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenClone.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts) + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await tokenClone.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); - await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(await token.getAddress(), ids, amounts); + await tokenClone.connect(user).setApprovalForAll(tokenManagerERC1155, true); + await tokenManagerERC1155.connect(user).exitToMainERC1155Batch(token, ids, amounts); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); outgoingMessagesCounterMainnet.should.be.equal(1); }); it("should successfully call addERC1155TokenByOwner", async () => { - await tokenManagerERC1155.connect(user).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC1155.connect(user).addERC1155TokenByOwner(mainnetName, token, tokenClone) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), deployer.address) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token2, tokenClone) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone2) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -201,13 +201,13 @@ describe("TokenManagerERC1155", () => { erc1155OnTargetChain = await deployERC1155OnChain("NewToke1n"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2, newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), await tokenManagerERC11552.getAddress()); - await tokenManagerLinker2.registerTokenManager(await tokenManagerERC11552.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC11552.getAddress()); + communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), tokenManagerERC11552); + await tokenManagerLinker2.registerTokenManager(tokenManagerERC11552); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC11552); }); it("should invoke `transferToSchainERC1155` without mistakes", async () => { @@ -216,24 +216,24 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); // expectation: const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); @@ -246,30 +246,30 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, 5, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, 1) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -279,7 +279,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -288,7 +288,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -297,7 +297,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); @@ -305,7 +305,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -313,7 +313,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -322,7 +322,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, 1); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); @@ -333,27 +333,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -369,18 +369,18 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await messageProxyForSchain2 - .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -392,27 +392,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -428,18 +428,18 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await messageProxyForSchain2 - .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -449,16 +449,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountSum = 81; @@ -472,27 +472,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -510,19 +510,19 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC11552 .connect(schainOwner) - .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()) + .addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC11552 .connect(schainOwner) - .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()) + .addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain) .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -532,16 +532,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountSum = 81; @@ -555,27 +555,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -591,48 +591,48 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -644,27 +644,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -680,45 +680,45 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC11552 .connect(schainOwner) - .addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + .addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); }); @@ -730,27 +730,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -766,66 +766,66 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await messageProxyForSchain2 - .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -835,49 +835,49 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountSum = 81; expect((await targetErc1155OnChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); @@ -889,27 +889,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -925,59 +925,59 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155("Mainnet", await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155("Mainnet", erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -987,49 +987,49 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountSum = 81; expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount2); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount2); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amountSum.toString()); @@ -1041,17 +1041,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -1067,12 +1067,12 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); @@ -1081,30 +1081,30 @@ describe("TokenManagerERC1155", () => { const erc1155OnTargetZChain = await deployERC1155OnChain("NewTokenZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ, newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); const tokenManagerERC1155Z = await deployTokenManagerERC1155( - newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox + newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox ); - await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), await tokenManagerERC1155Z.getAddress()); - await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC1155Z.getAddress()); + await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), tokenManagerERC1155Z); + await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC1155Z); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC11552.addTokenManager(newSchainNameZ, await tokenManagerERC1155Z.getAddress()); + await tokenManagerERC11552.addTokenManager(newSchainNameZ, tokenManagerERC1155Z); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainNameZ, await erc1155OnOriginChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainNameZ, erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(newSchainNameZ, await erc1155OnTargetChain.getAddress(), id, amount) + .transferToSchainERC1155(newSchainNameZ, erc1155OnTargetChain, id, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); @@ -1114,17 +1114,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mint(user.address, id, amount, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155(newSchainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(newSchainName, erc1155OnOriginChain, id, amount); let data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount, @@ -1140,54 +1140,54 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); expect((await erc1155OnTargetChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(communityLocker2, mainnetId, fakeCommunityPool, data); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155(await erc1155OnOriginChain.getAddress(), id, amount) + .exitToMainERC1155(erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155(await erc1155OnTargetChain.getAddress(), id, amount) + .exitToMainERC1155(erc1155OnTargetChain, id, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155(schainName, await erc1155OnOriginChain.getAddress(), id, amount); + .transferToSchainERC1155(schainName, erc1155OnOriginChain, id, amount); data = await messages.encodeTransferErc1155Message( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); expect((await erc1155OnOriginChain.balanceOf(user.address, id)).toString()).to.be.equal(amount.toString()); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155(await erc1155OnOriginChain.getAddress(), id, amount) + .exitToMainERC1155(erc1155OnOriginChain, id, amount) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155(await erc1155OnTargetChain.getAddress(), id, amount) + .exitToMainERC1155(erc1155OnTargetChain, id, amount) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); }); @@ -1210,13 +1210,13 @@ describe("TokenManagerERC1155", () => { erc1155OnTargetChain = await deployERC1155OnChain("NewToke1n"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2, newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), await tokenManagerERC11552.getAddress()); - await tokenManagerLinker2.registerTokenManager(await tokenManagerERC11552.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC11552.getAddress()); + communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC11552 = await deployTokenManagerERC1155(newSchainName, messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc1155OnTargetChain.connect(deployer).grantRole(await erc1155OnTargetChain.MINTER_ROLE(), tokenManagerERC11552); + await tokenManagerLinker2.registerTokenManager(tokenManagerERC11552); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC11552); }); it("should invoke `transferToSchainERC1155` without mistakes", async () => { @@ -1225,24 +1225,24 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); // expectation: const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); @@ -1255,30 +1255,30 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, [5, 5, 5, 5], "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -1288,7 +1288,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -1297,7 +1297,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -1306,7 +1306,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); @@ -1314,7 +1314,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -1322,7 +1322,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -1331,7 +1331,7 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, [1, 1, 1, 1]); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, [1, 1, 1, 1]); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); @@ -1342,27 +1342,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1378,16 +1378,16 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); @@ -1405,27 +1405,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1441,16 +1441,16 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); @@ -1466,16 +1466,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountsSum = [81, 81, 81, 81]; @@ -1494,27 +1494,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1530,15 +1530,15 @@ describe("TokenManagerERC1155", () => { // receive: // registration: - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain).should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()).should.be.eventually.rejectedWith("Chain is not connected"); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain).should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); let balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; @@ -1553,16 +1553,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountsSum = [81, 81, 81, 81]; @@ -1581,27 +1581,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1617,18 +1617,18 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await messageProxyForSchain2 - .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); @@ -1640,33 +1640,33 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -1683,27 +1683,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1719,43 +1719,43 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); const balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; @@ -1773,27 +1773,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -1809,18 +1809,18 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await messageProxyForSchain2 - .postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data) + .postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC11552.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); - const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, await erc1155OnOriginChain.getAddress()); + const addressERC1155OnSchain = await tokenManagerERC11552.clonesErc1155(schainId, erc1155OnOriginChain); const targetErc1155OnChain = await (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; let balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); @@ -1832,33 +1832,33 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -1867,20 +1867,20 @@ describe("TokenManagerERC1155", () => { }); expect(balanceIdsNumber).to.deep.equal(amounts); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); balanceIds = await targetErc1155OnChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -1895,16 +1895,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountsSum = [81, 81, 81, 81]; @@ -1915,20 +1915,20 @@ describe("TokenManagerERC1155", () => { }); expect(balanceIdsNumber).to.deep.equal(amountsSum); - await targetErc1155OnChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await targetErc1155OnChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -1939,16 +1939,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -1965,27 +1965,27 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -2001,43 +2001,43 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch("Mainnet", await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch("Mainnet", erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); let balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; @@ -2046,20 +2046,20 @@ describe("TokenManagerERC1155", () => { }); expect(balanceIdsNumber).to.deep.equal(amounts); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -2074,16 +2074,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const amountsSum = [81, 81, 81, 81]; @@ -2094,20 +2094,20 @@ describe("TokenManagerERC1155", () => { }); expect(balanceIdsNumber).to.deep.equal(amountsSum); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -2118,16 +2118,16 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts2); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts2); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -2144,17 +2144,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -2170,12 +2170,12 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); const balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); const balanceIdsNumber: number[] = []; @@ -2189,28 +2189,28 @@ describe("TokenManagerERC1155", () => { const erc1155OnTargetZChain = await deployERC1155OnChain("NewTokenZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ, newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC1155Z = await deployTokenManagerERC1155(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), await tokenManagerERC1155Z.getAddress()); - await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC1155Z.getAddress()); + const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC1155Z = await deployTokenManagerERC1155(newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + await erc1155OnTargetZChain.connect(deployer).grantRole(await erc1155OnTargetZChain.MINTER_ROLE(), tokenManagerERC1155Z); + await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC1155Z); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC11552.addTokenManager(newSchainNameZ, await tokenManagerERC1155Z.getAddress()); + await tokenManagerERC11552.addTokenManager(newSchainNameZ, tokenManagerERC1155Z); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainNameZ, await erc1155OnOriginChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainNameZ, erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(newSchainNameZ, await erc1155OnTargetChain.getAddress(), ids, amounts) + .transferToSchainERC1155Batch(newSchainNameZ, erc1155OnTargetChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); @@ -2220,17 +2220,17 @@ describe("TokenManagerERC1155", () => { await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc1155OnOriginChain.connect(deployer).mintBatch(user.address, ids, amounts, "0x"); - await erc1155OnOriginChain.connect(user).setApprovalForAll(await tokenManagerERC1155.getAddress(), true); + await erc1155OnOriginChain.connect(user).setApprovalForAll(tokenManagerERC1155, true); - await tokenManagerERC1155.addTokenManager(newSchainName, await tokenManagerERC11552.getAddress()); + await tokenManagerERC1155.addTokenManager(newSchainName, tokenManagerERC11552); // execution: await tokenManagerERC1155 .connect(user) - .transferToSchainERC1155Batch(newSchainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(newSchainName, erc1155OnOriginChain, ids, amounts); let data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts, @@ -2246,12 +2246,12 @@ describe("TokenManagerERC1155", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC11552.addTokenManager(schainName, await tokenManagerERC1155.getAddress()); + await tokenManagerERC11552.addTokenManager(schainName, tokenManagerERC1155); await tokenManagerERC11552.connect(deployer).grantRole(await tokenManagerERC11552.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, await erc1155OnOriginChain.getAddress(), await erc1155OnTargetChain.getAddress()); + await tokenManagerERC11552.connect(schainOwner).addERC1155TokenByOwner(schainName, erc1155OnOriginChain, erc1155OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC11552.getAddress(), schainId, await tokenManagerERC1155.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC11552, schainId, tokenManagerERC1155, data); let balanceIds = await erc1155OnTargetChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); let balanceIdsNumber: number[] = []; @@ -2262,32 +2262,32 @@ describe("TokenManagerERC1155", () => { data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(communityLocker2, mainnetId, fakeCommunityPool, data); - await erc1155OnTargetChain.connect(user).setApprovalForAll(await tokenManagerERC11552.getAddress(), true); + await erc1155OnTargetChain.connect(user).setApprovalForAll(tokenManagerERC11552, true); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155Batch(await erc1155OnOriginChain.getAddress(), ids, amounts) + .exitToMainERC1155Batch(erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); await tokenManagerERC11552 .connect(user) - .exitToMainERC1155Batch(await erc1155OnTargetChain.getAddress(), ids, amounts) + .exitToMainERC1155Batch(erc1155OnTargetChain, ids, amounts) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC11552 .connect(user) - .transferToSchainERC1155Batch(schainName, await erc1155OnOriginChain.getAddress(), ids, amounts); + .transferToSchainERC1155Batch(schainName, erc1155OnOriginChain, ids, amounts); data = await messages.encodeTransferErc1155BatchMessage( - await erc1155OnOriginChain.getAddress(), + erc1155OnOriginChain, user.address, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), newSchainId, await tokenManagerERC11552.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC1155, newSchainId, tokenManagerERC11552, data); balanceIds = await erc1155OnOriginChain.balanceOfBatch([user.address, user.address, user.address, user.address], ids); balanceIdsNumber = []; @@ -2298,12 +2298,12 @@ describe("TokenManagerERC1155", () => { await tokenManagerERC1155 .connect(user) - .exitToMainERC1155Batch(await erc1155OnOriginChain.getAddress(), ids, amounts) + .exitToMainERC1155Batch(erc1155OnOriginChain, ids, amounts) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC1155 .connect(user) - .exitToMainERC1155Batch(await erc1155OnTargetChain.getAddress(), ids, amounts) + .exitToMainERC1155Batch(erc1155OnTargetChain, ids, amounts) .should.be.eventually.rejectedWith("Not allowed ERC1155 Token"); }); @@ -2315,7 +2315,7 @@ describe("TokenManagerERC1155", () => { it("should transfer ERC1155 token through `postMessage` function with token info", async () => { // preparation const data = await messages.encodeTransferErc1155AndTokenInfoMessage( - await token.getAddress(), + token, to, id, amount, @@ -2324,30 +2324,30 @@ describe("TokenManagerERC1155", () => { } ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC1155.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect(await erc1155OnChain.balanceOf(to, id)).to.be.equal(amount); }); it("should transfer ERC1155 token on schain", async () => { // preparation - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC1155.getAddress()); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC1155); const data = await messages.encodeTransferErc1155Message( - await token.getAddress(), + token, to, id, amount ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; expect(await erc1155OnChain.balanceOf(to, id)).to.be.equal(amount); }); @@ -2355,7 +2355,7 @@ describe("TokenManagerERC1155", () => { it("should transfer ERC1155 token batch through `postMessage` function with token info", async () => { // preparation const data = await messages.encodeTransferErc1155BatchAndTokenInfoMessage( - await token.getAddress(), + token, to, ids, amounts, @@ -2364,12 +2364,12 @@ describe("TokenManagerERC1155", () => { } ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC1155.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await erc1155OnChain.balanceOfBatch([to, to, to, to], ids); @@ -2382,18 +2382,18 @@ describe("TokenManagerERC1155", () => { it("should transfer ERC1155 token batch on schain", async () => { // preparation - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC1155.getAddress()); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, token, tokenClone); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC1155); const data = await messages.encodeTransferErc1155BatchMessage( - await token.getAddress(), + token, to, ids, amounts ); - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data); + const addressERC1155OnSchain = await tokenManagerERC1155.clonesErc1155(mainnetId, token); const erc1155OnChain = (await ethers.getContractFactory("ERC1155OnChain")).attach(addressERC1155OnSchain) as ERC1155OnChain; const balanceIds = await erc1155OnChain.balanceOfBatch([to, to, to, to], ids); const balanceIdsNumber: number[] = []; @@ -2408,7 +2408,7 @@ describe("TokenManagerERC1155", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(await tokenManagerERC1155.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC1155, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerERC20.ts b/test/TokenManagerERC20.ts index 92d906c84..b5984d501 100644 --- a/test/TokenManagerERC20.ts +++ b/test/TokenManagerERC20.ts @@ -82,21 +82,21 @@ describe("TokenManagerERC20", () => { erc20OnChain = await deployERC20OnChain("ERC20OnChain", "ERC20"); erc20OnMainnet = await deployERC20OnChain("SKALE", "SKL"); messages = await deployMessages(); - fakeDepositBox = await messages.getAddress(); - fakeCommunityPool = await messages.getAddress(); + fakeDepositBox = user.address; + fakeCommunityPool = user.address; const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); - tokenManagerErc20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, fakeDepositBox); - await erc20OnChain.connect(deployer).grantRole(await erc20OnChain.MINTER_ROLE(), await tokenManagerErc20.getAddress()); - await tokenManagerLinker.registerTokenManager(await tokenManagerErc20.getAddress()); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, fakeCommunityPool); + tokenManagerErc20 = await deployTokenManagerERC20(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, fakeDepositBox); + await erc20OnChain.connect(deployer).grantRole(await erc20OnChain.MINTER_ROLE(), tokenManagerErc20); + await tokenManagerLinker.registerTokenManager(tokenManagerErc20); await tokenManagerErc20.connect(deployer).grantRole(await tokenManagerErc20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerErc20.connect(deployer).grantRole(await tokenManagerErc20.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -128,14 +128,14 @@ describe("TokenManagerERC20", () => { const symbol = "D2"; const totalSupply = 1e9; - const data = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20OnMainnet.getAddress(), to, amount, totalSupply, { name, symbol, decimals: 18 }); - const data2 = await messages.encodeTransferErc20AndTokenInfoMessage(await erc20OnMainnet.getAddress(), to, amount, totalSupply, { name, symbol, decimals: 18 }); + const data = await messages.encodeTransferErc20AndTokenInfoMessage(erc20OnMainnet, to, amount, totalSupply, { name, symbol, decimals: 18 }); + const data2 = await messages.encodeTransferErc20AndTokenInfoMessage(erc20OnMainnet, to, amount, totalSupply, { name, symbol, decimals: 18 }); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); // execution - const receipt = await (await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data)).wait(); + const receipt = await (await messageProxyForSchain.postMessage(tokenManagerErc20, mainnetId, fakeDepositBox, data)).wait(); // TODO: use waffle @@ -147,7 +147,7 @@ describe("TokenManagerERC20", () => { let balance = await newERC20Contract.balanceOf(to); parseInt(balance.toString(), 10).should.be.equal(amount); // expectation - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data2); + await messageProxyForSchain.postMessage(tokenManagerErc20, mainnetId, fakeDepositBox, data2); balance = await newERC20Contract.balanceOf(to); parseInt(balance.toString(), 10).should.be.equal(amount * 2); } @@ -158,19 +158,19 @@ describe("TokenManagerERC20", () => { const error = "Insufficient funds"; const amount = 10; // execution/expectation - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); - await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .exitToMainERC20(await erc20OnMainnet.getAddress(), amount) + .exitToMainERC20(erc20OnMainnet, amount) .should.be.eventually.rejectedWith(error); }); it("should add token by owner", async () => { // preparation - const addressERC20 = await erc20OnChain.getAddress(); - const addressERC201 = await erc20OnMainnet.getAddress(); + const addressERC20 = erc20OnChain; + const addressERC201 = erc20OnMainnet; const automaticDeploy = await tokenManagerErc20.automaticDeploy(); await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, addressERC201, addressERC20); // automaticDeploy == true - enabled automaticDeploy = false - disabled @@ -191,40 +191,36 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.connect(schainOwner).disableAutomaticDeploy(); } - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet2.getAddress(), await eRC20OnChain2.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet2, eRC20OnChain2); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet2.getAddress(), deployer.address) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet2, deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); await eRC20OnChain2.mint(user.address, 1); await eRC20OnChain3.mint(user.address, 1); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet3.getAddress(), addressERC20) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet3, addressERC20) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await eRC20OnMainnet3.getAddress(), await eRC20OnChain3.getAddress()) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, eRC20OnMainnet3, eRC20OnChain3) .should.be.eventually.rejectedWith("Total supply of a new token is not zero"); }); describe("when token added by owner", async () => { const mainnetChainHash = ethers.id(mainnetName); - let erc20OnSchainTokenAddress: string; - let erc20OnOriginChainTokenAddress: string; beforeEach(async () => { - erc20OnSchainTokenAddress = await erc20OnChain.getAddress(); - erc20OnOriginChainTokenAddress = await erc20OnMainnet.getAddress(); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, erc20OnSchainTokenAddress); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); }) it("should successfully relink if new token was not minted", async () => { const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnSchainPostToken); - await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(await erc20OnSchainPostToken.getAddress()); - await tokenManagerErc20.addedClones(await erc20OnSchainPostToken.getAddress()).should.be.eventually.equal(true); + await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnMainnet).should.be.eventually.equal(erc20OnSchainPostToken); + await tokenManagerErc20.addedClones(erc20OnSchainPostToken).should.be.eventually.equal(true); }); it("should successfully relink if previous token on target chain was minted and then fully burned before relinking to new", async () => { @@ -232,17 +228,17 @@ describe("TokenManagerERC20", () => { await erc20OnChain.connect(user).burn(1); const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnSchainPostToken); - await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnOriginChainTokenAddress).should.be.eventually.equal(await erc20OnSchainPostToken.getAddress()); - await tokenManagerErc20.addedClones(await erc20OnSchainPostToken.getAddress()).should.be.eventually.equal(true); + await tokenManagerErc20.clonesErc20(mainnetChainHash, erc20OnMainnet).should.be.eventually.equal(erc20OnSchainPostToken); + await tokenManagerErc20.addedClones(erc20OnSchainPostToken).should.be.eventually.equal(true); }); it("should reject new relinking if previous token was already minted", async () => { await erc20OnChain.mint(user.address, 1); const erc20OnSchainPostToken = await deployERC20OnChain("SchainPostToken", "SPT"); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnOriginChainTokenAddress, await erc20OnSchainPostToken.getAddress()) + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnSchainPostToken) .should.be.eventually.rejectedWith("Total supply of a previous token is not zero") }); @@ -251,32 +247,32 @@ describe("TokenManagerERC20", () => { it("should reject with `Transfer is not approved by token holder` when invoke `exitToMainERC20`", async () => { const error = "Transfer is not approved by token holder"; const amount = 20; - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); // invoke `grantRole` before `sendERC20` to avoid `MinterRole: caller does not have the Minter role` exception const minterRole = await erc20OnChain.MINTER_ROLE(); await erc20OnChain.mint(user.address, amount * 2); - await erc20OnChain.connect(deployer).grantRole(minterRole, await tokenManagerErc20.getAddress()); + await erc20OnChain.connect(deployer).grantRole(minterRole, tokenManagerErc20); // - await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount / 2); + await erc20OnChain.connect(user).approve(tokenManagerErc20, amount / 2); // execution/expectation - await tokenManagerErc20.connect(user).exitToMainERC20(await erc20OnMainnet.getAddress(), amount) + await tokenManagerErc20.connect(user).exitToMainERC20(erc20OnMainnet, amount) .should.be.eventually.rejectedWith(error); }); it("should invoke `exitToMainERC20` without mistakes", async () => { const amountMint = "10000000000000000"; const amountReduceCost = "8000000000000000"; - await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerErc20.getAddress()); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerErc20); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); await erc20OnChain.connect(deployer).mint(user.address, amountMint); - await erc20OnChain.connect(user).approve(await tokenManagerErc20.getAddress(), amountMint); + await erc20OnChain.connect(user).approve(tokenManagerErc20, amountMint); // execution: await tokenManagerErc20 .connect(user) - .exitToMainERC20(await erc20OnMainnet.getAddress(), amountReduceCost); + .exitToMainERC20(erc20OnMainnet, amountReduceCost); // // expectation: const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); @@ -299,41 +295,41 @@ describe("TokenManagerERC20", () => { erc20OnTargetChain = await deployERC20OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2, newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); - tokenManagerErc202 = await deployTokenManagerERC20(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc20OnTargetChain.connect(deployer).grantRole(await erc20OnTargetChain.MINTER_ROLE(), await tokenManagerErc202.getAddress()); - await tokenManagerLinker2.registerTokenManager(await tokenManagerErc202.getAddress()); + communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); + tokenManagerErc202 = await deployTokenManagerERC20(newSchainName, messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox); + await erc20OnTargetChain.connect(deployer).grantRole(await erc20OnTargetChain.MINTER_ROLE(), tokenManagerErc202); + await tokenManagerLinker2.registerTokenManager(tokenManagerErc202); }); it("should invoke `transferToSchainERC20` without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); // expectation: const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); @@ -342,39 +338,39 @@ describe("TokenManagerERC20", () => { it("should reject `transferToSchainERC20` when executing earlier than allowed", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -383,11 +379,11 @@ describe("TokenManagerERC20", () => { await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -396,7 +392,7 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -405,29 +401,29 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -436,41 +432,41 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC20` and receive tokens without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -488,19 +484,19 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await messageProxyForSchain2 - .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); @@ -508,35 +504,35 @@ describe("TokenManagerERC20", () => { it("should invoke `transferToSchainERC20` and receive tokens without mistakes back and forward twice", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -554,38 +550,38 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await messageProxyForSchain2 - .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); const amountSum = "70000000000000000"; @@ -595,35 +591,35 @@ describe("TokenManagerERC20", () => { it("should invoke `transferToSchainERC20` and receive tokens without mistakes double with attached token", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -643,41 +639,41 @@ describe("TokenManagerERC20", () => { await tokenManagerErc202 .connect(schainOwner) - .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()) + .addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerErc202 .connect(schainOwner) - .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()) + .addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain) .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); await tokenManagerErc202 .connect(schainOwner) - .addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + .addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); const amountSum = "70000000000000000"; @@ -687,35 +683,35 @@ describe("TokenManagerERC20", () => { it("should invoke `transferToSchainERC20` and transfer back without mistakes", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -733,84 +729,84 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await messageProxyForSchain2 - .postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data) + .postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(schainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await targetErc20OnChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); }); it("should invoke `transferToSchainERC20` and transfer back without mistakes with attached tokens", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -828,42 +824,42 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(schainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); }); @@ -871,35 +867,35 @@ describe("TokenManagerERC20", () => { it("should invoke `transferToSchainERC20` and transfer back without mistakes double", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -917,116 +913,116 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc202.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); - const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, await erc20OnOriginChain.getAddress()); + const addressERC20OnSchain = await tokenManagerErc202.clonesErc20(schainId, erc20OnOriginChain); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(schainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await targetErc20OnChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); const amountSum = "70000000000000000"; expect((await targetErc20OnChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); - await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await targetErc20OnChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await targetErc20OnChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount2); + await targetErc20OnChain.connect(user).approve(tokenManagerErc202, amount2); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2 ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); @@ -1034,35 +1030,35 @@ describe("TokenManagerERC20", () => { it("should invoke `transferToSchainERC20` and transfer back without mistakes double with attached tokens", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc20 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -1080,111 +1076,111 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20("Mainnet", await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20("Mainnet", erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(schainName, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Transfer is not approved by token holder"); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); const amount2 = "50000000000000000"; await erc20OnOriginChain.connect(deployer).mint(user.address, amount2); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount2); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount2); await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2, (await erc20OnOriginChain.totalSupply()).toString() ); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); const amountSum = "70000000000000000"; expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount2); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount2); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount2); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount2); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount2 ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amountSum); @@ -1192,24 +1188,24 @@ describe("TokenManagerERC20", () => { it("should not be able to transfer X->Y->Z", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerErc20); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -1227,13 +1223,13 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); @@ -1242,52 +1238,52 @@ describe("TokenManagerERC20", () => { const erc20OnTargetZChain = await deployERC20OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ, newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerErc20Z = await deployTokenManagerERC20(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerErc20Z = await deployTokenManagerERC20(newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); await erc20OnTargetZChain.connect(deployer).grantRole(await erc20OnTargetZChain.MINTER_ROLE(), await tokenManagerErc20Z.getAddress()); await tokenManagerLinkerZ.registerTokenManager(await tokenManagerErc20Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerErc202.addTokenManager(newSchainNameZ, await tokenManagerErc20Z.getAddress()); + await tokenManagerErc202.addTokenManager(newSchainNameZ, tokenManagerErc20Z); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainNameZ, await erc20OnOriginChain.getAddress(), amount) + .transferToSchainERC20(newSchainNameZ, erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Insufficient funds"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(newSchainNameZ, await erc20OnTargetChain.getAddress(), amount) + .transferToSchainERC20(newSchainNameZ, erc20OnTargetChain, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { const amount = "20000000000000000"; - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerErc202.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerErc202); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc20OnOriginChain.connect(deployer).mint(user.address, amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); - await tokenManagerErc20.addTokenManager(newSchainName, await tokenManagerErc202.getAddress()); + await tokenManagerErc20.addTokenManager(newSchainName, tokenManagerErc202); // execution: await tokenManagerErc20 .connect(user) - .transferToSchainERC20(newSchainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(newSchainName, erc20OnOriginChain, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount, (await erc20OnOriginChain.totalSupply()).toString(), @@ -1305,55 +1301,55 @@ describe("TokenManagerERC20", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerErc202.addTokenManager(schainName, await tokenManagerErc20.getAddress()); + await tokenManagerErc202.addTokenManager(schainName, tokenManagerErc20); await tokenManagerErc202.connect(deployer).grantRole(await tokenManagerErc202.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, await erc20OnOriginChain.getAddress(), await erc20OnTargetChain.getAddress()); + await tokenManagerErc202.connect(schainOwner).addERC20TokenByOwner(schainName, erc20OnOriginChain, erc20OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerErc202.getAddress(), schainId, await tokenManagerErc20.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerErc202, schainId, tokenManagerErc20, data); expect((await erc20OnTargetChain.balanceOf(user.address)).toString()).to.be.equal(amount); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(communityLocker2, mainnetId, fakeCommunityPool, data); - await erc20OnTargetChain.connect(user).approve(await tokenManagerErc202.getAddress(), amount); + await erc20OnTargetChain.connect(user).approve(tokenManagerErc202, amount); await tokenManagerErc202 .connect(user) - .exitToMainERC20(await erc20OnOriginChain.getAddress(), amount) + .exitToMainERC20(erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Insufficient funds"); await tokenManagerErc202 .connect(user) - .exitToMainERC20(await erc20OnTargetChain.getAddress(), amount) + .exitToMainERC20(erc20OnTargetChain, amount) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerErc202 .connect(user) - .transferToSchainERC20(schainName, await erc20OnOriginChain.getAddress(), amount); + .transferToSchainERC20(schainName, erc20OnOriginChain, amount); data = await messages.encodeTransferErc20Message( - await erc20OnOriginChain.getAddress(), + erc20OnOriginChain, user.address, amount ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), newSchainId, await tokenManagerErc202.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerErc20, newSchainId, tokenManagerErc202, data); expect((await erc20OnOriginChain.balanceOf(user.address)).toString()).to.be.equal(amount); - await erc20OnOriginChain.connect(user).approve(await tokenManagerErc20.getAddress(), amount); + await erc20OnOriginChain.connect(user).approve(tokenManagerErc20, amount); await tokenManagerErc20 .connect(user) - .exitToMainERC20(await erc20OnOriginChain.getAddress(), amount) + .exitToMainERC20(erc20OnOriginChain, amount) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerErc20 .connect(user) - .exitToMainERC20(await erc20OnTargetChain.getAddress(), amount) + .exitToMainERC20(erc20OnTargetChain, amount) .should.be.eventually.rejectedWith("Insufficient funds"); }); @@ -1362,7 +1358,7 @@ describe("TokenManagerERC20", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerErc20.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerErc20); }); it("should transfer ERC20 token with token info", async () => { @@ -1373,11 +1369,11 @@ describe("TokenManagerERC20", () => { const fromSchainName = "fromSchainName"; const fromSchainHash = ethers.id(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - // await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + // await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, to, amount, await erc20OnMainnet.totalSupply(), @@ -1390,9 +1386,9 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(tokenManagerErc20, fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); @@ -1405,13 +1401,13 @@ describe("TokenManagerERC20", () => { const fromSchainHash = ethers.id(fromSchainName); await messageProxyForSchain.connect(deployer).addConnectedChain(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(fromSchainName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(fromSchainName, erc20OnMainnet, erc20OnChain); const amount = 10; const to = user.address; await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, to, amount, await erc20OnMainnet.totalSupply() @@ -1419,9 +1415,9 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(tokenManagerErc20, fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); @@ -1438,7 +1434,7 @@ describe("TokenManagerERC20", () => { const to = user.address; await erc20OnMainnet.mint(deployer.address, amount); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, to, amount, await erc20OnMainnet.totalSupply(), @@ -1449,16 +1445,16 @@ describe("TokenManagerERC20", () => { } ); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data) + await messageProxyForSchain.postMessage(tokenManagerErc20, fromSchainHash, remoteTokenManagerAddress, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); // execution - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(tokenManagerErc20, fromSchainHash, remoteTokenManagerAddress, data); // expectation - const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, await erc20OnMainnet.getAddress()); + const addressERC20OnSchain = await tokenManagerErc20.clonesErc20(fromSchainHash, erc20OnMainnet); const targetErc20OnChain = (await ethers.getContractFactory("ERC20OnChain")).attach(addressERC20OnSchain) as ERC20OnChain; expect(parseInt((await targetErc20OnChain.balanceOf(to)).toString(), 10)) .to.be.equal(amount); @@ -1469,7 +1465,7 @@ describe("TokenManagerERC20", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerErc20, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); @@ -1482,11 +1478,11 @@ describe("TokenManagerERC20", () => { const fromSchainName = "fromSchainName"; const fromSchainHash = ethers.id(fromSchainName); await tokenManagerErc20.addTokenManager(fromSchainName, remoteTokenManagerAddress); - await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await erc20OnMainnet.getAddress(), await erc20OnChain.getAddress()); + await tokenManagerErc20.connect(schainOwner).addERC20TokenByOwner(mainnetName, erc20OnMainnet, erc20OnChain); await erc20OnMainnet.mint(deployer.address, amount); let data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, to, amount, await erc20OnMainnet.totalSupply(), @@ -1497,18 +1493,18 @@ describe("TokenManagerERC20", () => { } ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), fromSchainHash, remoteTokenManagerAddress, data); + await messageProxyForSchain.postMessage(tokenManagerErc20, fromSchainHash, remoteTokenManagerAddress, data); // execution const UINT256_MAX = BigInt(2 ^ 256 - 1); data = await messages.encodeTransferErc20AndTotalSupplyMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, to, UINT256_MAX, 0); - await messageProxyForSchain.postMessage(await tokenManagerErc20.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerErc20, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Total supply exceeded"); }); @@ -1521,15 +1517,15 @@ describe("TokenManagerERC20", () => { await tokenManagerErc20.addTokenManager(sourceSchainName, remoteTokenManager.address); const etherbase = await (await ethers.getContractFactory("EtherbaseMock")).deploy() as EtherbaseMock; await etherbase.initialize(deployer.address); - await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), await messageProxyForSchain.getAddress()); - await messageProxyForSchain.setEtherbase(await etherbase.getAddress()); - await deployer.sendTransaction({to: await etherbase.getAddress(), value: ethers.parseEther("3")}); + await etherbase.grantRole(await etherbase.ETHER_MANAGER_ROLE(), messageProxyForSchain); + await messageProxyForSchain.setEtherbase(etherbase); + await deployer.sendTransaction({to: etherbase, value: ethers.parseEther("3")}); let receiverBalance = await ethers.provider.getBalance(receiver.address); (receiverBalance).should.be.equal(0); const data = await messages.encodeTransferErc20AndTokenInfoMessage( - await erc20OnMainnet.getAddress(), + erc20OnMainnet, receiver.address, amount, 2 * amount, @@ -1541,7 +1537,7 @@ describe("TokenManagerERC20", () => { ); await tokenManagerErc20.connect(schainOwner).enableAutomaticDeploy(); await messageProxyForSchain.postMessage( - await tokenManagerErc20.getAddress(), + tokenManagerErc20, sourceSchainHash, remoteTokenManager.address, data); @@ -1553,7 +1549,7 @@ describe("TokenManagerERC20", () => { .withArgs(0, ethers.parseEther("2")); await messageProxyForSchain.postMessage( - await tokenManagerErc20.getAddress(), + tokenManagerErc20, sourceSchainHash, remoteTokenManager.address, data); diff --git a/test/TokenManagerERC721.ts b/test/TokenManagerERC721.ts index d09352c0d..f408f4d80 100644 --- a/test/TokenManagerERC721.ts +++ b/test/TokenManagerERC721.ts @@ -81,25 +81,25 @@ describe("TokenManagerERC721", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = await messages.getAddress(); - fakeCommunityPool = await messages.getAddress(); + fakeDepositBox = user.address; + fakeCommunityPool = user.address; - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, fakeCommunityPool); tokenManagerERC721 = await deployTokenManagerERC721( schainName, - await messageProxyForSchain.getAddress(), + messageProxyForSchain, tokenManagerLinker, communityLocker, fakeDepositBox ); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); - await tokenManagerLinker.registerTokenManager(await tokenManagerERC721.getAddress()); + await tokenManagerLinker.registerTokenManager(tokenManagerERC721); tokenClone = await deployERC721OnChain("ELVIS", "ELV"); token = await deployERC721OnChain("SKALE", "SKL"); @@ -109,7 +109,7 @@ describe("TokenManagerERC721", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -120,7 +120,7 @@ describe("TokenManagerERC721", () => { it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC721.depositBox()).to.equal(await messages.getAddress()); + expect(await tokenManagerERC721.depositBox()).to.equal(fakeDepositBox); await tokenManagerERC721.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC721.connect(deployer).changeDepositBoxAddress(newDepositBox); @@ -129,29 +129,29 @@ describe("TokenManagerERC721", () => { it("should successfully call exitToMainERC721", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenClone.connect(user).approve(tokenManagerERC721, tokenId); + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerERC721.getAddress()); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId); + await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerERC721); + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId); - await messageProxyForSchain.removeExtraContract("Mainnet", await tokenManagerERC721.getAddress()); + await messageProxyForSchain.removeExtraContract("Mainnet", tokenManagerERC721); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await tokenClone.connect(user).approve(tokenManagerERC721, tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); @@ -159,18 +159,18 @@ describe("TokenManagerERC721", () => { }); it("should be rejected when call exitToMainERC721 if remove contract for all chains", async () => { - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await tokenClone.connect(user).approve(tokenManagerERC721, tokenId); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId); + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId); - await messageProxyForSchain.removeExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.removeExtraContractForAll(tokenManagerERC721); await tokenClone.connect(deployer).mint(user.address, tokenId); - await tokenClone.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await tokenClone.connect(user).approve(tokenManagerERC721, tokenId); - await tokenManagerERC721.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); @@ -178,18 +178,18 @@ describe("TokenManagerERC721", () => { }); it("should successfully call addERC721TokenByOwner", async () => { - await tokenManagerERC721.connect(user).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC721.connect(user).addERC721TokenByOwner(mainnetName, token, tokenClone) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), deployer.address) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token2, tokenClone) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone2) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -209,41 +209,41 @@ describe("TokenManagerERC721", () => { erc721OnTargetChain = await deployERC721OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2, newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); - tokenManagerERC7212 = await deployTokenManagerERC721(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, communityLocker2, fakeDepositBox); + communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); + tokenManagerERC7212 = await deployTokenManagerERC721(newSchainName, messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox); await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), await tokenManagerERC7212.getAddress()); await tokenManagerLinker2.registerTokenManager(await tokenManagerERC7212.getAddress()); await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC7212.getAddress()); }); it("should invoke `transferToSchainERC721` without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); // expectation: const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); @@ -251,39 +251,39 @@ describe("TokenManagerERC721", () => { }); it("should reject `transferToSchainERC721` when executing earlier then allowed", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, 1); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 1); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, 1); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), 1) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc721OnOriginChain.connect(deployer).mint(user.address, 2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, 2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 2); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -292,11 +292,11 @@ describe("TokenManagerERC721", () => { await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 3); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 3); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, 3); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -305,7 +305,7 @@ describe("TokenManagerERC721", () => { await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -314,29 +314,29 @@ describe("TokenManagerERC721", () => { await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc721OnOriginChain.connect(deployer).mint(user.address, 4); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 4); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, 4); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 4); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 4); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 5); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), 5); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, 5); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 5) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -345,40 +345,40 @@ describe("TokenManagerERC721", () => { await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 5); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); const data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -394,52 +394,52 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); await messageProxyForSchain2 - .postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data) + .postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -455,35 +455,35 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); @@ -491,34 +491,34 @@ describe("TokenManagerERC721", () => { }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double with attached token", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -536,38 +536,38 @@ describe("TokenManagerERC721", () => { await tokenManagerERC7212 .connect(schainOwner) - .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC7212 .connect(schainOwner) - .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain) .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); @@ -575,34 +575,34 @@ describe("TokenManagerERC721", () => { }); it("should invoke `transferToSchainERC721` and transfer back without mistakes", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -618,80 +618,80 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -707,76 +707,76 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -792,113 +792,113 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC7212.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); - const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC7212.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId2); + await targetErc721OnChain.connect(user).approve(tokenManagerERC7212, tokenId2); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); @@ -906,34 +906,34 @@ describe("TokenManagerERC721", () => { }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -949,132 +949,132 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); const tokenId2 = 2; await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId2); await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId2); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId2); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); }); it("should not be able to transfer X->Y->Z", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); const data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -1090,12 +1090,12 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); @@ -1104,50 +1104,50 @@ describe("TokenManagerERC721", () => { const erc721OnTargetZChain = await deployERC721OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ, newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); - const tokenManagerERC721Z = await deployTokenManagerERC721(newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); + const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); + const tokenManagerERC721Z = await deployTokenManagerERC721(newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), await tokenManagerERC721Z.getAddress()); await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC721Z.getAddress()); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC7212.addTokenManager(newSchainNameZ, await tokenManagerERC721Z.getAddress()); + await tokenManagerERC7212.addTokenManager(newSchainNameZ, tokenManagerERC721Z); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainNameZ, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainNameZ, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(newSchainNameZ, await erc721OnTargetChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainNameZ, erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); - await tokenManagerERC721.addTokenManager(newSchainName, await tokenManagerERC7212.getAddress()); + await tokenManagerERC721.addTokenManager(newSchainName, tokenManagerERC7212); // execution: await tokenManagerERC721 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721AndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, { @@ -1163,54 +1163,54 @@ describe("TokenManagerERC721", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC7212.addTokenManager(schainName, await tokenManagerERC721.getAddress()); + await tokenManagerERC7212.addTokenManager(schainName, tokenManagerERC721); await tokenManagerERC7212.connect(deployer).grantRole(await tokenManagerERC7212.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC7212.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC7212.getAddress(), schainId, await tokenManagerERC721.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC7212, schainId, tokenManagerERC721, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(communityLocker2, mainnetId, fakeCommunityPool, data); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC7212.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC7212, tokenId); await tokenManagerERC7212 .connect(user) - .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC7212 .connect(user) - .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC7212 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721Message( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), newSchainId, await tokenManagerERC7212.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721, newSchainId, tokenManagerERC7212, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721, tokenId); await tokenManagerERC721 .connect(user) - .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC721 .connect(user) - .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); }); @@ -1219,13 +1219,13 @@ describe("TokenManagerERC721", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721); }); it("should transfer ERC721 token token with token info", async () => { // preparation const data = await messages.encodeTransferErc721AndTokenInfoMessage( - await token.getAddress(), + token, to, tokenId, { @@ -1234,29 +1234,29 @@ describe("TokenManagerERC721", () => { } ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC721, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC721, mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, token); const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); }); it("should transfer ERC721 token on schain", async () => { // preparation - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC721.getAddress()); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC721); const data = await messages.encodeTransferErc721Message( - await token.getAddress(), + token, to, tokenId ); - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC721, mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721.clonesErc721(mainnetId, token); const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); }); @@ -1266,7 +1266,7 @@ describe("TokenManagerERC721", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(await tokenManagerERC721.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC721, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerERC721WithMetadata.ts b/test/TokenManagerERC721WithMetadata.ts index 08610aad1..a886f8e73 100644 --- a/test/TokenManagerERC721WithMetadata.ts +++ b/test/TokenManagerERC721WithMetadata.ts @@ -83,25 +83,25 @@ describe("TokenManagerERC721WithMetadata", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); messages = await deployMessages(); - fakeDepositBox = await messages.getAddress(); - fakeCommunityPool = await messages.getAddress(); + fakeDepositBox = user.address; + fakeCommunityPool = user.address; - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, fakeCommunityPool); tokenManagerERC721WithMetadata = await deployTokenManagerERC721WithMetadata( schainName, - await messageProxyForSchain.getAddress(), + messageProxyForSchain, tokenManagerLinker, communityLocker, fakeDepositBox ); await tokenManagerERC721WithMetadata.connect(deployer).grantRole(await tokenManagerERC721WithMetadata.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721WithMetadata.connect(deployer).grantRole(await tokenManagerERC721WithMetadata.AUTOMATIC_DEPLOY_ROLE(), schainOwner.address); - await tokenManagerLinker.registerTokenManager(await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerLinker.registerTokenManager(tokenManagerERC721WithMetadata); tokenClone = await deployERC721OnChain("ELVIS", "ELV"); token = await deployERC721OnChain("SKALE", "SKL"); @@ -111,7 +111,7 @@ describe("TokenManagerERC721WithMetadata", () => { to = user.address; const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetId, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); @@ -122,7 +122,7 @@ describe("TokenManagerERC721WithMetadata", () => { it("should change depositBox address", async () => { const newDepositBox = user.address; - expect(await tokenManagerERC721WithMetadata.depositBox()).to.equal(await messages.getAddress()); + expect(await tokenManagerERC721WithMetadata.depositBox()).to.equal(fakeDepositBox); await tokenManagerERC721WithMetadata.connect(user).changeDepositBoxAddress(newDepositBox) .should.be.eventually.rejectedWith("DEFAULT_ADMIN_ROLE is required"); await tokenManagerERC721WithMetadata.connect(deployer).changeDepositBoxAddress(newDepositBox); @@ -131,31 +131,31 @@ describe("TokenManagerERC721WithMetadata", () => { it("should successfully call exitToMainERC721", async () => { // should be "No token clone on schain" if chains were different - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); - await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerERC721WithMetadata.getAddress()); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId); + await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerERC721WithMetadata); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId); - await messageProxyForSchain.removeExtraContract("Mainnet", await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.removeExtraContract("Mainnet", tokenManagerERC721WithMetadata); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); @@ -163,20 +163,20 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should be rejected when call exitToMainERC721 if remove contract for all chains", async () => { - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId); + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId); - await messageProxyForSchain.removeExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.removeExtraContractForAll(tokenManagerERC721WithMetadata); await tokenClone.connect(deployer).mint(user.address, tokenId); await tokenClone.connect(user).setTokenURI(tokenId, tokenURI); - await tokenClone.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await tokenClone.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); - await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(await token.getAddress(), tokenId) + await tokenManagerERC721WithMetadata.connect(user).exitToMainERC721(token, tokenId) .should.be.eventually.rejectedWith("Sender contract is not registered"); const outgoingMessagesCounterMainnet = await messageProxyForSchain.getOutgoingMessagesCounter("Mainnet"); @@ -184,18 +184,18 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should successfully call addERC721TokenByOwner", async () => { - await tokenManagerERC721WithMetadata.connect(user).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC721WithMetadata.connect(user).addERC721TokenByOwner(mainnetName, token, tokenClone) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), deployer.address) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, deployer.address) .should.be.eventually.rejectedWith("Given address is not a contract"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token2.getAddress(), await tokenClone.getAddress()) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token2, tokenClone) .should.be.eventually.rejectedWith("Clone was already added"); - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone2.getAddress()) + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone2) .should.be.eventually.rejectedWith("Could not relink clone"); }); @@ -215,23 +215,23 @@ describe("TokenManagerERC721WithMetadata", () => { erc721OnTargetChain = await deployERC721OnChain("NewToke1n", "NTN1"); const keyStorage2 = await deployKeyStorageMock(); - messageProxyForSchain2 = await deployMessageProxyForSchainTester(await keyStorage2.getAddress(), newSchainName); + messageProxyForSchain2 = await deployMessageProxyForSchainTester(keyStorage2, newSchainName); tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); - communityLocker2 = await deployCommunityLocker(newSchainName, await messageProxyForSchain2.getAddress(), tokenManagerLinker2, fakeCommunityPool); + communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); tokenManagerERC721WithMetadata2 = await deployTokenManagerERC721WithMetadata( newSchainName, - await messageProxyForSchain2.getAddress(), + messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox ); - await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), await tokenManagerERC721WithMetadata2.getAddress()); - await tokenManagerLinker2.registerTokenManager(await tokenManagerERC721WithMetadata2.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC721WithMetadata2.getAddress()); + await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), tokenManagerERC721WithMetadata2); + await tokenManagerLinker2.registerTokenManager(tokenManagerERC721WithMetadata2); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC721WithMetadata2); }); it("should invoke `transferToSchainERC721` without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -239,24 +239,24 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); // expectation: const outgoingMessagesCounter = await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName); @@ -264,39 +264,39 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should reject `transferToSchainERC721` when executing earlier then allowed", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain.connect(deployer).addConnectedChain(newSchainName); await erc721OnOriginChain.connect(deployer).mint(user.address, 1); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 1); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, 1); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 1) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), 1) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, 1) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 1); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 1); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(1); await erc721OnOriginChain.connect(deployer).mint(user.address, 2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, 2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 2); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -305,11 +305,11 @@ describe("TokenManagerERC721WithMetadata", () => { await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 3); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 3); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, 3); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -318,7 +318,7 @@ describe("TokenManagerERC721WithMetadata", () => { await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(2); @@ -327,29 +327,29 @@ describe("TokenManagerERC721WithMetadata", () => { await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 3); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 3); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(3); await communityLocker.setTimeLimitPerMessage(newSchainName, 0); await erc721OnOriginChain.connect(deployer).mint(user.address, 4); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 4); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, 4); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 4); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 4); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); await communityLocker.setTimeLimitPerMessage(newSchainName, 100); await erc721OnOriginChain.connect(deployer).mint(user.address, 5); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), 5); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, 5); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 5) .should.be.eventually.rejectedWith("Exceeded message rate limit"); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(4); @@ -358,13 +358,13 @@ describe("TokenManagerERC721WithMetadata", () => { await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), 5); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, 5); (await messageProxyForSchain.getOutgoingMessagesCounter(newSchainName)).should.be.equal(5); }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -372,27 +372,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -409,16 +409,16 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -426,7 +426,7 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -434,27 +434,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -471,16 +471,16 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -490,20 +490,20 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -513,7 +513,7 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should invoke `transferToSchainERC721` and receive tokens without mistakes double with attached token", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -521,27 +521,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -560,21 +560,21 @@ describe("TokenManagerERC721WithMetadata", () => { await tokenManagerERC721WithMetadata2 .connect(schainOwner) - .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain) .should.be.eventually.rejectedWith("TOKEN_REGISTRAR_ROLE is required"); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721WithMetadata2 .connect(schainOwner) - .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()) + .addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain) .should.be.eventually.rejectedWith("Chain is not connected"); await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); await tokenManagerERC721WithMetadata2 .connect(schainOwner) - .addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + .addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -584,20 +584,20 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -607,7 +607,7 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should invoke `transferToSchainERC721` and transfer back without mistakes", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -615,27 +615,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -652,56 +652,56 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); }); it("should invoke `transferToSchainERC721` and transfer back without mistakes with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -709,27 +709,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -746,43 +746,43 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -790,7 +790,7 @@ describe("TokenManagerERC721WithMetadata", () => { it("should invoke `transferToSchainERC721` and transfer back without mistakes double", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -798,27 +798,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -835,66 +835,66 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data).should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata2.enableAutomaticDeploy(); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, await erc721OnOriginChain.getAddress()); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata2.clonesErc721(schainId, erc721OnOriginChain); const targetErc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -904,57 +904,57 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await targetErc721OnChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); expect((await targetErc721OnChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); expect((await targetErc721OnChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await targetErc721OnChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId2); + await targetErc721OnChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId2); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -964,7 +964,7 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should invoke `transferToSchainERC721` and transfer back without mistakes double with attached tokens", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -972,27 +972,27 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -1009,60 +1009,60 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Incorrect Token Manager address"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721("Mainnet", await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721("Mainnet", erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("This function is not for transferring to Mainnet"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -1072,57 +1072,57 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId2); await erc721OnOriginChain.connect(user).setTokenURI(tokenId2, tokenURI2); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId2); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId2); await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); expect((await erc721OnTargetChain.ownerOf(tokenId2)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId2)).toString()).to.be.equal(tokenURI2); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId2); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId2); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId2); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId2); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId2, tokenURI2 ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -1131,7 +1131,7 @@ describe("TokenManagerERC721WithMetadata", () => { }); it("should not be able to transfer X->Y->Z", async () => { - await messageProxyForSchain.registerExtraContract(newSchainName, await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContract(newSchainName, tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -1139,17 +1139,17 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -1166,12 +1166,12 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); @@ -1181,35 +1181,35 @@ describe("TokenManagerERC721WithMetadata", () => { const erc721OnTargetZChain = await deployERC721OnChain("NewTokenZ", "NTNZ"); const keyStorageZ = await deployKeyStorageMock(); - const messageProxyForSchainZ = await deployMessageProxyForSchainTester(await keyStorageZ.getAddress(), newSchainNameZ); + const messageProxyForSchainZ = await deployMessageProxyForSchainTester(keyStorageZ, newSchainNameZ); const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); - const communityLockerZ = await deployCommunityLocker(newSchainName, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, fakeCommunityPool); + const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); const tokenManagerERC721WithMetadataZ = await deployTokenManagerERC721WithMetadata( - newSchainNameZ, await messageProxyForSchainZ.getAddress(), tokenManagerLinkerZ, communityLockerZ, fakeDepositBox + newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox ); - await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), await tokenManagerERC721WithMetadataZ.getAddress()); - await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC721WithMetadataZ.getAddress()); + await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), tokenManagerERC721WithMetadataZ); + await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC721WithMetadataZ); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); - await tokenManagerERC721WithMetadata2.addTokenManager(newSchainNameZ, await tokenManagerERC721WithMetadataZ.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(newSchainNameZ, tokenManagerERC721WithMetadataZ); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainNameZ, await erc721OnOriginChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainNameZ, erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(newSchainNameZ, await erc721OnTargetChain.getAddress(), tokenId) + .transferToSchainERC721(newSchainNameZ, erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); }); it("should not be able to transfer main chain token or clone to mainnet", async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); // add connected chain: await messageProxyForSchain.connect(deployer).grantRole(await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(), deployer.address); @@ -1217,17 +1217,17 @@ describe("TokenManagerERC721WithMetadata", () => { await erc721OnOriginChain.connect(deployer).mint(user.address, tokenId); await erc721OnOriginChain.connect(user).setTokenURI(tokenId, tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); - await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, await tokenManagerERC721WithMetadata2.getAddress()); + await tokenManagerERC721WithMetadata.addTokenManager(newSchainName, tokenManagerERC721WithMetadata2); // execution: await tokenManagerERC721WithMetadata .connect(user) - .transferToSchainERC721(newSchainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(newSchainName, erc721OnOriginChain, tokenId); let data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI, @@ -1244,57 +1244,57 @@ describe("TokenManagerERC721WithMetadata", () => { // receive: // registration: await messageProxyForSchain2.connect(deployer).addConnectedChain(schainName); - await tokenManagerERC721WithMetadata2.addTokenManager(schainName, await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata2.addTokenManager(schainName, tokenManagerERC721WithMetadata); await tokenManagerERC721WithMetadata2.connect(deployer).grantRole(await tokenManagerERC721WithMetadata2.TOKEN_REGISTRAR_ROLE(), schainOwner.address); - await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, await erc721OnOriginChain.getAddress(), await erc721OnTargetChain.getAddress()); + await tokenManagerERC721WithMetadata2.connect(schainOwner).addERC721TokenByOwner(schainName, erc721OnOriginChain, erc721OnTargetChain); - await messageProxyForSchain2.postMessage(await tokenManagerERC721WithMetadata2.getAddress(), schainId, await tokenManagerERC721WithMetadata.getAddress(), data); + await messageProxyForSchain2.postMessage(tokenManagerERC721WithMetadata2, schainId, tokenManagerERC721WithMetadata, data); expect((await erc721OnTargetChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnTargetChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain2.postMessage(await communityLocker2.getAddress(), mainnetId, fakeCommunityPool, data); + await messageProxyForSchain2.postMessage(communityLocker2, mainnetId, fakeCommunityPool, data); - await erc721OnTargetChain.connect(user).approve(await tokenManagerERC721WithMetadata2.getAddress(), tokenId); + await erc721OnTargetChain.connect(user).approve(tokenManagerERC721WithMetadata2, tokenId); await tokenManagerERC721WithMetadata2 .connect(user) - .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Not allowed ERC721 Token"); await tokenManagerERC721WithMetadata2 .connect(user) - .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("Incorrect main chain token"); await tokenManagerERC721WithMetadata2 .connect(user) - .transferToSchainERC721(schainName, await erc721OnOriginChain.getAddress(), tokenId); + .transferToSchainERC721(schainName, erc721OnOriginChain, tokenId); data = await messages.encodeTransferErc721MessageWithMetadata( - await erc721OnOriginChain.getAddress(), + erc721OnOriginChain, user.address, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), newSchainId, await tokenManagerERC721WithMetadata2.getAddress(), data); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, newSchainId, tokenManagerERC721WithMetadata2, data); expect((await erc721OnOriginChain.ownerOf(tokenId)).toString()).to.be.equal(user.address); expect((await erc721OnOriginChain.tokenURI(tokenId)).toString()).to.be.equal(tokenURI); - await erc721OnOriginChain.connect(user).approve(await tokenManagerERC721WithMetadata.getAddress(), tokenId); + await erc721OnOriginChain.connect(user).approve(tokenManagerERC721WithMetadata, tokenId); await tokenManagerERC721WithMetadata .connect(user) - .exitToMainERC721(await erc721OnOriginChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnOriginChain, tokenId) .should.be.eventually.rejectedWith("Main chain token could not be transfered to Mainnet"); await tokenManagerERC721WithMetadata .connect(user) - .exitToMainERC721(await erc721OnTargetChain.getAddress(), tokenId) + .exitToMainERC721(erc721OnTargetChain, tokenId) .should.be.eventually.rejectedWith("ERC721: invalid token ID"); }); @@ -1303,13 +1303,13 @@ describe("TokenManagerERC721WithMetadata", () => { describe("tests for `postMessage` function", async () => { beforeEach(async () => { - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721WithMetadata.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721WithMetadata); }); it("should transfer ERC721 token token with token info", async () => { // preparation const data = await messages.encodeTransferErc721WithMetadataAndTokenInfoMessage( - await token.getAddress(), + token, to, tokenId, tokenURI, @@ -1319,12 +1319,12 @@ describe("TokenManagerERC721WithMetadata", () => { } ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("Automatic deploy is disabled"); await tokenManagerERC721WithMetadata.connect(schainOwner).enableAutomaticDeploy(); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, token); const erc721OnChain = await (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); expect((await erc721OnChain.tokenURI(tokenId))).to.be.equal(tokenURI); @@ -1332,18 +1332,18 @@ describe("TokenManagerERC721WithMetadata", () => { it("should transfer ERC721 token on schain", async () => { // preparation - await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, await token.getAddress(), await tokenClone.getAddress()); - await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), await tokenManagerERC721WithMetadata.getAddress()); + await tokenManagerERC721WithMetadata.connect(schainOwner).addERC721TokenByOwner(mainnetName, token, tokenClone); + await tokenClone.connect(deployer).grantRole(await tokenClone.MINTER_ROLE(), tokenManagerERC721WithMetadata); const data = await messages.encodeTransferErc721MessageWithMetadata( - await token.getAddress(), + token, to, tokenId, tokenURI ); - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data); - const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, await token.getAddress()); + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, mainnetId, fakeDepositBox, data); + const addressERC721OnSchain = await tokenManagerERC721WithMetadata.clonesErc721(mainnetId, token); const erc721OnChain = (await ethers.getContractFactory("ERC721OnChain")).attach(addressERC721OnSchain) as ERC721OnChain; expect((await erc721OnChain.ownerOf(tokenId))).to.be.equal(to); expect((await erc721OnChain.tokenURI(tokenId))).to.be.equal(tokenURI); @@ -1354,7 +1354,7 @@ describe("TokenManagerERC721WithMetadata", () => { "000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0"+ "00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8"+ "0000000000000000000000000000000000000000000000000000000000000001"; - await messageProxyForSchain.postMessage(await tokenManagerERC721WithMetadata.getAddress(), mainnetId, fakeDepositBox, data) + await messageProxyForSchain.postMessage(tokenManagerERC721WithMetadata, mainnetId, fakeDepositBox, data) .should.be.eventually.rejectedWith("MessageType is unknown"); }); diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index a24b43980..9b5b85e5d 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -74,14 +74,19 @@ describe("TokenManagerEth", () => { beforeEach(async () => { const keyStorage = await deployKeyStorageMock(); - messageProxyForSchain = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchainTester(keyStorage, schainName); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, deployer.address); - fakeDepositBox = await tokenManagerLinker.getAddress(); - fakeCommunityPool = await tokenManagerLinker.getAddress(); - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, fakeCommunityPool); + fakeDepositBox = user.address; + fakeCommunityPool = user.address; + communityLocker = await deployCommunityLocker( + schainName, + messageProxyForSchain, + tokenManagerLinker, + fakeCommunityPool + ); tokenManagerEth = await deployTokenManagerEth( schainName, - await messageProxyForSchain.getAddress(), + messageProxyForSchain, tokenManagerLinker, communityLocker, fakeDepositBox, @@ -90,19 +95,19 @@ describe("TokenManagerEth", () => { ethERC20 = await deployEthErc20( tokenManagerEth ); - await tokenManagerLinker.registerTokenManager(await tokenManagerEth.getAddress()); - await tokenManagerEth.connect(deployer).setEthErc20Address(await ethERC20.getAddress()); + await tokenManagerLinker.registerTokenManager(tokenManagerEth); + await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20); messages = await deployMessages(); const data = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, data); const extraContractRegistrarRole = await messageProxyForSchain.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); }); it("should set EthErc20 address", async () => { - const newEthErc20Address = await tokenManagerLinker.getAddress(); + const newEthErc20Address = tokenManagerLinker; // only owner can set EthErc20 address: await tokenManagerEth.connect(user).setEthErc20Address(newEthErc20Address).should.be.rejected; await tokenManagerEth.connect(deployer).setEthErc20Address(newEthErc20Address); @@ -197,23 +202,23 @@ describe("TokenManagerEth", () => { const amount = 60; const amountAfter = 54; const amountTo = 6; - await messageProxyForSchain.registerExtraContract("Mainnet", await tokenManagerEth.getAddress()); + await messageProxyForSchain.registerExtraContract("Mainnet", tokenManagerEth); await ethERC20.grantRole(await ethERC20.MINTER_ROLE(), deployer.address); await ethERC20.mint(user.address, amount); - // send Eth to a client on Mainnet: + // // send Eth to a client on Mainnet: await tokenManagerEth.connect(user).exitToMain(amountTo); expect(await ethERC20.balanceOf(user.address)).to.be.equal(amountAfter.toString()); let data1 = await messages.encodeLockUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data1); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, data1); await tokenManagerEth.connect(user).exitToMain(amountTo) .should.be.eventually.rejectedWith("Recipient must be active"); data1 = await messages.encodeActivateUserMessage(user.address); - await messageProxyForSchain.postMessage(await communityLocker.getAddress(), mainnetHash, fakeCommunityPool, data1); + await messageProxyForSchain.postMessage(communityLocker, mainnetHash, fakeCommunityPool, data1); await tokenManagerEth.connect(user).exitToMain(amountTo) .should.be.eventually.rejectedWith("Exceeded message rate limit"); @@ -242,14 +247,21 @@ describe("TokenManagerEth", () => { const amount = 10; const bytesData = await messages.encodeTransferEthMessage(user.address, amount); const sender = deployer.address; - // redeploy tokenManagerEth with `developer` address instead `await messageProxyForSchain.getAddress()` + // redeploy tokenManagerEth with `developer` address instead `messageProxyForSchain` // to avoid `Not a sender` error - tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, await ethERC20.getAddress()); + tokenManagerEth = await deployTokenManagerEth( + schainName, + messageProxyForSchain, + tokenManagerLinker, + communityLocker, + fakeDepositBox, + await ethERC20.getAddress() + ); // await tokenManagerEth.setContract("MessageProxy", deployer, {from: deployer}); // execution - await tokenManagerEth + await messageProxyForSchain .connect(deployer) - .postMessage(schainHash, sender, bytesData) + .postMessage(tokenManagerEth, schainHash, sender, bytesData) .should.be.eventually.rejectedWith(error); }); @@ -257,9 +269,16 @@ describe("TokenManagerEth", () => { // for `Invalid data` message bytesData should be `0x` const bytesData = "0x"; const sender = deployer.address; - // redeploy tokenManagerEth with `developer` address instead `await messageProxyForSchain.getAddress()` + // redeploy tokenManagerEth with `developer` address instead `messageProxyForSchain` // to avoid `Not a sender` error - tokenManagerEth = await deployTokenManagerEth(schainName, deployer.address, tokenManagerLinker, communityLocker, fakeDepositBox, await ethERC20.getAddress()); + tokenManagerEth = await deployTokenManagerEth( + schainName, + messageProxyForSchain, + tokenManagerLinker, + communityLocker, + fakeDepositBox, + await ethERC20.getAddress() + ); // add schain to avoid the `Receiver chain is incorrect` error await tokenManagerEth .connect(deployer) @@ -273,7 +292,7 @@ describe("TokenManagerEth", () => { it("should transfer eth", async () => { // preparation - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerEth.getAddress()); + await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth); const fromSchainName = "fromSchainName"; const fromSchainId = ethers.id(fromSchainName); const amount = "10"; @@ -286,25 +305,25 @@ describe("TokenManagerEth", () => { await tokenManagerEth .connect(deployer) .addTokenManager(fromSchainName, deployer.address); - await ethERC20.connect(deployer).grantRole(await ethERC20.MINTER_ROLE(), await tokenManagerEth.getAddress()); - await ethERC20.connect(deployer).grantRole(await ethERC20.BURNER_ROLE(), await tokenManagerEth.getAddress()); + await ethERC20.connect(deployer).grantRole(await ethERC20.MINTER_ROLE(), tokenManagerEth); + await ethERC20.connect(deployer).grantRole(await ethERC20.BURNER_ROLE(), tokenManagerEth); // execution await messageProxyForSchain.postMessage( - await tokenManagerEth.getAddress(), + tokenManagerEth, fromSchainId, sender, bytesData ).should.be.eventually.rejectedWith("Receiver chain is incorrect"); await messageProxyForSchain.postMessage( - await tokenManagerEth.getAddress(), + tokenManagerEth, mainnetHash, sender, bytesData ).should.be.eventually.rejectedWith("Receiver chain is incorrect"); await messageProxyForSchain.postMessage( - await tokenManagerEth.getAddress(), + tokenManagerEth, mainnetHash, fakeDepositBox, bytesData diff --git a/test/TokenManagerLinker.ts b/test/TokenManagerLinker.ts index da46535f1..c6951dff7 100644 --- a/test/TokenManagerLinker.ts +++ b/test/TokenManagerLinker.ts @@ -73,15 +73,15 @@ describe("TokenManagerLinker", () => { beforeEach(async () => { newSchainName = "newSchainName"; const keyStorage = await deployKeyStorageMock(); - messageProxy = await deployMessageProxyForSchainTester(await keyStorage.getAddress(), schainName); + messageProxy = await deployMessageProxyForSchainTester(keyStorage, schainName); const fakeLinker = deployer.address; linker = await deployTokenManagerLinker(messageProxy, fakeLinker); - fakeDepositBox = await linker.getAddress(); - fakeCommunityPool = await linker.getAddress(); - communityLocker = await deployCommunityLocker(schainName, await messageProxy.getAddress(), linker, fakeCommunityPool); - tokenManagerEth = await deployTokenManagerEth(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox, "0x0000000000000000000000000000000000000000"); - tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox); - tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxy.getAddress(), linker, communityLocker, fakeDepositBox); + fakeDepositBox = deployer.address; + fakeCommunityPool = deployer.address; + communityLocker = await deployCommunityLocker(schainName, messageProxy, linker, fakeCommunityPool); + tokenManagerEth = await deployTokenManagerEth(schainName, messageProxy, linker, communityLocker, fakeDepositBox, "0x0000000000000000000000000000000000000000"); + tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxy, linker, communityLocker, fakeDepositBox); + tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxy, linker, communityLocker, fakeDepositBox); const chainConnectorRole = await messageProxy.CHAIN_CONNECTOR_ROLE(); await messageProxy.connect(deployer).grantRole(chainConnectorRole, await linker.getAddress()); const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); @@ -97,11 +97,11 @@ describe("TokenManagerLinker", () => { }); it("should connect schain with 1 tokenManager", async () => { - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(false); - await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); + await linker.connect(deployer).registerTokenManager(tokenManagerEth); - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(true); expect(await linker.hasSchain(newSchainName)).to.equal(false); @@ -111,17 +111,17 @@ describe("TokenManagerLinker", () => { }); it("should connect schain with 3 tokenManager", async () => { - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC20)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC721)).to.equal(false); - await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); + await linker.connect(deployer).registerTokenManager(tokenManagerEth); + await linker.connect(deployer).registerTokenManager(tokenManagerERC20); + await linker.connect(deployer).registerTokenManager(tokenManagerERC721); - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); - expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(true); - expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerERC20)).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerERC721)).to.equal(true); expect(await linker.hasSchain(newSchainName)).to.equal(false); @@ -131,9 +131,9 @@ describe("TokenManagerLinker", () => { }); it("should invoke `disconnectSchain` without mistakes", async () => { - await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); + await linker.connect(deployer).registerTokenManager(tokenManagerEth); + await linker.connect(deployer).registerTokenManager(tokenManagerERC20); + await linker.connect(deployer).registerTokenManager(tokenManagerERC721); await linker.connect(deployer).connectSchain(newSchainName); @@ -149,17 +149,17 @@ describe("TokenManagerLinker", () => { const nullAddress = "0x0000000000000000000000000000000000000000"; const tokenManagerAddress = user.address; - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC20)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC721)).to.equal(false); - await linker.connect(deployer).registerTokenManager(await tokenManagerEth.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC20.getAddress()); - await linker.connect(deployer).registerTokenManager(await tokenManagerERC721.getAddress()); + await linker.connect(deployer).registerTokenManager(tokenManagerEth); + await linker.connect(deployer).registerTokenManager(tokenManagerERC20); + await linker.connect(deployer).registerTokenManager(tokenManagerERC721); - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(true); - expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(true); - expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerERC20)).to.equal(true); + expect(await linker.hasTokenManager(tokenManagerERC721)).to.equal(true); expect(await linker.hasTokenManager(nullAddress)).to.equal(false); expect(await linker.hasTokenManager(tokenManagerAddress)).to.equal(false); @@ -183,13 +183,13 @@ describe("TokenManagerLinker", () => { expect(await linker.hasTokenManager(nullAddress)).to.equal(false); - await linker.connect(deployer).removeTokenManager(await tokenManagerEth.getAddress()); - await linker.connect(deployer).removeTokenManager(await tokenManagerERC20.getAddress()); - await linker.connect(deployer).removeTokenManager(await tokenManagerERC721.getAddress()); + await linker.connect(deployer).removeTokenManager(tokenManagerEth); + await linker.connect(deployer).removeTokenManager(tokenManagerERC20); + await linker.connect(deployer).removeTokenManager(tokenManagerERC721); - expect(await linker.hasTokenManager(await tokenManagerEth.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC20.getAddress())).to.equal(false); - expect(await linker.hasTokenManager(await tokenManagerERC721.getAddress())).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerEth)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC20)).to.equal(false); + expect(await linker.hasTokenManager(tokenManagerERC721)).to.equal(false); }); }); diff --git a/test/extensions/ERC721MintingFromSchainToMainnet.ts b/test/extensions/ERC721MintingFromSchainToMainnet.ts index 314eb3928..d7199479b 100644 --- a/test/extensions/ERC721MintingFromSchainToMainnet.ts +++ b/test/extensions/ERC721MintingFromSchainToMainnet.ts @@ -123,17 +123,17 @@ describe("ERC721MintingFromSchainToMainnet", () => { schainsInternal = await (await ethers.getContractFactory("SchainsInternal")).deploy() as SchainsInternal; skaleVerifier = await (await ethers.getContractFactory("SkaleVerifierMock")).deploy() as SkaleVerifierMock; wallets = await (await ethers.getContractFactory("Wallets")).deploy() as Wallets; - await contractManager.connect(deployer).setContractsAddress("KeyStorage", await keyStorage.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Nodes", await nodes.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Schains", await schains.getAddress()); - await contractManager.connect(deployer).setContractsAddress("SchainsInternal", await schainsInternal.getAddress()); - await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", await skaleVerifier.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Wallets", await wallets.getAddress()); + await contractManager.connect(deployer).setContractsAddress("KeyStorage", keyStorage); + await contractManager.connect(deployer).setContractsAddress("Nodes", nodes); + await contractManager.connect(deployer).setContractsAddress("Schains", schains); + await contractManager.connect(deployer).setContractsAddress("SchainsInternal", schainsInternal); + await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", skaleVerifier); + await contractManager.connect(deployer).setContractsAddress("Wallets", wallets); // add ContractManager to contracts - await schains.connect(deployer).addContractManager(await contractManager.getAddress()); - await schainsInternal.connect(deployer).addContractManager(await contractManager.getAddress()); - await wallets.connect(deployer).addContractManager(await contractManager.getAddress()); + await schains.connect(deployer).addContractManager(contractManager); + await schainsInternal.connect(deployer).addContractManager(contractManager); + await wallets.connect(deployer).addContractManager(contractManager); // setup 16 nodes const nodeCreationParams = { @@ -191,36 +191,36 @@ describe("ERC721MintingFromSchainToMainnet", () => { const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); const chainConnectorRole2 = await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(); await messageProxyForMainnet.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForMainnet.connect(deployer).grantRole(chainConnectorRole2, await imaLinker.getAddress()); + await messageProxyForMainnet.connect(deployer).grantRole(chainConnectorRole2, imaLinker); // await messageProxyForMainnet.registerExtraContractForAll(depositBoxEth.address) // await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC20.address) // await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC721.address) - // await messageProxyForMainnet.registerExtraContractForAll(await communityPool.getAddress()) + // await messageProxyForMainnet.registerExtraContractForAll(communityPool) // IMA schain part deployment messageProxyForSchain = await deployMessageProxyForSchain(await keyStorage.getAddress(), schainName); await keyStorage.connect(deployer).setBlsCommonPublicKey(BLSPublicKey); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, await imaLinker.getAddress()); - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, await communityPool.getAddress()); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, await communityPool.getAddress()); // tokenManagerEth = await deployTokenManagerEth( // schainName, - // await messageProxyForSchain.getAddress(), + // messageProxyForSchain, // tokenManagerLinker, // communityLocker, // depositBoxEth.address, // "0x0000000000000000000000000000000000000000"); - // tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, depositBoxERC20.address); - // tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, depositBoxERC721.address); + // tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, depositBoxERC20.address); + // tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, depositBoxERC721.address); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); // await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth.address) // await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC20.address) // await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721.address) - // await messageProxyForSchain.registerExtraContractForAll(await communityLocker.getAddress()) + // await messageProxyForSchain.registerExtraContractForAll(communityLocker) // ethERC20 = await deployEthErc20(tokenManagerEth); // await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20.address); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); - await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, await tokenManagerLinker.getAddress()); + await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, tokenManagerLinker); // await tokenManagerERC20.connect(deployer).grantRole(await tokenManagerERC20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); // await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); @@ -230,11 +230,11 @@ describe("ERC721MintingFromSchainToMainnet", () => { // await lockAndDataForSchain.setContract("ERC20Module", erc20ModuleForSchain.address); // await lockAndDataForSchain.setContract("ERC721Module", erc721ModuleForSchain.address); // await lockAndDataForSchain.setContract("TokenManager", tokenManager.address); - // await lockAndDataForSchain.setContract("MessageProxy", await messageProxyForSchain.getAddress()); + // await lockAndDataForSchain.setContract("MessageProxy", messageProxyForSchain); // await lockAndDataForSchain.setContract("TokenFactory", tokenFactory.address); // IMA registration - await imaLinker.connectSchain(schainName, [await communityLocker.getAddress(), await tokenManagerLinker.getAddress()]); + await imaLinker.connectSchain(schainName, [communityLocker, tokenManagerLinker]); // await communityPool.connect(user).rechargeUserWallet(schainName, { value: 1e18.toString() }); // await lockAndDataForSchain.addDepositBox(depositBoxEth.address); // await lockAndDataForSchain.addDepositBox(depositBoxERC20.address); @@ -269,27 +269,27 @@ describe("ERC721MintingFromSchainToMainnet", () => { const extensionMainnetFactory = await ethers.getContractFactory("ERC721ReferenceMintAndMetadataMainnet"); extensionMainnet = await extensionMainnetFactory.deploy( - await messageProxyForMainnet.getAddress(), - await ERC721TokenOnMainnet.getAddress(), + messageProxyForMainnet, + ERC721TokenOnMainnet, schainName ) as ERC721ReferenceMintAndMetadataMainnet; extensionSchain = await extensionSchainFactory.deploy( - await messageProxyForSchain.getAddress(), - await ERC721TokenOnSchain.getAddress(), - await extensionMainnet.getAddress() + messageProxyForSchain, + ERC721TokenOnSchain, + extensionMainnet ) as ERC721ReferenceMintAndMetadataSchain; - await extensionMainnet.connect(deployer).setSenderContractOnSchain(await extensionSchain.getAddress()); + await extensionMainnet.connect(deployer).setSenderContractOnSchain(extensionSchain); // add minter role const minterRoleERC721 = await ERC721TokenOnMainnet.MINTER_ROLE(); - await ERC721TokenOnMainnet.grantRole(minterRoleERC721, await extensionMainnet.getAddress()); + await ERC721TokenOnMainnet.grantRole(minterRoleERC721, extensionMainnet); }); it("should not send message if not registered", async () => { await ERC721TokenOnSchain.connect(user).setTokenURI(1, "MyToken1"); - await ERC721TokenOnSchain.connect(user).approve(await extensionSchain.getAddress(), 1); + await ERC721TokenOnSchain.connect(user).approve(extensionSchain, 1); await extensionSchain.connect(user).sendTokenToMainnet(user.address, 1).should.be.eventually.rejectedWith("Sender contract is not registered"); }); @@ -297,22 +297,22 @@ describe("ERC721MintingFromSchainToMainnet", () => { const tokenURI = "MyToken1"; const mainnetHash = ethers.id("Mainnet"); await ERC721TokenOnSchain.connect(user).setTokenURI(1, tokenURI); - await ERC721TokenOnSchain.connect(user).approve(await extensionSchain.getAddress(), 1); - await messageProxyForSchain.connect(deployer).registerExtraContract("Mainnet", await extensionSchain.getAddress()); + await ERC721TokenOnSchain.connect(user).approve(extensionSchain, 1); + await messageProxyForSchain.connect(deployer).registerExtraContract("Mainnet", extensionSchain); const res = await extensionSchain.connect(user).sendTokenToMainnet(user.address, 1); const encodedData = ethers.AbiCoder.defaultAbiCoder().encode(["address", "uint", "string"], [user.address, 1, tokenURI]); await expect(res) .to.emit(messageProxyForSchain, "OutgoingMessage") - .withArgs(mainnetHash, 0, await extensionSchain.getAddress(), await extensionMainnet.getAddress(), encodedData); + .withArgs(mainnetHash, 0, extensionSchain, extensionMainnet, encodedData); }); it("should POST message for token 1", async () => { const dataToPost = await extensionSchain.connect(user).encodeParams(user.address, 1, "MyToken1"); const message = { data: dataToPost, - destinationContract: await extensionMainnet.getAddress(), - sender: await extensionSchain.getAddress(), + destinationContract: extensionMainnet, + sender: extensionSchain, }; // prepare BLS signature @@ -355,7 +355,7 @@ describe("ERC721MintingFromSchainToMainnet", () => { const message = { data: dataToPost, destinationContract: user.address, - sender: await extensionSchain.getAddress(), + sender: extensionSchain, }; // prepare BLS signature @@ -395,8 +395,8 @@ describe("ERC721MintingFromSchainToMainnet", () => { const dataToPost = await extensionSchain.connect(user).encodeParams(user.address, 5, "MyToken5Unique"); const message = { data: dataToPost, - destinationContract: await extensionMainnet.getAddress(), - sender: await extensionSchain.getAddress(), + destinationContract: extensionMainnet, + sender: extensionSchain, }; // prepare BLS signature diff --git a/test/utils/deploy/mainnet/communityPool.ts b/test/utils/deploy/mainnet/communityPool.ts index 7aa5fd879..fc3221c02 100644 --- a/test/utils/deploy/mainnet/communityPool.ts +++ b/test/utils/deploy/mainnet/communityPool.ts @@ -10,10 +10,14 @@ export async function deployCommunityPool( const factory = await ethers.getContractFactory("CommunityPool"); const instance = await upgrades.deployProxy( factory, - [await contractManager.getAddress(), await linker.getAddress(), await messageProxy.getAddress()], + [ + await contractManager.getAddress(), + await linker.getAddress(), + await messageProxy.getAddress() + ], {"initializer": "initialize(address,address,address)"} ) as unknown as CommunityPool; - await linker.registerMainnetContract(await instance.getAddress()); - await messageProxy.setCommunityPool(await instance.getAddress()); + await linker.registerMainnetContract(instance); + await messageProxy.setCommunityPool(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/depositBoxERC1155.ts b/test/utils/deploy/mainnet/depositBoxERC1155.ts index 346859af5..fbc033bec 100644 --- a/test/utils/deploy/mainnet/depositBoxERC1155.ts +++ b/test/utils/deploy/mainnet/depositBoxERC1155.ts @@ -17,6 +17,6 @@ export async function deployDepositBoxERC1155( ], {"initializer": "initialize(address,address,address)"} ) as unknown as DepositBoxERC1155; - await linker.registerMainnetContract(await instance.getAddress()); + await linker.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/depositBoxERC20.ts b/test/utils/deploy/mainnet/depositBoxERC20.ts index 8c4043220..27fb92d22 100644 --- a/test/utils/deploy/mainnet/depositBoxERC20.ts +++ b/test/utils/deploy/mainnet/depositBoxERC20.ts @@ -17,6 +17,6 @@ export async function deployDepositBoxERC20( ], {"initializer": "initialize(address,address,address)"} ) as unknown as DepositBoxERC20; - await linker.registerMainnetContract(await instance.getAddress()); + await linker.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/depositBoxERC721.ts b/test/utils/deploy/mainnet/depositBoxERC721.ts index 8173630e9..2fa3b0a04 100644 --- a/test/utils/deploy/mainnet/depositBoxERC721.ts +++ b/test/utils/deploy/mainnet/depositBoxERC721.ts @@ -17,6 +17,6 @@ export async function deployDepositBoxERC721( ], {"initializer": "initialize(address,address,address)"} ) as unknown as DepositBoxERC721; - await linker.registerMainnetContract(await instance.getAddress()); + await linker.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts b/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts index dbba0d6ac..8fed2b386 100644 --- a/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts +++ b/test/utils/deploy/mainnet/depositBoxERC721WithMetadata.ts @@ -17,6 +17,6 @@ export async function deployDepositBoxERC721WithMetadata( ], {"initializer": "initialize(address,address,address)"} ) as unknown as DepositBoxERC721WithMetadata; - await linker.registerMainnetContract(await instance.getAddress()); + await linker.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/depositBoxEth.ts b/test/utils/deploy/mainnet/depositBoxEth.ts index 727f782c9..956af2c97 100644 --- a/test/utils/deploy/mainnet/depositBoxEth.ts +++ b/test/utils/deploy/mainnet/depositBoxEth.ts @@ -17,6 +17,6 @@ export async function deployDepositBoxEth( ], {"initializer": "initialize(address,address,address)"} ) as unknown as DepositBoxEth; - await linker.registerMainnetContract(await instance.getAddress()); + await linker.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/linker.ts b/test/utils/deploy/mainnet/linker.ts index 875b4023f..7aa6debd3 100644 --- a/test/utils/deploy/mainnet/linker.ts +++ b/test/utils/deploy/mainnet/linker.ts @@ -14,6 +14,6 @@ export async function deployLinker( ], {"initializer": "initialize(address,address)"} ) as unknown as Linker; - await instance.registerMainnetContract(await instance.getAddress()); + await instance.registerMainnetContract(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/mainnet/messageProxyForMainnet.ts b/test/utils/deploy/mainnet/messageProxyForMainnet.ts index 228d42625..e169c9312 100644 --- a/test/utils/deploy/mainnet/messageProxyForMainnet.ts +++ b/test/utils/deploy/mainnet/messageProxyForMainnet.ts @@ -11,7 +11,7 @@ export async function deployMessageProxyForMainnet( return factory.attach(await contractManager.getContract(name)) as MessageProxyForMainnet; } else { const instance = await upgrades.deployProxy(factory, [await contractManager.getAddress()]) as unknown as MessageProxyForMainnet; - await contractManager.setContractsAddress(name, await instance.getAddress()); + await contractManager.setContractsAddress(name, instance); return instance; } -} \ No newline at end of file +} diff --git a/test/utils/deploy/schain/communityLocker.ts b/test/utils/deploy/schain/communityLocker.ts index f46f67fb2..51ee758a8 100644 --- a/test/utils/deploy/schain/communityLocker.ts +++ b/test/utils/deploy/schain/communityLocker.ts @@ -1,18 +1,23 @@ import { ethers, upgrades } from "hardhat"; -import { CommunityLocker, TokenManagerLinker } from "../../../../typechain"; +import { CommunityLocker, MessageProxyForSchain, TokenManagerLinker } from "../../../../typechain"; const name = "CommunityLocker"; export async function deployCommunityLocker( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityPool: string ) { const factory = await ethers.getContractFactory(name); const instance = await upgrades.deployProxy( factory, - [schainName, messageProxyForSchain, await tokenManagerLinker.getAddress(), communityPool] + [ + schainName, + await messageProxyForSchain.getAddress(), + await tokenManagerLinker.getAddress(), + communityPool + ] ) as unknown as CommunityLocker; return instance; } diff --git a/test/utils/deploy/schain/tokenManagerERC1155.ts b/test/utils/deploy/schain/tokenManagerERC1155.ts index ee2f2636f..5580bfe0f 100644 --- a/test/utils/deploy/schain/tokenManagerERC1155.ts +++ b/test/utils/deploy/schain/tokenManagerERC1155.ts @@ -1,11 +1,11 @@ import { ethers, upgrades } from "hardhat"; -import { TokenManagerERC1155, TokenManagerLinker, CommunityLocker } from "../../../../typechain"; +import { TokenManagerERC1155, TokenManagerLinker, CommunityLocker, MessageProxyForSchain } from "../../../../typechain"; const name = "TokenManagerERC1155"; export async function deployTokenManagerERC1155( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityLocker: CommunityLocker, newDepositBox: string @@ -15,7 +15,7 @@ export async function deployTokenManagerERC1155( factory, [ schainName, - messageProxyForSchain, + await messageProxyForSchain.getAddress(), await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), newDepositBox diff --git a/test/utils/deploy/schain/tokenManagerERC20.ts b/test/utils/deploy/schain/tokenManagerERC20.ts index 2e582520f..1f9dda8e8 100644 --- a/test/utils/deploy/schain/tokenManagerERC20.ts +++ b/test/utils/deploy/schain/tokenManagerERC20.ts @@ -1,11 +1,11 @@ import { ethers, upgrades } from "hardhat"; -import { TokenManagerERC20, TokenManagerLinker, CommunityLocker } from "../../../../typechain"; +import { TokenManagerERC20, TokenManagerLinker, CommunityLocker, MessageProxyForSchain } from "../../../../typechain"; const name = "TokenManagerERC20"; export async function deployTokenManagerERC20( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityLocker: CommunityLocker, newDepositBox: string @@ -15,7 +15,7 @@ export async function deployTokenManagerERC20( factory, [ schainName, - messageProxyForSchain, + await messageProxyForSchain.getAddress(), await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), newDepositBox diff --git a/test/utils/deploy/schain/tokenManagerERC721.ts b/test/utils/deploy/schain/tokenManagerERC721.ts index 3e788fe0b..198543e42 100644 --- a/test/utils/deploy/schain/tokenManagerERC721.ts +++ b/test/utils/deploy/schain/tokenManagerERC721.ts @@ -1,11 +1,11 @@ import { ethers, upgrades } from "hardhat"; -import { TokenManagerERC721, TokenManagerLinker, CommunityLocker } from "../../../../typechain"; +import { TokenManagerERC721, TokenManagerLinker, CommunityLocker, MessageProxyForSchain } from "../../../../typechain"; const name = "TokenManagerERC721"; export async function deployTokenManagerERC721( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityLocker: CommunityLocker, newDepositBox: string @@ -15,7 +15,7 @@ export async function deployTokenManagerERC721( factory, [ schainName, - messageProxyForSchain, + await messageProxyForSchain.getAddress(), await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), newDepositBox diff --git a/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts b/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts index c9510508c..5a6108502 100644 --- a/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts +++ b/test/utils/deploy/schain/tokenManagerERC721WithMetadata.ts @@ -1,11 +1,11 @@ import { ethers, upgrades } from "hardhat"; -import { TokenManagerERC721WithMetadata, TokenManagerLinker, CommunityLocker } from "../../../../typechain"; +import { TokenManagerERC721WithMetadata, TokenManagerLinker, CommunityLocker, MessageProxyForSchain } from "../../../../typechain"; const name = "TokenManagerERC721WithMetadata"; export async function deployTokenManagerERC721WithMetadata( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityLocker: CommunityLocker, newDepositBox: string @@ -15,7 +15,7 @@ export async function deployTokenManagerERC721WithMetadata( factory, [ schainName, - messageProxyForSchain, + await messageProxyForSchain.getAddress(), await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), newDepositBox diff --git a/test/utils/deploy/schain/tokenManagerEth.ts b/test/utils/deploy/schain/tokenManagerEth.ts index 50b814317..2af3a232a 100644 --- a/test/utils/deploy/schain/tokenManagerEth.ts +++ b/test/utils/deploy/schain/tokenManagerEth.ts @@ -1,11 +1,11 @@ import { ethers, upgrades } from "hardhat"; -import { TokenManagerEth, TokenManagerLinker, CommunityLocker } from "../../../../typechain"; +import { TokenManagerEth, TokenManagerLinker, CommunityLocker, MessageProxyForSchain } from "../../../../typechain"; const name = "TokenManagerEth"; export async function deployTokenManagerEth( schainName: string, - messageProxyForSchain: string, + messageProxyForSchain: MessageProxyForSchain, tokenManagerLinker: TokenManagerLinker, communityLocker: CommunityLocker, newDepositBox: string, @@ -16,7 +16,7 @@ export async function deployTokenManagerEth( factory, [ schainName, - messageProxyForSchain, + await messageProxyForSchain.getAddress(), await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), newDepositBox, diff --git a/test/utils/deploy/schain/tokenManagerLinker.ts b/test/utils/deploy/schain/tokenManagerLinker.ts index b569d79b2..11c8ff9bc 100644 --- a/test/utils/deploy/schain/tokenManagerLinker.ts +++ b/test/utils/deploy/schain/tokenManagerLinker.ts @@ -6,6 +6,12 @@ export async function deployTokenManagerLinker( newLinkerAddress: string ) { const factory = await ethers.getContractFactory("TokenManagerLinker"); - const instance = await upgrades.deployProxy(factory, [await messageProxyForSchain.getAddress(), newLinkerAddress]) as unknown as TokenManagerLinker; + const instance = await upgrades.deployProxy( + factory, + [ + await messageProxyForSchain.getAddress(), + newLinkerAddress + ] + ) as unknown as TokenManagerLinker; return instance; } diff --git a/test/utils/deploy/test/communityPoolTester.ts b/test/utils/deploy/test/communityPoolTester.ts index da44bc793..3803f4fe6 100644 --- a/test/utils/deploy/test/communityPoolTester.ts +++ b/test/utils/deploy/test/communityPoolTester.ts @@ -17,7 +17,7 @@ export async function deployCommunityPoolTester( ], {"initializer": "initialize(address,address,address)"} ) as unknown as CommunityPool; - await linker.registerMainnetContract(await instance.getAddress()); - await messageProxy.setCommunityPool(await instance.getAddress()); + await linker.registerMainnetContract(instance); + await messageProxy.setCommunityPool(instance); return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/test/fallbackEthTester.ts b/test/utils/deploy/test/fallbackEthTester.ts index afcd47f63..8a9208cc5 100644 --- a/test/utils/deploy/test/fallbackEthTester.ts +++ b/test/utils/deploy/test/fallbackEthTester.ts @@ -14,4 +14,4 @@ export async function deployFallbackEthTester( schainName ) as FallbackEthTester; return instance; -} \ No newline at end of file +} diff --git a/test/utils/deploy/test/messageProxyForMainnetTester.ts b/test/utils/deploy/test/messageProxyForMainnetTester.ts index ec3be70ba..2a2ac35eb 100644 --- a/test/utils/deploy/test/messageProxyForMainnetTester.ts +++ b/test/utils/deploy/test/messageProxyForMainnetTester.ts @@ -14,7 +14,7 @@ export async function deployMessageProxyForMainnetTester( factory, [await contractManager.getAddress()] ) as unknown as MessageProxyForMainnetTester; - await contractManager.setContractsAddress(name, await instance.getAddress()); + await contractManager.setContractsAddress(name, instance); return instance; } -} \ No newline at end of file +} diff --git a/test/utils/deploy/test/messageProxyForSchainTester.ts b/test/utils/deploy/test/messageProxyForSchainTester.ts index 18d88f20c..742a6d55d 100644 --- a/test/utils/deploy/test/messageProxyForSchainTester.ts +++ b/test/utils/deploy/test/messageProxyForSchainTester.ts @@ -1,9 +1,9 @@ import { ethers } from "hardhat"; -import { MessageProxyForSchainTester } from "../../../../typechain"; +import { KeyStorage, MessageProxyForSchainTester } from "../../../../typechain"; const name = "MessageProxyForSchainTester"; -export async function deployMessageProxyForSchainTester(keyStorageAddress: string, schainName: string) { +export async function deployMessageProxyForSchainTester(keyStorageAddress: KeyStorage, schainName: string) { const factory = await ethers.getContractFactory(name); const instance = await factory.deploy(keyStorageAddress, schainName) as MessageProxyForSchainTester; return instance; diff --git a/test/utils/skale-manager-utils/contractManager.ts b/test/utils/skale-manager-utils/contractManager.ts index a01b0eafc..6c21724a2 100644 --- a/test/utils/skale-manager-utils/contractManager.ts +++ b/test/utils/skale-manager-utils/contractManager.ts @@ -17,30 +17,30 @@ export async function deployContractManager(contractManagerAddress: string) { } if (await instance.getContract("KeyStorage") === "0x0000000000000000000000000000000000000000") { const keyStorageInstance = await (await ethers.getContractFactory("KeyStorageMock")).deploy() as KeyStorageMock; - await instance.setContractsAddress("KeyStorage", await keyStorageInstance.getAddress()); + await instance.setContractsAddress("KeyStorage", keyStorageInstance); } if (await instance.getContract(nameNodes) === "0x0000000000000000000000000000000000000000") { const nodesInstance = await (await ethers.getContractFactory(nameNodes)).deploy() as Nodes; - await instance.setContractsAddress(nameNodes, await nodesInstance.getAddress()); + await instance.setContractsAddress(nameNodes, nodesInstance); } if (await instance.getContract(nameSchains) === "0x0000000000000000000000000000000000000000") { const schainsInstance = await (await ethers.getContractFactory(nameSchains)).deploy() as Schains; - await schainsInstance.addContractManager(await instance.getAddress()); - await instance.setContractsAddress(nameSchains, await schainsInstance.getAddress()); + await schainsInstance.addContractManager(instance); + await instance.setContractsAddress(nameSchains, schainsInstance); } if (await instance.getContract(nameSchainsInternal) === "0x0000000000000000000000000000000000000000") { const schainsInternalInstance = await (await ethers.getContractFactory(nameSchainsInternal)).deploy() as SchainsInternal; - await schainsInternalInstance.addContractManager(await instance.getAddress()); - await instance.setContractsAddress(nameSchainsInternal, await schainsInternalInstance.getAddress()); + await schainsInternalInstance.addContractManager(instance); + await instance.setContractsAddress(nameSchainsInternal, schainsInternalInstance); } if (await instance.getContract(nameSkaleVerifier) === "0x0000000000000000000000000000000000000000") { const skaleVerifierInstance = await (await ethers.getContractFactory(nameSkaleVerifier)).deploy() as SkaleVerifierMock; - await instance.setContractsAddress("SkaleVerifier", await skaleVerifierInstance.getAddress()); + await instance.setContractsAddress("SkaleVerifier", skaleVerifierInstance); } if (await instance.getContract(nameWallets) === "0x0000000000000000000000000000000000000000") { const walletsInstance = await (await ethers.getContractFactory(nameWallets)).deploy() as Wallets; - await walletsInstance.addContractManager(await instance.getAddress()); - await instance.setContractsAddress(nameWallets, await walletsInstance.getAddress()); + await walletsInstance.addContractManager(instance); + await instance.setContractsAddress(nameWallets, walletsInstance); } return instance; } diff --git a/test/utils/skale-manager-utils/keyStorage.ts b/test/utils/skale-manager-utils/keyStorage.ts index a0b03df6b..b5bc9ff2e 100644 --- a/test/utils/skale-manager-utils/keyStorage.ts +++ b/test/utils/skale-manager-utils/keyStorage.ts @@ -22,7 +22,7 @@ export async function setCommonPublicKey( if (await contractManager.getContract("KeyStorage") === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); keyStorageInstance = await factory.deploy() as KeyStorageMock; - await contractManager.setContractsAddress("KeyStorage", await keyStorageInstance.getAddress()); + await contractManager.setContractsAddress("KeyStorage", keyStorageInstance); } else { keyStorageInstance = factory.attach(await contractManager.getContract("KeyStorage")) as KeyStorageMock; } diff --git a/test/utils/skale-manager-utils/schainsInternal.ts b/test/utils/skale-manager-utils/schainsInternal.ts index 1ebcadd09..b0e8753a0 100644 --- a/test/utils/skale-manager-utils/schainsInternal.ts +++ b/test/utils/skale-manager-utils/schainsInternal.ts @@ -37,7 +37,7 @@ export async function isSchainActive( if (await contractManager.getContract(nameSchainsInternal) === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); schainsInternalInstance = await factory.deploy() as SchainsInternal; - await contractManager.setContractsAddress(nameSchainsInternal, await schainsInternalInstance.getAddress()); + await contractManager.setContractsAddress(nameSchainsInternal, schainsInternalInstance); } else { schainsInternalInstance = factory.attach(await contractManager.getContract(nameSchainsInternal)) as SchainsInternal; } diff --git a/test/utils/skale-manager-utils/wallets.ts b/test/utils/skale-manager-utils/wallets.ts index 84c3a80bd..3697b60b2 100644 --- a/test/utils/skale-manager-utils/wallets.ts +++ b/test/utils/skale-manager-utils/wallets.ts @@ -15,8 +15,8 @@ export async function rechargeSchainWallet( if (await contractManager.getContract(nameWallets) === "0x0000000000000000000000000000000000000000") { console.log("Schains Internal deployment"); walletsInstance = await walletsFactory.deploy() as Wallets; - await walletsInstance.addContractManager(await contractManager.getAddress()); - await contractManager.setContractsAddress(nameWallets, await walletsInstance.getAddress()); + await walletsInstance.addContractManager(contractManager); + await contractManager.setContractsAddress(nameWallets, walletsInstance); } else { walletsInstance = await walletsFactory.attach(await contractManager.getContract(nameWallets)) as Wallets; } From db7a09b3b2311bd85ff66f5c05aec1ebcc4f0dc5 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Wed, 13 Nov 2024 20:34:33 +0000 Subject: [PATCH 24/45] Upgrade dependencies for eslint --- gas/calculateGas.ts | 326 +++++++++--------- migrations/deployMainnet.ts | 45 ++- migrations/deploySkaleManagerComponents.ts | 71 ++-- migrations/generateManifest.ts | 16 +- migrations/transferOwnership.ts | 2 +- package.json | 4 +- test-tokens/hardhat.config.ts | 6 +- test/CommunityLocker.ts | 2 +- test/CommunityPool.ts | 6 +- test/DepositBoxERC1155.ts | 4 +- test/DepositBoxERC20.ts | 2 +- test/DepositBoxERC721.ts | 4 +- test/DepositBoxERC721WithMetadata.ts | 4 +- test/DepositBoxEth.ts | 4 +- test/ERC20OnChain.ts | 2 +- test/ERC721OnChain.ts | 2 +- test/Linker.ts | 2 +- test/MessageProxy.ts | 2 +- test/TokenManagerERC1155.ts | 2 +- test/TokenManagerERC20.ts | 6 +- test/TokenManagerERC721.ts | 12 +- test/TokenManagerERC721WithMetadata.ts | 2 +- test/TokenManagerEth.ts | 4 +- test/TokenManagerLinker.ts | 6 +- .../ERC721MintingFromSchainToMainnet.ts | 4 +- test/utils/command_line.ts | 2 +- .../deploy/schain/messageProxyForSchain.ts | 8 +- tsconfig.json | 1 - yarn.lock | 194 +++++------ 29 files changed, 364 insertions(+), 381 deletions(-) diff --git a/gas/calculateGas.ts b/gas/calculateGas.ts index b916a3392..8e9bf967f 100644 --- a/gas/calculateGas.ts +++ b/gas/calculateGas.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { CommunityLocker, CommunityPool, @@ -155,17 +155,17 @@ describe("Gas calculation", () => { schainsInternal = await (await ethers.getContractFactory("SchainsInternal")).deploy() as SchainsInternal; skaleVerifier = await (await ethers.getContractFactory("SkaleVerifierMock")).deploy() as SkaleVerifierMock; wallets = await (await ethers.getContractFactory("Wallets")).deploy() as Wallets; - await contractManager.connect(deployer).setContractsAddress("KeyStorage", await keyStorage.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Nodes", await nodes.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Schains", await schains.getAddress()); - await contractManager.connect(deployer).setContractsAddress("SchainsInternal", await schainsInternal.getAddress()); - await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", await skaleVerifier.getAddress()); - await contractManager.connect(deployer).setContractsAddress("Wallets", await wallets.getAddress()); + await contractManager.connect(deployer).setContractsAddress("KeyStorage", keyStorage); + await contractManager.connect(deployer).setContractsAddress("Nodes", nodes); + await contractManager.connect(deployer).setContractsAddress("Schains", schains); + await contractManager.connect(deployer).setContractsAddress("SchainsInternal", schainsInternal); + await contractManager.connect(deployer).setContractsAddress("SkaleVerifier", skaleVerifier); + await contractManager.connect(deployer).setContractsAddress("Wallets", wallets); // add ContractManager to contracts - await schains.connect(deployer).addContractManager(await contractManager.getAddress()); - await schainsInternal.connect(deployer).addContractManager(await contractManager.getAddress()); - await wallets.connect(deployer).addContractManager(await contractManager.getAddress()); + await schains.connect(deployer).addContractManager(contractManager); + await schainsInternal.connect(deployer).addContractManager(contractManager); + await wallets.connect(deployer).addContractManager(contractManager); // setup 16 nodes const nodeCreationParams = { @@ -224,41 +224,41 @@ describe("Gas calculation", () => { depositBoxERC1155 = await deployDepositBoxERC1155(contractManager, imaLinker, messageProxyForMainnet); const extraContractRegistrarRole = await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxyForMainnet.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForMainnet.registerExtraContractForAll(await depositBoxEth.getAddress()) - await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC20.getAddress()) - await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC721.getAddress()) - await messageProxyForMainnet.registerExtraContractForAll(await depositBoxERC1155.getAddress()) - await messageProxyForMainnet.registerExtraContractForAll(await communityPool.getAddress()) - await messageProxyForMainnet.registerExtraContractForAll(await imaLinker.getAddress()) + await messageProxyForMainnet.registerExtraContractForAll(depositBoxEth) + await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC20) + await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC721) + await messageProxyForMainnet.registerExtraContractForAll(depositBoxERC1155) + await messageProxyForMainnet.registerExtraContractForAll(communityPool) + await messageProxyForMainnet.registerExtraContractForAll(imaLinker) messages = await deployMessages(); // IMA schain part deployment - messageProxyForSchain = await deployMessageProxyForSchain(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchain(keyStorage, schainName); await keyStorage.connect(deployer).setBlsCommonPublicKey(BLSPublicKey); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, await imaLinker.getAddress()); - communityLocker = await deployCommunityLocker(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, await communityPool.getAddress()); + communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, await communityPool.getAddress()); tokenManagerEth = await deployTokenManagerEth( schainName, - await messageProxyForSchain.getAddress(), + messageProxyForSchain, tokenManagerLinker, communityLocker, await depositBoxEth.getAddress(), "0x0000000000000000000000000000000000000000"); - tokenManagerERC20 = await deployTokenManagerERC20(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC20.getAddress()); - tokenManagerERC721 = await deployTokenManagerERC721(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC721.getAddress()); - tokenManagerERC1155 = await deployTokenManagerERC1155(schainName, await messageProxyForSchain.getAddress(), tokenManagerLinker, communityLocker, await depositBoxERC1155.getAddress()); + tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, await depositBoxERC20.getAddress()); + tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, await depositBoxERC721.getAddress()); + tokenManagerERC1155 = await deployTokenManagerERC1155(schainName, messageProxyForSchain, tokenManagerLinker, communityLocker, await depositBoxERC1155.getAddress()); await messageProxyForSchain.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerEth.getAddress()) - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC20.getAddress()) - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC721.getAddress()) - await messageProxyForSchain.registerExtraContractForAll(await tokenManagerERC1155.getAddress()) - await messageProxyForSchain.registerExtraContractForAll(await communityLocker.getAddress()) + await messageProxyForSchain.registerExtraContractForAll(tokenManagerEth) + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC20) + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC721) + await messageProxyForSchain.registerExtraContractForAll(tokenManagerERC1155) + await messageProxyForSchain.registerExtraContractForAll(communityLocker) ethERC20 = await deployEthErc20(tokenManagerEth); - await tokenManagerEth.connect(deployer).setEthErc20Address(await ethERC20.getAddress()); + await tokenManagerEth.connect(deployer).setEthErc20Address(ethERC20); const chainConnectorRole = await messageProxyForSchain.CHAIN_CONNECTOR_ROLE(); - await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, await tokenManagerLinker.getAddress()); + await messageProxyForSchain.connect(deployer).grantRole(chainConnectorRole, tokenManagerLinker); await tokenManagerERC20.connect(deployer).grantRole(await tokenManagerERC20.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC721.connect(deployer).grantRole(await tokenManagerERC721.TOKEN_REGISTRAR_ROLE(), schainOwner.address); await tokenManagerERC1155.connect(deployer).grantRole(await tokenManagerERC1155.TOKEN_REGISTRAR_ROLE(), schainOwner.address); @@ -269,16 +269,16 @@ describe("Gas calculation", () => { // await lockAndDataForSchain.setContract("ERC20Module", erc20ModuleForSchain.address); // await lockAndDataForSchain.setContract("ERC721Module", erc721ModuleForSchain.address); // await lockAndDataForSchain.setContract("TokenManager", tokenManager.address); - // await lockAndDataForSchain.setContract("MessageProxy", await messageProxyForSchain.getAddress()); + // await lockAndDataForSchain.setContract("MessageProxy", messageProxyForSchain); // await lockAndDataForSchain.setContract("TokenFactory", tokenFactory.address); // IMA registration - await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), await imaLinker.getAddress()); - await imaLinker.connectSchain(schainName, [await tokenManagerLinker.getAddress(), await communityLocker.getAddress(), await tokenManagerEth.getAddress(), await tokenManagerERC20.getAddress(), await tokenManagerERC721.getAddress(), await tokenManagerERC1155.getAddress()]); + await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), imaLinker); + await imaLinker.connectSchain(schainName, [tokenManagerLinker, communityLocker, tokenManagerEth, tokenManagerERC20, tokenManagerERC721, tokenManagerERC1155]); await communityPool.connect(user).rechargeUserWallet(schainName, user.address, { value: 1e18.toString() }); - // await lockAndDataForSchain.addDepositBox(await depositBoxEth.getAddress()); - // await lockAndDataForSchain.addDepositBox(await depositBoxERC20.getAddress()); - // await lockAndDataForSchain.addDepositBox(await depositBoxERC721.getAddress()); + // await lockAndDataForSchain.addDepositBox(depositBoxEth); + // await lockAndDataForSchain.addDepositBox(depositBoxERC20); + // await lockAndDataForSchain.addDepositBox(depositBoxERC721); // Deploy test tokens ERC20TokenOnMainnet = await deployERC20OnChain("GCERC20", "GCE"); @@ -291,7 +291,7 @@ describe("Gas calculation", () => { // Mint tokens and grant minter role await ERC20TokenOnMainnet.mint(user.address, 5); const minterRoleERC20 = await ERC20TokenOnSchain.MINTER_ROLE(); - await ERC20TokenOnSchain.grantRole(minterRoleERC20, await tokenManagerERC20.getAddress()); + await ERC20TokenOnSchain.grantRole(minterRoleERC20, tokenManagerERC20); await ERC721TokenOnMainnet.mint(user.address, 1); await ERC721TokenOnMainnet.mint(user.address, 2); @@ -304,7 +304,7 @@ describe("Gas calculation", () => { await ERC721TokenOnMainnet.mint(user.address, 9); await ERC721TokenOnMainnet.mint(user.address, 10); const minterRoleERC721 = await ERC721TokenOnSchain.MINTER_ROLE(); - await ERC721TokenOnSchain.grantRole(minterRoleERC721, await tokenManagerERC721.getAddress()); + await ERC721TokenOnSchain.grantRole(minterRoleERC721, tokenManagerERC721); await ERC1155TokenOnMainnet.mint(user.address, 1, 1, "0x"); await ERC1155TokenOnMainnet.mint(user.address, 2, 2, "0x"); @@ -317,7 +317,7 @@ describe("Gas calculation", () => { await ERC1155TokenOnMainnet.mint(user.address, 9, 9, "0x"); await ERC1155TokenOnMainnet.mint(user.address, 10, 10, "0x"); const minterRoleERC1155 = await ERC1155TokenOnSchain.MINTER_ROLE(); - await ERC1155TokenOnSchain.grantRole(minterRoleERC1155, await tokenManagerERC1155.getAddress()); + await ERC1155TokenOnSchain.grantRole(minterRoleERC1155, tokenManagerERC1155); // register user await communityPool.connect(user).rechargeUserWallet(schainName, user.address, {value: "1000000000000000000"}); @@ -338,211 +338,211 @@ describe("Gas calculation", () => { describe("ERC20 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await ERC20TokenOnMainnet.getAddress(), await ERC20TokenOnSchain.getAddress())).wait(); + let res = await (await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, ERC20TokenOnMainnet, ERC20TokenOnSchain)).wait(); console.log("Registration of ERC20 token in TokenManager cost:", res?.gasUsed); - res = await (await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await ERC20TokenOnMainnet.getAddress())).wait(); + res = await (await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, ERC20TokenOnMainnet)).wait(); console.log("Registration of ERC20 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC20", async () => { - let res = await (await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 2)).wait(); + let res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 2)).wait(); console.log("First approve of ERC20 token cost:", res?.gasUsed); - res = await (await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 2)).wait(); + res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 2)).wait(); console.log("Second approve of ERC20 token cost:", res?.gasUsed); }); it("calculate erc20 deposits without eth without automatic deploy", async () => { - await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); + await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 5); - let res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + let res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); console.log("First deposit erc20 cost:", res?.gasUsed); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); console.log("Second deposit erc20 cost:", res?.gasUsed); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); console.log("Third deposit erc20 cost:", res?.gasUsed); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); console.log("Forth deposit erc20 cost:", res?.gasUsed); - res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 1)).wait(); + res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); console.log("Deposit all remaining approved erc20 tokens cost:", res?.gasUsed); }); it("calculate erc20 deposits of all approved tokens without eth without automatic deploy", async () => { - await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); + await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 5); - const res = await (await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), 5)).wait(); + const res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 5)).wait(); console.log("Deposit all approved erc20 tokens at once cost:", res?.gasUsed); }); }); describe("ERC721 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await ERC721TokenOnMainnet.getAddress(), await ERC721TokenOnSchain.getAddress())).wait(); + let res = await (await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, ERC721TokenOnMainnet, ERC721TokenOnSchain)).wait(); console.log("Registration of ERC721 token in TokenManager cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, await ERC721TokenOnMainnet.getAddress())).wait(); + res = await (await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, ERC721TokenOnMainnet)).wait(); console.log("Registration of ERC721 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC721", async () => { - let res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1)).wait(); + let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1)).wait(); console.log("First transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2)).wait(); console.log("Second transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3)).wait(); console.log("Third transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4)).wait(); console.log("Forth transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5)).wait(); console.log("Fifth transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 6)).wait(); console.log("Sixth transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 7)).wait(); console.log("Seventh transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 8)).wait(); console.log("Eighth transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 9)).wait(); console.log("Ninth transfer of ERC721 token cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10)).wait(); console.log("Tenth transfer of ERC721 token cost:", res?.gasUsed); }); it("calculate erc721 deposits without eth without automatic deploy", async () => { - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10); - - let res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 1)).wait(); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 6); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 7); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 8); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 9); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10); + + let res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 1)).wait(); console.log("First deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 2)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 2)).wait(); console.log("Second deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 3)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 3)).wait(); console.log("Third deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 4)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 4)).wait(); console.log("Forth deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 5)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 5)).wait(); console.log("Fifth deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 6)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 6)).wait(); console.log("Sixth deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 7)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 7)).wait(); console.log("Seventh deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 8)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 8)).wait(); console.log("Eighth deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 9)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 9)).wait(); console.log("Ninth deposit erc721 cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 10)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 10)).wait(); console.log("Tenth deposit erc721 cost:", res?.gasUsed); }); it("calculate erc721 deposits without eth without automatic deploy and approve each time", async () => { - let res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1)).wait(); + let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1)).wait(); console.log("First approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 1)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 1)).wait(); console.log("First deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2)).wait(); console.log("Second approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 2)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 2)).wait(); console.log("Second deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3)).wait(); console.log("Third approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 3)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 3)).wait(); console.log("Third deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4)).wait(); console.log("Forth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 4)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 4)).wait(); console.log("Forth deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5)).wait(); console.log("Fifth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 5)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 5)).wait(); console.log("Fifth deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 6)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 6)).wait(); console.log("Sixth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 6)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 6)).wait(); console.log("Sixth deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 7)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 7)).wait(); console.log("Seventh approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 7)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 7)).wait(); console.log("Seventh deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 8)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 8)).wait(); console.log("Eighth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 8)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 8)).wait(); console.log("Eighth deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 9)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 9)).wait(); console.log("Ninth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 9)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 9)).wait(); console.log("Ninth deposit erc721 cost:", res?.gasUsed); - res = await (await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 10)).wait(); + res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10)).wait(); console.log("Tenth approve of ERC721 token cost:", res?.gasUsed); - res = await (await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), 10)).wait(); + res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 10)).wait(); console.log("Tenth deposit erc721 cost:", res?.gasUsed); }); }); describe("ERC1155 init", async () => { beforeEach(async () => { - let res = await (await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await ERC1155TokenOnMainnet.getAddress(), await ERC1155TokenOnSchain.getAddress())).wait(); + let res = await (await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, ERC1155TokenOnMainnet, ERC1155TokenOnSchain)).wait(); console.log("Registration of ERC1155 token in TokenManager cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, await ERC1155TokenOnMainnet.getAddress())).wait(); + res = await (await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, ERC1155TokenOnMainnet)).wait(); console.log("Registration of ERC1155 token in DepositBox cost:", res?.gasUsed); }); it("calculate registration and approve ERC1155", async () => { - const res = await (await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true)).wait(); + const res = await (await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true)).wait(); console.log("Approve ERC1155 token cost:", res?.gasUsed); }); it("calculate erc1155 deposits without eth without automatic deploy", async () => { - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true); - let res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 1, 1)).wait(); + let res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 1, 1)).wait(); console.log("First deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 2, 2)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 2, 2)).wait(); console.log("Second deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 3, 3)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 3, 3)).wait(); console.log("Third deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 4, 4)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 4, 4)).wait(); console.log("Forth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 5, 5)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 5, 5)).wait(); console.log("Fifth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 6, 6)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 6, 6)).wait(); console.log("Sixth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 7, 7)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 7, 7)).wait(); console.log("Seventh deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 8, 8)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 8, 8)).wait(); console.log("Eighth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 9, 9)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 9, 9)).wait(); console.log("Ninth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), 10, 10)).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 10, 10)).wait(); console.log("Tenth deposit erc1155 cost:", res?.gasUsed); }); it("calculate erc1155 deposits batches without eth without automatic deploy", async () => { - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true); - let res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); + let res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); console.log("First deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); console.log("Second deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1])).wait(); console.log("Third deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1])).wait(); console.log("Forth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1])).wait(); console.log("Fifth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [6, 7, 8, 9, 10], [1, 1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [6, 7, 8, 9, 10], [1, 1, 1, 1, 1])).wait(); console.log("Sixth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [7, 8, 9, 10], [1, 1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [7, 8, 9, 10], [1, 1, 1, 1])).wait(); console.log("Seventh deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [8, 9, 10], [1, 1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [8, 9, 10], [1, 1, 1])).wait(); console.log("Eighth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [9, 10], [1, 1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [9, 10], [1, 1])).wait(); console.log("Ninth deposit erc1155 cost:", res?.gasUsed); - res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), [10], [1])).wait(); + res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [10], [1])).wait(); console.log("Tenth deposit erc1155 cost:", res?.gasUsed); }); }); @@ -577,8 +577,8 @@ describe("Gas calculation", () => { async function getEthMessage() { return { data: await messages.encodeTransferEthMessage(user.address, "1000000000000000000"), - destinationContract: await depositBoxEth.getAddress(), - sender: await tokenManagerEth.getAddress(), + destinationContract: depositBoxEth, + sender: tokenManagerEth, }; } @@ -812,17 +812,17 @@ describe("Gas calculation", () => { describe("ERC20 Token registered and approved", async () => { - // prepare exit message of erc20 token - await TokenManager.exitToMainERC20(await ERC20TokenOnMainnet.getAddress(), amount, {from: user}); + // prepare exit message of erc20 token - await TokenManager.exitToMainERC20(ERC20TokenOnMainnet, amount, {from: user}); async function getERC20Message(amount: number) { return { - data: await messages.encodeTransferErc20Message(await ERC20TokenOnMainnet.getAddress(), user.address, amount), - destinationContract: await depositBoxERC20.getAddress(), - sender: await tokenManagerERC20.getAddress() + data: await messages.encodeTransferErc20Message(ERC20TokenOnMainnet, user.address, amount), + destinationContract: depositBoxERC20, + sender: tokenManagerERC20 }; } async function sendERC20(amount: number) { - await depositBoxERC20.connect(user).depositERC20(schainName, await ERC20TokenOnMainnet.getAddress(), amount); + await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, amount); } async function checkBalance() { @@ -830,9 +830,9 @@ describe("Gas calculation", () => { } beforeEach(async () => { - await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, await ERC20TokenOnMainnet.getAddress(), await ERC20TokenOnSchain.getAddress()); - await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, await ERC20TokenOnMainnet.getAddress()); - await ERC20TokenOnMainnet.connect(user).approve(await depositBoxERC20.getAddress(), 5); + await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, ERC20TokenOnMainnet, ERC20TokenOnSchain); + await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, ERC20TokenOnMainnet); + await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 5); }); afterEach(async() => { @@ -919,17 +919,17 @@ describe("Gas calculation", () => { describe("ERC721 Token registered and approved", async() => { - // prepare exit message of erc721 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, {from: user}); + // prepare exit message of erc721 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet, tokenId, {from: user}); async function getERC721Message(tokenId: number) { return { - data: await messages.encodeTransferErc721Message(await ERC721TokenOnMainnet.getAddress(), user.address, tokenId), - destinationContract: await depositBoxERC721.getAddress(), - sender: await tokenManagerERC721.getAddress() + data: await messages.encodeTransferErc721Message(ERC721TokenOnMainnet, user.address, tokenId), + destinationContract: depositBoxERC721, + sender: tokenManagerERC721 }; } async function sendERC721(tokenId: number) { - await depositBoxERC721.connect(user).depositERC721(schainName, await ERC721TokenOnMainnet.getAddress(), tokenId); + await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, tokenId); } async function checkBalance() { @@ -941,13 +941,13 @@ describe("Gas calculation", () => { } beforeEach(async() => { - await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, await ERC721TokenOnMainnet.getAddress(), await ERC721TokenOnSchain.getAddress()); - await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, await ERC721TokenOnMainnet.getAddress()); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 1); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 2); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 3); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 4); - await ERC721TokenOnMainnet.connect(user).approve(await depositBoxERC721.getAddress(), 5); + await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, ERC721TokenOnMainnet, ERC721TokenOnSchain); + await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, ERC721TokenOnMainnet); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4); + await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5); }); afterEach(async() => { @@ -1054,30 +1054,30 @@ describe("Gas calculation", () => { describe("ERC1155 Token registered and approved", async() => { - // prepare exit message of erc1155 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, amount, {from: user}); + // prepare exit message of erc1155 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet, tokenId, amount, {from: user}); async function getERC1155Message(tokenId: number, amount: number) { return { - data: await messages.encodeTransferErc1155Message(await ERC1155TokenOnMainnet.getAddress(), user.address, tokenId, amount), - destinationContract: await depositBoxERC1155.getAddress(), - sender: await tokenManagerERC1155.getAddress() + data: await messages.encodeTransferErc1155Message(ERC1155TokenOnMainnet, user.address, tokenId, amount), + destinationContract: depositBoxERC1155, + sender: tokenManagerERC1155 }; } - // prepare exit batch message of erc1155 token - await TokenManager.exitToMainERC721(await ERC721TokenOnMainnet.getAddress(), tokenId, amounts, {from: user}); + // prepare exit batch message of erc1155 token - await TokenManager.exitToMainERC721(ERC721TokenOnMainnet, tokenId, amounts, {from: user}); async function getERC1155BatchMessage(tokenIds: number[], amounts: number[]) { return { - data: await messages.encodeTransferErc1155BatchMessage(await ERC1155TokenOnMainnet.getAddress(), user.address, tokenIds, amounts), - destinationContract: await depositBoxERC1155.getAddress(), - sender: await tokenManagerERC1155.getAddress() + data: await messages.encodeTransferErc1155BatchMessage(ERC1155TokenOnMainnet, user.address, tokenIds, amounts), + destinationContract: depositBoxERC1155, + sender: tokenManagerERC1155 }; } async function sendERC1155(tokenId: number, amount: number) { - await depositBoxERC1155.connect(user).depositERC1155(schainName, await ERC1155TokenOnMainnet.getAddress(), tokenId, amount); + await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, tokenId, amount); } async function sendERC1155Batch(tokenIds: number[], amounts: number[]) { - await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, await ERC1155TokenOnMainnet.getAddress(), tokenIds, amounts); + await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, tokenIds, amounts); } async function checkBalance() { @@ -1090,9 +1090,9 @@ describe("Gas calculation", () => { } beforeEach(async() => { - await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, await ERC1155TokenOnMainnet.getAddress(), await ERC1155TokenOnSchain.getAddress()); - await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, await ERC1155TokenOnMainnet.getAddress()); - await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(await depositBoxERC1155.getAddress(), true); + await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, ERC1155TokenOnMainnet, ERC1155TokenOnSchain); + await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, ERC1155TokenOnMainnet); + await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true); }); afterEach(async() => { diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index 6176c07e5..f1f83aae3 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -24,7 +24,7 @@ */ import chalk from "chalk"; import { promises as fs } from 'fs'; -import { Interface } from 'ethers'; +import { AddressLike, Interface } from 'ethers'; import { ethers, upgrades } from "hardhat"; import { MessageProxyForMainnet, Linker, ContractManager, CommunityPool } from "../typechain"; import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; @@ -91,7 +91,7 @@ async function setVersion(messageProxy: MessageProxyForMainnet, version: string) } } -async function deployContract(name: string, args: unknown[], initializer: string) { +async function deployContract(name: string, args: string[], initializer: string) { console.log("Deploy", name); const factory = await getContractFactory(name); const proxy = await upgrades.deployProxy(factory, args, { initializer }); @@ -102,10 +102,10 @@ async function deployContract(name: string, args: unknown[], initializer: string return proxy; } -async function registerContracts(linker: Linker, messageProxy: MessageProxyForMainnet, addresses: string[]) { - for (const address of addresses) { - await (await linker.registerMainnetContract(address)).wait(); - await (await messageProxy.registerExtraContractForAll(address)).wait(); +async function registerContracts(linker: Linker, messageProxy: MessageProxyForMainnet, proxies: AddressLike[]) { + for (const proxy of proxies) { + await (await linker.registerMainnetContract(proxy)).wait(); + await (await messageProxy.registerExtraContractForAll(proxy)).wait(); } } @@ -120,17 +120,15 @@ async function deployMessageProxyForMainnet( ): Promise { const [owner] = await ethers.getSigners(); const contractManager = await getContractManager(); - const contractManagerAddress = await contractManager.getAddress(); const messageProxyForMainnet = await deployContract( "MessageProxyForMainnet", - [contractManagerAddress], + [await contractManager.getAddress()], 'initialize(address)' ) as unknown as MessageProxyForMainnet; - const messageProxyForMainetAddress = await messageProxyForMainnet.getAddress(); - await contractManager.setContractsAddress("MessageProxyForMainnet", messageProxyForMainetAddress); + await contractManager.setContractsAddress("MessageProxyForMainnet", messageProxyForMainnet); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(), owner.address); deployed.set("MessageProxyForMainnet", { - address: messageProxyForMainetAddress, + address: await messageProxyForMainnet.getAddress(), interface: messageProxyForMainnet.interface }); return messageProxyForMainnet; @@ -155,13 +153,12 @@ async function deployLinker( ], 'initialize(address,address)' ) as unknown as Linker; - const linkerAddress = await linker.getAddress(); - await contractManager.setContractsAddress("Linker", linkerAddress); - await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), linkerAddress); - await registerContracts(linker, messageProxyForMainnet, [linkerAddress]); + await contractManager.setContractsAddress("Linker", linker); + await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), linker); + await registerContracts(linker, messageProxyForMainnet, [linker]); deployed.set("Linker", { - address: linkerAddress, + address: await linker.getAddress(), interface: linker.interface }); return linker; @@ -188,13 +185,12 @@ async function deployCommunityPool( ], 'initialize(address,address,address)' ) as unknown as CommunityPool; - const communityPoolAddress = await communityPool.getAddress(); - await contractManager.setContractsAddress("CommunityPool", communityPoolAddress); - await messageProxyForMainnet.setCommunityPool(communityPoolAddress); - await registerContracts(linker, messageProxyForMainnet, [communityPoolAddress]); + await contractManager.setContractsAddress("CommunityPool", communityPool); + await messageProxyForMainnet.setCommunityPool(communityPool); + await registerContracts(linker, messageProxyForMainnet, [communityPool]); deployed.set("CommunityPool", { - address: communityPoolAddress, + address: await communityPool.getAddress(), interface: communityPool.interface }); return communityPool; @@ -222,11 +218,10 @@ async function deployDepositBoxes( ], 'initialize(address,address,address)' ); - const proxyAddress = await proxy.getAddress(); - await registerContracts(linker, messageProxyForMainnet, [proxyAddress]); - await contractManager.setContractsAddress(contract, proxyAddress); + await registerContracts(linker, messageProxyForMainnet, [proxy]); + await contractManager.setContractsAddress(contract, proxy); deployed.set(contract, { - address: proxyAddress, + address: await proxy.getAddress(), interface: proxy.interface }); } diff --git a/migrations/deploySkaleManagerComponents.ts b/migrations/deploySkaleManagerComponents.ts index 2aa577f83..2bfba7d7f 100644 --- a/migrations/deploySkaleManagerComponents.ts +++ b/migrations/deploySkaleManagerComponents.ts @@ -62,58 +62,65 @@ async function main() { console.log("Deploy ContractManager"); const contractManagerFactory = await ethers.getContractFactory("ContractManager"); const contractManager = await contractManagerFactory.deploy(); - console.log("Contract ContractManager deployed to", await contractManager.getAddress()); + const contractManagerAddress = await contractManager.getAddress(); + console.log("Contract ContractManager deployed to", contractManagerAddress); console.log("Deploy Schains"); const schainsFactory = await ethers.getContractFactory("Schains"); const schains = await schainsFactory.deploy(); - console.log("Contract Schains deployed to", await schains.getAddress()); + const schainsAddress = await schains.getAddress(); + console.log("Contract Schains deployed to", schainsAddress); console.log("Deploy SchainsInternal"); const schainsInternalFactory = await ethers.getContractFactory("SchainsInternal"); const schainsInternal = await schainsInternalFactory.deploy(); - console.log("Contract SchainsInternal deployed to", await schainsInternal.getAddress()); + const schainsInternalAddress = await schainsInternal.getAddress(); + console.log("Contract SchainsInternal deployed to", schainsInternalAddress); console.log("Deploy Wallets"); const walletsFactory = await ethers.getContractFactory("Wallets"); const wallets = await walletsFactory.deploy(); - console.log("Contract Wallets deployed to", await wallets.getAddress()); + const walletsAddress = await wallets.getAddress(); + console.log("Contract Wallets deployed to", walletsAddress); console.log("Deploy SkaleVerifier"); const skaleVerifierFactory = await ethers.getContractFactory("SkaleVerifierMock"); const skaleVerifier = await skaleVerifierFactory.deploy(); - console.log("Contract SkaleVerifier deployed to", await skaleVerifier.getAddress()); - + const skaleVerifierAddress = await skaleVerifier.getAddress(); + console.log("Contract SkaleVerifier deployed to", skaleVerifierAddress); + console.log("Deploy KeyStorage"); const keyStorageFactory = await ethers.getContractFactory("KeyStorageMock"); const keyStorage = await keyStorageFactory.deploy() as KeyStorageMock; - console.log("Contract KeyStorage deployed to", await keyStorage.getAddress()); + const keyStorageAddress = await keyStorage.getAddress(); + console.log("Contract KeyStorage deployed to", keyStorageAddress); console.log("Deploy Nodes"); const nodesFactory = await ethers.getContractFactory("Nodes"); const nodes = await nodesFactory.deploy(); - console.log("Contract Nodes deployed to", await nodes.getAddress()); + const nodesAddress = await nodes.getAddress(); + console.log("Contract Nodes deployed to", nodesAddress); console.log("Will set dependencies"); - await schains.addContractManager( await contractManager.getAddress() ); - console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract Schains", await schains.getAddress(), "\n"); - await schainsInternal.addContractManager( await contractManager.getAddress() ); - console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract SchainsInternal", await schainsInternal.getAddress(), "\n"); - await wallets.addContractManager( await contractManager.getAddress() ); - console.log("Add ContractManager address", await contractManager.getAddress(), "as ContractManager to Contract Wallets", await wallets.getAddress(), "\n"); - await contractManager.setContractsAddress( "Schains", await schains.getAddress() ); - console.log("Set Schains", await schains.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); - await contractManager.setContractsAddress( "SchainsInternal", await schainsInternal.getAddress() ); - console.log("Set SchainsInternal", await schainsInternal.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); - await contractManager.setContractsAddress( "Wallets", await wallets.getAddress() ); - console.log("Set Wallets", await wallets.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); - await contractManager.setContractsAddress( "SkaleVerifier", await skaleVerifier.getAddress() ); - console.log("Set SkaleVerifier", await skaleVerifier.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); - await contractManager.setContractsAddress( "KeyStorage", await keyStorage.getAddress() ); - console.log("Set KeyStorage", await keyStorage.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); - await contractManager.setContractsAddress( "Nodes", await nodes.getAddress() ); - console.log("Set Nodes", await nodes.getAddress(), "to ContractManager", await contractManager.getAddress(), "\n"); + await schains.addContractManager(contractManager); + console.log("Add ContractManager address", contractManagerAddress, "as ContractManager to Contract Schains", schainsAddress, "\n"); + await schainsInternal.addContractManager(contractManager); + console.log("Add ContractManager address", contractManagerAddress, "as ContractManager to Contract SchainsInternal", schainsInternalAddress, "\n"); + await wallets.addContractManager(contractManager); + console.log("Add ContractManager address", contractManagerAddress, "as ContractManager to Contract Wallets", walletsAddress, "\n"); + await contractManager.setContractsAddress("Schains", schains); + console.log("Set Schains", schainsAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("SchainsInternal", schainsInternal); + console.log("Set SchainsInternal", schainsInternalAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("Wallets", wallets); + console.log("Set Wallets", walletsAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("SkaleVerifier", skaleVerifier); + console.log("Set SkaleVerifier", skaleVerifierAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("KeyStorage", keyStorage); + console.log("Set KeyStorage", keyStorageAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("Nodes", nodes); + console.log("Set Nodes", nodesAddress, "to ContractManager", contractManagerAddress, "\n"); const nodeAddress1 = new Wallet(process.env.PRIVATE_KEY_FOR_ETHEREUM).connect(ethers.provider); const nodeAddress2 = new Wallet(process.env.PRIVATE_KEY_FOR_SCHAIN).connect(ethers.provider); await owner.sendTransaction({to: nodeAddress1.address, value: ethers.parseEther("1")}); @@ -156,18 +163,18 @@ async function main() { } }; await keyStorage.setBlsCommonPublicKeyForSchain(schainHash, BLSPublicKey ); - console.log("Set common public key in KeyStorage contract", await keyStorage.getAddress(), "\n"); + console.log("Set common public key in KeyStorage contract", keyStorageAddress, "\n"); await wallets.rechargeSchainWallet(schainHash, { value: "10000000000000000000" } ); // originally it was 1000000000000000000 = 1ETH - console.log("Recharge schain wallet in Wallets contract", await wallets.getAddress(), "\n"); + console.log("Recharge schain wallet in Wallets contract", walletsAddress, "\n"); const jsonObject = { - contract_manager_address: await contractManager.getAddress(), + contract_manager_address: contractManagerAddress, contract_manager_abi: getAbi(contractManager.interface), - schains_internal_address: await schainsInternal.getAddress(), + schains_internal_address: schainsInternalAddress, schains_internal_abi: getAbi(schainsInternal.interface), - key_storage_address: await keyStorage.getAddress(), + key_storage_address: keyStorageAddress, key_storage_abi: getAbi(keyStorage.interface), - wallets_address: await wallets.getAddress(), + wallets_address: walletsAddress, wallets_abi: getAbi(wallets.interface) }; diff --git a/migrations/generateManifest.ts b/migrations/generateManifest.ts index 046071c65..4506cf827 100644 --- a/migrations/generateManifest.ts +++ b/migrations/generateManifest.ts @@ -148,12 +148,12 @@ export async function manifestSetup(pathToManifest: string) { try { await fs.unlink(correctManifestPath); console.log("Current Manifest file removed"); - } catch (e) { - console.log("Could not remove current manifest file"); + } catch { + console.error("Could not remove current manifest file"); process.exit(1); } - } catch (e) { - console.log("No current Manifest file detected"); + } catch { + console.error("No current Manifest file detected"); } try { await fs.access( pathToManifest ); @@ -161,12 +161,12 @@ export async function manifestSetup(pathToManifest: string) { try { await fs.copyFile( pathToManifest, correctManifestPath ); console.log("New Manifest file setup"); - } catch (e) { - console.log("Could not setup new Manifest file"); + } catch { + console.error("Could not setup new Manifest file"); process.exit(1); } - } catch (e) { - console.log("No new Manifest file detected"); + } catch { + console.error("No new Manifest file detected"); process.exit(1); } } diff --git a/migrations/transferOwnership.ts b/migrations/transferOwnership.ts index c7010cb2d..a04604453 100644 --- a/migrations/transferOwnership.ts +++ b/migrations/transferOwnership.ts @@ -60,7 +60,7 @@ export async function transferOwnership(contractNamesToTransfer: string[]) const safeMock = await safeMockFactory.attach(adminOwner) as SafeMock; try { await (await safeMock.transferProxyAdminOwnership(proxyAdmin.address, deployer.address)).wait(); - } catch (e) { + } catch { console.log(chalk.red("Could not run transferProxyAdminOwnership in SafeMock")); process.exit(1); } diff --git a/package.json b/package.json index e964fe613..a57e99ae7 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ "@types/minimist": "^1.2.0", "@types/mocha": "^9.1.0", "@types/sinon-chai": "^3.2.5", - "@typescript-eslint/eslint-plugin": "^6.2.1", - "@typescript-eslint/parser": "^6.2.1", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", "chai": "^4.2.0", "chai-almost": "^1.0.1", "chai-as-promised": "^7.1.1", diff --git a/test-tokens/hardhat.config.ts b/test-tokens/hardhat.config.ts index 324f05be1..52dee95e6 100644 --- a/test-tokens/hardhat.config.ts +++ b/test-tokens/hardhat.config.ts @@ -37,7 +37,7 @@ function validateInteger( value, radix ) { ( !isNaN( parseInt( value, radix ) ) ) ) return true; - } catch ( err ) { + } catch { return false; } } @@ -48,7 +48,7 @@ function toInteger( value, radix ) { if( !validateInteger( value, radix ) ) return NaN; return parseInt( value, radix ); - } catch ( err ) { + } catch { return false; } } @@ -77,7 +77,7 @@ function verifyArgumentIsArrayOfIntegers( joArg ) { newValue[index] = toInteger( newValue[index], undefined ); } return newValue; - } catch ( err ) { + } catch { console.log( "(OWASP) CRITICAL ERROR: value " + joArg.value + " of argument " + joArg.name + " must be valid integer array" ); process.exit( 126 ); } diff --git a/test/CommunityLocker.ts b/test/CommunityLocker.ts index 088b67b0c..0a88dfd22 100644 --- a/test/CommunityLocker.ts +++ b/test/CommunityLocker.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { CommunityLocker, MessageProxyForSchainWithoutSignature, diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index b7d07b5f7..23d541f63 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -10,8 +10,8 @@ import { import { getBalance } from "./utils/helper"; -import chai = require("chai"); -import chaiAlmost = require("chai-almost"); +import chai from "chai"; +import chaiAlmost from "chai-almost"; chai.should(); chai.use(chaiAsPromised); @@ -33,6 +33,8 @@ import { BigNumberish, toNumber } from "ethers"; import { expect } from "chai"; import { deployMessages } from "./utils/deploy/messages"; +/* eslint-disable @typescript-eslint/no-unused-expressions */ + describe("CommunityPool", () => { let deployer: SignerWithAddress; let user: SignerWithAddress; diff --git a/test/DepositBoxERC1155.ts b/test/DepositBoxERC1155.ts index 34257c362..27e5d77a2 100644 --- a/test/DepositBoxERC1155.ts +++ b/test/DepositBoxERC1155.ts @@ -36,8 +36,8 @@ import { } from "../typechain"; import { getPublicKey, getBalance } from "./utils/helper"; -import chai = require("chai"); -import chaiAlmost = require("chai-almost"); +import chai from "chai"; +import chaiAlmost from "chai-almost"; chai.should(); chai.use(chaiAsPromised); diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index df7d8cb8a..3a03212fc 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -35,7 +35,7 @@ import { } from "../typechain"; import { getPublicKey, stringToHex } from "./utils/helper"; -import chai = require("chai"); +import chai from "chai"; chai.should(); chai.use(chaiAsPromised); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index 998634fd0..bcb67895d 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -36,8 +36,8 @@ import { } from "../typechain"; import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; -import chai = require("chai"); -import chaiAlmost = require("chai-almost"); +import chai from "chai"; +import chaiAlmost from "chai-almost"; chai.should(); chai.use(chaiAsPromised); diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index 300827e21..e4f43349a 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -36,8 +36,8 @@ import { } from "../typechain"; import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; -import chai = require("chai"); -import chaiAlmost = require("chai-almost"); +import chai from "chai"; +import chaiAlmost from "chai-almost"; chai.should(); chai.use(chaiAsPromised); diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 7c2e10909..30a6c56c4 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -35,8 +35,8 @@ import { } from "../typechain"; import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; -import chai = require("chai"); -import chaiAlmost = require("chai-almost"); +import chai from "chai"; +import chaiAlmost from "chai-almost"; chai.should(); chai.use(chaiAsPromised); diff --git a/test/ERC20OnChain.ts b/test/ERC20OnChain.ts index 1da909288..7ed00c242 100644 --- a/test/ERC20OnChain.ts +++ b/test/ERC20OnChain.ts @@ -1,5 +1,5 @@ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC20OnChain } from "../typechain"; diff --git a/test/ERC721OnChain.ts b/test/ERC721OnChain.ts index 9aca07e15..0a6d6d052 100644 --- a/test/ERC721OnChain.ts +++ b/test/ERC721OnChain.ts @@ -1,5 +1,5 @@ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC721OnChain } from "../typechain"; diff --git a/test/Linker.ts b/test/Linker.ts index a34b5d514..fd2dab703 100644 --- a/test/Linker.ts +++ b/test/Linker.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ContractManager, DepositBoxEth, diff --git a/test/MessageProxy.ts b/test/MessageProxy.ts index f5295aa39..aab09698a 100644 --- a/test/MessageProxy.ts +++ b/test/MessageProxy.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { DepositBoxEth, ContractManager, diff --git a/test/TokenManagerERC1155.ts b/test/TokenManagerERC1155.ts index fbade719c..f9bf5ea39 100644 --- a/test/TokenManagerERC1155.ts +++ b/test/TokenManagerERC1155.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC1155OnChain, TokenManagerERC1155, diff --git a/test/TokenManagerERC20.ts b/test/TokenManagerERC20.ts index b5984d501..cb47f243b 100644 --- a/test/TokenManagerERC20.ts +++ b/test/TokenManagerERC20.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC20OnChain, MessagesTester, @@ -1242,8 +1242,8 @@ describe("TokenManagerERC20", () => { const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); const tokenManagerErc20Z = await deployTokenManagerERC20(newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc20OnTargetZChain.connect(deployer).grantRole(await erc20OnTargetZChain.MINTER_ROLE(), await tokenManagerErc20Z.getAddress()); - await tokenManagerLinkerZ.registerTokenManager(await tokenManagerErc20Z.getAddress()); + await erc20OnTargetZChain.connect(deployer).grantRole(await erc20OnTargetZChain.MINTER_ROLE(), tokenManagerErc20Z); + await tokenManagerLinkerZ.registerTokenManager(tokenManagerErc20Z); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); diff --git a/test/TokenManagerERC721.ts b/test/TokenManagerERC721.ts index f408f4d80..23156d507 100644 --- a/test/TokenManagerERC721.ts +++ b/test/TokenManagerERC721.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC721OnChain, TokenManagerERC721, @@ -213,9 +213,9 @@ describe("TokenManagerERC721", () => { tokenManagerLinker2 = await deployTokenManagerLinker(messageProxyForSchain2, deployer.address); communityLocker2 = await deployCommunityLocker(newSchainName, messageProxyForSchain2, tokenManagerLinker2, fakeCommunityPool); tokenManagerERC7212 = await deployTokenManagerERC721(newSchainName, messageProxyForSchain2, tokenManagerLinker2, communityLocker2, fakeDepositBox); - await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), await tokenManagerERC7212.getAddress()); - await tokenManagerLinker2.registerTokenManager(await tokenManagerERC7212.getAddress()); - await messageProxyForSchain2.registerExtraContractForAll(await tokenManagerERC7212.getAddress()); + await erc721OnTargetChain.connect(deployer).grantRole(await erc721OnTargetChain.MINTER_ROLE(), tokenManagerERC7212); + await tokenManagerLinker2.registerTokenManager(tokenManagerERC7212); + await messageProxyForSchain2.registerExtraContractForAll(tokenManagerERC7212); }); it("should invoke `transferToSchainERC721` without mistakes", async () => { @@ -1108,8 +1108,8 @@ describe("TokenManagerERC721", () => { const tokenManagerLinkerZ = await deployTokenManagerLinker(messageProxyForSchainZ, deployer.address); const communityLockerZ = await deployCommunityLocker(newSchainName, messageProxyForSchainZ, tokenManagerLinkerZ, fakeCommunityPool); const tokenManagerERC721Z = await deployTokenManagerERC721(newSchainNameZ, messageProxyForSchainZ, tokenManagerLinkerZ, communityLockerZ, fakeDepositBox); - await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), await tokenManagerERC721Z.getAddress()); - await tokenManagerLinkerZ.registerTokenManager(await tokenManagerERC721Z.getAddress()); + await erc721OnTargetZChain.connect(deployer).grantRole(await erc721OnTargetZChain.MINTER_ROLE(), tokenManagerERC721Z); + await tokenManagerLinkerZ.registerTokenManager(tokenManagerERC721Z); await messageProxyForSchain2.connect(deployer).grantRole(await messageProxyForSchain2.CHAIN_CONNECTOR_ROLE(), deployer.address); await messageProxyForSchain2.connect(deployer).addConnectedChain(newSchainNameZ); diff --git a/test/TokenManagerERC721WithMetadata.ts b/test/TokenManagerERC721WithMetadata.ts index a886f8e73..3ffacd83a 100644 --- a/test/TokenManagerERC721WithMetadata.ts +++ b/test/TokenManagerERC721WithMetadata.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { ERC721OnChain, TokenManagerERC721WithMetadata, diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index 9b5b85e5d..eb55efebd 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { CommunityLocker, EthErc20, @@ -54,6 +54,8 @@ import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; const schainName = "TestSchain"; const schainHash = ethers.id(schainName); +/* eslint-disable @typescript-eslint/no-unused-expressions */ + describe("TokenManagerEth", () => { let deployer: SignerWithAddress; let user: SignerWithAddress; diff --git a/test/TokenManagerLinker.ts b/test/TokenManagerLinker.ts index c6951dff7..b7d3540e7 100644 --- a/test/TokenManagerLinker.ts +++ b/test/TokenManagerLinker.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { CommunityLocker, TokenManagerEth, @@ -83,10 +83,10 @@ describe("TokenManagerLinker", () => { tokenManagerERC20 = await deployTokenManagerERC20(schainName, messageProxy, linker, communityLocker, fakeDepositBox); tokenManagerERC721 = await deployTokenManagerERC721(schainName, messageProxy, linker, communityLocker, fakeDepositBox); const chainConnectorRole = await messageProxy.CHAIN_CONNECTOR_ROLE(); - await messageProxy.connect(deployer).grantRole(chainConnectorRole, await linker.getAddress()); + await messageProxy.connect(deployer).grantRole(chainConnectorRole, linker); const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); await messageProxy.connect(deployer).grantRole(extraContractRegistrarRole, deployer.address); - await messageProxy.registerExtraContractForAll(await linker.getAddress()); + await messageProxy.registerExtraContractForAll(linker); }); it("should connect schain", async () => { diff --git a/test/extensions/ERC721MintingFromSchainToMainnet.ts b/test/extensions/ERC721MintingFromSchainToMainnet.ts index d7199479b..9c466b6aa 100644 --- a/test/extensions/ERC721MintingFromSchainToMainnet.ts +++ b/test/extensions/ERC721MintingFromSchainToMainnet.ts @@ -25,7 +25,7 @@ // import { solidity } from "ethereum-waffle"; import chaiAsPromised from "chai-as-promised"; -import chai = require("chai"); +import chai from "chai"; import { CommunityLocker, CommunityPool, @@ -198,7 +198,7 @@ describe("ERC721MintingFromSchainToMainnet", () => { // await messageProxyForMainnet.registerExtraContractForAll(communityPool) // IMA schain part deployment - messageProxyForSchain = await deployMessageProxyForSchain(await keyStorage.getAddress(), schainName); + messageProxyForSchain = await deployMessageProxyForSchain(keyStorage, schainName); await keyStorage.connect(deployer).setBlsCommonPublicKey(BLSPublicKey); tokenManagerLinker = await deployTokenManagerLinker(messageProxyForSchain, await imaLinker.getAddress()); communityLocker = await deployCommunityLocker(schainName, messageProxyForSchain, tokenManagerLinker, await communityPool.getAddress()); diff --git a/test/utils/command_line.ts b/test/utils/command_line.ts index 12d10324a..5f46b6745 100644 --- a/test/utils/command_line.ts +++ b/test/utils/command_line.ts @@ -23,7 +23,7 @@ * @copyright SKALE Labs 2019-Present */ -import minimist = require("minimist"); +import minimist from "minimist"; const gasMultiplierParameter = "gas_multiplier"; diff --git a/test/utils/deploy/schain/messageProxyForSchain.ts b/test/utils/deploy/schain/messageProxyForSchain.ts index e2c9aa765..6d5de6e16 100644 --- a/test/utils/deploy/schain/messageProxyForSchain.ts +++ b/test/utils/deploy/schain/messageProxyForSchain.ts @@ -1,13 +1,13 @@ import { ethers, upgrades } from "hardhat"; -import { MessageProxyForSchain } from "../../../../typechain"; +import { KeyStorage, MessageProxyForSchain } from "../../../../typechain"; const name = "MessageProxyForSchain"; -export async function deployMessageProxyForSchain(keyStorageAddress: string, schainName: string) { +export async function deployMessageProxyForSchain(keyStorageAddress: KeyStorage, schainName: string) { const factory = await ethers.getContractFactory(name); const instance = await upgrades.deployProxy( factory, - [keyStorageAddress, schainName] + [await keyStorageAddress.getAddress(), schainName] ) as unknown as MessageProxyForSchain; return instance; -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 2a25c3916..fb427750c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,7 +30,6 @@ "migrations/submitTransactions.ts", "migrations/hotfixUpgrade.ts", "migrations/generateManifest.ts", - "gas/calculateGas.ts", "migrations/deploySchain.ts" ] } diff --git a/yarn.lock b/yarn.lock index c1516f97e..311c95554 100644 --- a/yarn.lock +++ b/yarn.lock @@ -450,14 +450,26 @@ resolved "https://registry.yarnpkg.com/@cspell/url/-/url-8.15.4.tgz#759a9832e9fd6f9fd022c4eb3031c1b28c272faa" integrity sha512-K2oZu/oLQPs5suRpLS8uu04O3YMUioSlEU1D66fRoOxzI5NzLt7i7yMg3HQHjChGa09N5bzqmrVdhmQrRZXwGg== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint-community/regexpp@^4.6.1": version "4.11.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== @@ -1420,11 +1432,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/json-schema@^7.0.12": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - "@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" @@ -1497,11 +1504,6 @@ resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/sinon-chai@^3.2.5": version "3.2.12" resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.12.tgz#c7cb06bee44a534ec84f3a5534c3a3a46fd779b6" @@ -1522,91 +1524,86 @@ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== -"@typescript-eslint/eslint-plugin@^6.2.1": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== +"@typescript-eslint/eslint-plugin@^8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz#7dc0e419c87beadc8f554bf5a42e5009ed3748dc" + integrity sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.14.0" + "@typescript-eslint/type-utils" "8.14.0" + "@typescript-eslint/utils" "8.14.0" + "@typescript-eslint/visitor-keys" "8.14.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.2.1": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.14.0.tgz#0a7e9dbc11bc07716ab2d7b1226217e9f6b51fc8" + integrity sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA== + dependencies: + "@typescript-eslint/scope-manager" "8.14.0" + "@typescript-eslint/types" "8.14.0" + "@typescript-eslint/typescript-estree" "8.14.0" + "@typescript-eslint/visitor-keys" "8.14.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz#01f37c147a735cd78f0ff355e033b9457da1f373" + integrity sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.14.0" + "@typescript-eslint/visitor-keys" "8.14.0" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== +"@typescript-eslint/type-utils@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz#455c6af30c336b24a1af28bc4f81b8dd5d74d94d" + integrity sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ== dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/typescript-estree" "8.14.0" + "@typescript-eslint/utils" "8.14.0" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.14.0.tgz#0d33d8d0b08479c424e7d654855fddf2c71e4021" + integrity sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/typescript-estree@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz#a7a3a5a53a6c09313e12fb4531d4ff582ee3c312" + integrity sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "8.14.0" + "@typescript-eslint/visitor-keys" "8.14.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/utils@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.14.0.tgz#ac2506875e03aba24e602364e43b2dfa45529dbd" + integrity sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/scope-manager" "8.14.0" + "@typescript-eslint/types" "8.14.0" + "@typescript-eslint/typescript-estree" "8.14.0" + +"@typescript-eslint/visitor-keys@8.14.0": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz#2418d5a54669af9658986ade4e6cfb7767d815ad" + integrity sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ== + dependencies: + "@typescript-eslint/types" "8.14.0" + eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -3040,7 +3037,7 @@ fast-equals@^5.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== -fast-glob@^3.0.3, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3423,18 +3420,6 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -3606,7 +3591,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -4045,7 +4030,7 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.2.3, merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -4097,13 +4082,6 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -4111,7 +4089,7 @@ minimatch@^5.0.1, minimatch@^5.1.6: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.5: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -4754,7 +4732,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: +semver@^7.3.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -5129,10 +5107,10 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-api-utils@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.0.tgz#709c6f2076e511a81557f3d07a0cbd566ae8195c" + integrity sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ== ts-command-line-args@^2.2.0: version "2.5.1" From a4183ff3df56495e3d96b2719c738e9447f34c01 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 19:03:21 +0000 Subject: [PATCH 25/45] Add SkaleManagerMock --- contracts/test/SkaleManagerMock.sol | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 contracts/test/SkaleManagerMock.sol diff --git a/contracts/test/SkaleManagerMock.sol b/contracts/test/SkaleManagerMock.sol new file mode 100644 index 000000000..e7d366c68 --- /dev/null +++ b/contracts/test/SkaleManagerMock.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +/** + * SkaleManagerMock.sol - SKALE Interchain Messaging Agent + * Copyright (C) 2024-Present SKALE Labs + * @author Artem Payvin + * + * SKALE IMA is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SKALE IMA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with SKALE IMA. If not, see . + */ + +pragma solidity 0.8.16; + +import "./TestContractManager.sol"; + +contract SkaleManager is ContractManager { + + ContractManager public contractManager; + + string public version; + + constructor(address newContractManager) { + contractManager = ContractManager(newContractManager); + } + + function setVersion(string calldata newVersion) external { + version = newVersion; + } +} From 6915f269b6d23aeb7c551584a811ad2e5f1c96bf Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 19:03:35 +0000 Subject: [PATCH 26/45] Fix deployMainnet.ts --- migrations/deployMainnet.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index f1f83aae3..e56a8fe83 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -30,6 +30,7 @@ import { MessageProxyForMainnet, Linker, ContractManager, CommunityPool } from " import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; import { skaleContracts } from "@skalenetwork/skale-contracts-ethers-v6"; +import { SkaleManager } from "../typechain/artifacts/contracts/test/SkaleManagerMock.sol"; export const depositBoxes = [ @@ -58,17 +59,24 @@ export async function getManifestFile(): Promise { } async function getContractManager() { + const [owner] = await ethers.getSigners(); const skaleManager = await getSkaleManagerInstance(); - return (await skaleManager.getContract("ContractManager")) as ContractManager; + const contractManager = (await skaleManager.getContract("ContractManager")) as unknown as ContractManager; + return contractManager; } + async function getLinker(): Promise { const contractManager = await getContractManager(); - return (await contractManager.getContract("Linker")) as unknown as Linker; + const Linker = await ethers.getContractFactory("Linker"); + const linkerAddress = await contractManager.getContract("Linker"); + return Linker.attach(linkerAddress) as Linker; } async function getMessageProxyForMainnet(): Promise { const contractManager = await getContractManager(); - return (await contractManager.getContract("MessageProxyForMainnet")) as unknown as MessageProxyForMainnet; + const MessageProxyForMainnet = await ethers.getContractFactory("MessageProxyForMainnet"); + const messageProxyForMainnetAddress = await contractManager.getContract("MessageProxyForMainnet"); + return MessageProxyForMainnet.attach(messageProxyForMainnetAddress) as MessageProxyForMainnet; } async function getSkaleManagerInstance() { @@ -125,7 +133,7 @@ async function deployMessageProxyForMainnet( [await contractManager.getAddress()], 'initialize(address)' ) as unknown as MessageProxyForMainnet; - await contractManager.setContractsAddress("MessageProxyForMainnet", messageProxyForMainnet); + await contractManager.connect(owner).setContractsAddress("MessageProxyForMainnet", messageProxyForMainnet); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.EXTRA_CONTRACT_REGISTRAR_ROLE(), owner.address); deployed.set("MessageProxyForMainnet", { address: await messageProxyForMainnet.getAddress(), @@ -143,6 +151,7 @@ async function deployLinker( } > ): Promise { + const [owner] = await ethers.getSigners(); const contractManager = await getContractManager(); const messageProxyForMainnet = await getMessageProxyForMainnet(); const linker = await deployContract( @@ -153,7 +162,7 @@ async function deployLinker( ], 'initialize(address,address)' ) as unknown as Linker; - await contractManager.setContractsAddress("Linker", linker); + await contractManager.connect(owner).setContractsAddress("Linker", linker); await messageProxyForMainnet.grantRole(await messageProxyForMainnet.CHAIN_CONNECTOR_ROLE(), linker); await registerContracts(linker, messageProxyForMainnet, [linker]); @@ -173,6 +182,7 @@ async function deployCommunityPool( } > ): Promise { + const [owner] = await ethers.getSigners(); const contractManager = await getContractManager(); const messageProxyForMainnet = await getMessageProxyForMainnet(); const linker = await getLinker(); @@ -185,7 +195,7 @@ async function deployCommunityPool( ], 'initialize(address,address,address)' ) as unknown as CommunityPool; - await contractManager.setContractsAddress("CommunityPool", communityPool); + await contractManager.connect(owner).setContractsAddress("CommunityPool", communityPool); await messageProxyForMainnet.setCommunityPool(communityPool); await registerContracts(linker, messageProxyForMainnet, [communityPool]); @@ -205,6 +215,7 @@ async function deployDepositBoxes( } > ) { + const [owner] = await ethers.getSigners(); const contractManager = await getContractManager(); const linker = await getLinker(); const messageProxyForMainnet = await getMessageProxyForMainnet(); @@ -219,7 +230,7 @@ async function deployDepositBoxes( 'initialize(address,address,address)' ); await registerContracts(linker, messageProxyForMainnet, [proxy]); - await contractManager.setContractsAddress(contract, proxy); + await contractManager.connect(owner).setContractsAddress(contract, proxy); deployed.set(contract, { address: await proxy.getAddress(), interface: proxy.interface From ba8d0032cbe1d4785ba734be8604f011910eed71 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 19:04:20 +0000 Subject: [PATCH 27/45] Add deploy of SkaleManager to deploySkaleManagerComponents script --- migrations/deploySkaleManagerComponents.ts | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/migrations/deploySkaleManagerComponents.ts b/migrations/deploySkaleManagerComponents.ts index 2bfba7d7f..593f602a7 100644 --- a/migrations/deploySkaleManagerComponents.ts +++ b/migrations/deploySkaleManagerComponents.ts @@ -29,6 +29,7 @@ import { Manifest } from "@openzeppelin/upgrades-core"; import { KeyStorageMock } from '../typechain'; import { Wallet } from 'ethers'; import { getPublicKey } from '../test/utils/helper'; +import axios from 'axios'; export function getContractKeyInAbiFile(contract: string) { return contract.replace(/([a-z0-9])(?=[A-Z])/g, '$1_').toLowerCase(); @@ -38,6 +39,16 @@ export async function getManifestFile(): Promise { return (await Manifest.forNetwork(ethers.provider)).file; } +async function getLatestVersionOfSkaleManager(): Promise { + try { + const response = await axios.get('https://raw.githubusercontent.com/skalenetwork/skale-manager/refs/heads/stable/VERSION'); + return response.data.trim(); + } catch (error) { + console.error('Failed to fetch the latest version of SkaleManager:', error); + throw error; + } +} + async function main() { const [ owner,] = await ethers.getSigners(); @@ -101,8 +112,20 @@ async function main() { const nodesAddress = await nodes.getAddress(); console.log("Contract Nodes deployed to", nodesAddress); + console.log("Deploy SkaleManager"); + const skaleManagerFactory = await ethers.getContractFactory("SkaleManager"); + const skaleManager = await skaleManagerFactory.deploy(contractManager); + const skaleManagerAddress = await skaleManager.getAddress(); + console.log("Contract SkaleManager deployed to", skaleManagerAddress); + console.log("Will set dependencies"); + const versionOfSkaleManager = await getLatestVersionOfSkaleManager(); + + await skaleManager.setVersion(versionOfSkaleManager); + console.log("Set version", versionOfSkaleManager, "to SkaleManager", skaleManagerAddress, "\n"); + await contractManager.setContractsAddress("ContractManager", contractManager); + console.log("Set ContractManager", contractManagerAddress, "to ContractManager", contractManagerAddress, "\n"); await schains.addContractManager(contractManager); console.log("Add ContractManager address", contractManagerAddress, "as ContractManager to Contract Schains", schainsAddress, "\n"); await schainsInternal.addContractManager(contractManager); @@ -121,6 +144,8 @@ async function main() { console.log("Set KeyStorage", keyStorageAddress, "to ContractManager", contractManagerAddress, "\n"); await contractManager.setContractsAddress("Nodes", nodes); console.log("Set Nodes", nodesAddress, "to ContractManager", contractManagerAddress, "\n"); + await contractManager.setContractsAddress("SkaleManager", skaleManager); + console.log("Set SkaleManager", skaleManagerAddress, "to ContractManager", contractManagerAddress, "\n"); const nodeAddress1 = new Wallet(process.env.PRIVATE_KEY_FOR_ETHEREUM).connect(ethers.provider); const nodeAddress2 = new Wallet(process.env.PRIVATE_KEY_FOR_SCHAIN).connect(ethers.provider); await owner.sendTransaction({to: nodeAddress1.address, value: ethers.parseEther("1")}); @@ -175,7 +200,9 @@ async function main() { key_storage_address: keyStorageAddress, key_storage_abi: getAbi(keyStorage.interface), wallets_address: walletsAddress, - wallets_abi: getAbi(wallets.interface) + wallets_abi: getAbi(wallets.interface), + skale_manager_address: skaleManagerAddress, + skale_manager_abi: getAbi(skaleManager.interface), }; await fs.writeFile( "data/skaleManagerComponents.json", JSON.stringify( jsonObject ) ); From 1931cdfa8c477147a167c9755749ef34a68fba3a Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 19:06:06 +0000 Subject: [PATCH 28/45] Fix linters --- contracts/test/SkaleManagerMock.sol | 7 +++++-- migrations/deployMainnet.ts | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/contracts/test/SkaleManagerMock.sol b/contracts/test/SkaleManagerMock.sol index e7d366c68..7b77e7a79 100644 --- a/contracts/test/SkaleManagerMock.sol +++ b/contracts/test/SkaleManagerMock.sol @@ -22,8 +22,11 @@ pragma solidity 0.8.16; import "./TestContractManager.sol"; +interface ISkaleManager { + function setVersion(string calldata newVersion) external; +} -contract SkaleManager is ContractManager { +contract SkaleManager is ISkaleManager, ContractManager { ContractManager public contractManager; @@ -33,7 +36,7 @@ contract SkaleManager is ContractManager { contractManager = ContractManager(newContractManager); } - function setVersion(string calldata newVersion) external { + function setVersion(string calldata newVersion) external override { version = newVersion; } } diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index e56a8fe83..d9c054f93 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -30,7 +30,6 @@ import { MessageProxyForMainnet, Linker, ContractManager, CommunityPool } from " import { getAbi, getContractFactory, verifyProxy, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; import { skaleContracts } from "@skalenetwork/skale-contracts-ethers-v6"; -import { SkaleManager } from "../typechain/artifacts/contracts/test/SkaleManagerMock.sol"; export const depositBoxes = [ @@ -59,7 +58,6 @@ export async function getManifestFile(): Promise { } async function getContractManager() { - const [owner] = await ethers.getSigners(); const skaleManager = await getSkaleManagerInstance(); const contractManager = (await skaleManager.getContract("ContractManager")) as unknown as ContractManager; return contractManager; From d10d7e1ef7c4638b5e398964bc5d59c52d56cff4 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 20:10:10 +0000 Subject: [PATCH 29/45] Add handler for transaction receipts in calculateGas.ts --- gas/calculateGas.ts | 173 ++++++++++++++++++++++-------------------- test/DepositBoxEth.ts | 7 +- 2 files changed, 95 insertions(+), 85 deletions(-) diff --git a/gas/calculateGas.ts b/gas/calculateGas.ts index 8e9bf967f..561ce1c3e 100644 --- a/gas/calculateGas.ts +++ b/gas/calculateGas.ts @@ -83,12 +83,19 @@ import { getPublicKey } from "../test/utils/helper"; import { ethers } from "hardhat"; import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { BigNumberish, Wallet, HDNodeWallet } from "ethers"; +import { BigNumberish, Wallet, HDNodeWallet, ContractTransactionReceipt } from "ethers"; import { expect } from "chai"; import { deployCommunityLocker } from "../test/utils/deploy/schain/communityLocker"; import { deployCommunityPool } from "../test/utils/deploy/mainnet/communityPool"; +function getGasUsed(res: ContractTransactionReceipt | null): BigInt { + if (!res) { + throw new Error("Transaction result is null"); + } + return res.gasUsed; +} + describe("Gas calculation", () => { let deployer: SignerWithAddress; let user: SignerWithAddress; @@ -325,84 +332,84 @@ describe("Gas calculation", () => { it("calculate eth deposits", async () => { let res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("First deposit eth cost:", res?.gasUsed); + console.log("First deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Second deposit eth cost:", res?.gasUsed); + console.log("Second deposit eth cost:", getGasUsed(res));; res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Third deposit eth cost:", res?.gasUsed); + console.log("Third deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Forth deposit eth cost:", res?.gasUsed); + console.log("Forth deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Fifth deposit eth cost:", res?.gasUsed); + console.log("Fifth deposit eth cost:", getGasUsed(res)); }); describe("ERC20 init", async () => { beforeEach(async () => { let res = await (await tokenManagerERC20.connect(schainOwner).addERC20TokenByOwner(mainnetName, ERC20TokenOnMainnet, ERC20TokenOnSchain)).wait(); - console.log("Registration of ERC20 token in TokenManager cost:", res?.gasUsed); + console.log("Registration of ERC20 token in TokenManager cost:", getGasUsed(res)); res = await (await depositBoxERC20.connect(schainOwner).addERC20TokenByOwner(schainName, ERC20TokenOnMainnet)).wait(); - console.log("Registration of ERC20 token in DepositBox cost:", res?.gasUsed); + console.log("Registration of ERC20 token in DepositBox cost:", getGasUsed(res)); }); it("calculate registration and approve ERC20", async () => { let res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 2)).wait(); - console.log("First approve of ERC20 token cost:", res?.gasUsed); + console.log("First approve of ERC20 token cost:", getGasUsed(res)); res = await (await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 2)).wait(); - console.log("Second approve of ERC20 token cost:", res?.gasUsed); + console.log("Second approve of ERC20 token cost:", getGasUsed(res)); }); it("calculate erc20 deposits without eth without automatic deploy", async () => { await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 5); let res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); - console.log("First deposit erc20 cost:", res?.gasUsed); + console.log("First deposit erc20 cost:", getGasUsed(res)); res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); - console.log("Second deposit erc20 cost:", res?.gasUsed); + console.log("Second deposit erc20 cost:", getGasUsed(res)); res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); - console.log("Third deposit erc20 cost:", res?.gasUsed); + console.log("Third deposit erc20 cost:", getGasUsed(res)); res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); - console.log("Forth deposit erc20 cost:", res?.gasUsed); + console.log("Forth deposit erc20 cost:", getGasUsed(res)); res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 1)).wait(); - console.log("Deposit all remaining approved erc20 tokens cost:", res?.gasUsed); + console.log("Deposit all remaining approved erc20 tokens cost:", getGasUsed(res)); }); it("calculate erc20 deposits of all approved tokens without eth without automatic deploy", async () => { await ERC20TokenOnMainnet.connect(user).approve(depositBoxERC20, 5); const res = await (await depositBoxERC20.connect(user).depositERC20(schainName, ERC20TokenOnMainnet, 5)).wait(); - console.log("Deposit all approved erc20 tokens at once cost:", res?.gasUsed); + console.log("Deposit all approved erc20 tokens at once cost:", getGasUsed(res)); }); }); describe("ERC721 init", async () => { beforeEach(async () => { let res = await (await tokenManagerERC721.connect(schainOwner).addERC721TokenByOwner(mainnetName, ERC721TokenOnMainnet, ERC721TokenOnSchain)).wait(); - console.log("Registration of ERC721 token in TokenManager cost:", res?.gasUsed); + console.log("Registration of ERC721 token in TokenManager cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(schainOwner).addERC721TokenByOwner(schainName, ERC721TokenOnMainnet)).wait(); - console.log("Registration of ERC721 token in DepositBox cost:", res?.gasUsed); + console.log("Registration of ERC721 token in DepositBox cost:", getGasUsed(res)); }); it("calculate registration and approve ERC721", async () => { let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1)).wait(); - console.log("First transfer of ERC721 token cost:", res?.gasUsed); + console.log("First transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2)).wait(); - console.log("Second transfer of ERC721 token cost:", res?.gasUsed); + console.log("Second transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3)).wait(); - console.log("Third transfer of ERC721 token cost:", res?.gasUsed); + console.log("Third transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4)).wait(); - console.log("Forth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Forth transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5)).wait(); - console.log("Fifth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Fifth transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 6)).wait(); - console.log("Sixth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Sixth transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 7)).wait(); - console.log("Seventh transfer of ERC721 token cost:", res?.gasUsed); + console.log("Seventh transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 8)).wait(); - console.log("Eighth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Eighth transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 9)).wait(); - console.log("Ninth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Ninth transfer of ERC721 token cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10)).wait(); - console.log("Tenth transfer of ERC721 token cost:", res?.gasUsed); + console.log("Tenth transfer of ERC721 token cost:", getGasUsed(res)); }); it("calculate erc721 deposits without eth without automatic deploy", async () => { @@ -418,132 +425,132 @@ describe("Gas calculation", () => { await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10); let res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 1)).wait(); - console.log("First deposit erc721 cost:", res?.gasUsed); + console.log("First deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 2)).wait(); - console.log("Second deposit erc721 cost:", res?.gasUsed); + console.log("Second deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 3)).wait(); - console.log("Third deposit erc721 cost:", res?.gasUsed); + console.log("Third deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 4)).wait(); - console.log("Forth deposit erc721 cost:", res?.gasUsed); + console.log("Forth deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 5)).wait(); - console.log("Fifth deposit erc721 cost:", res?.gasUsed); + console.log("Fifth deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 6)).wait(); - console.log("Sixth deposit erc721 cost:", res?.gasUsed); + console.log("Sixth deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 7)).wait(); - console.log("Seventh deposit erc721 cost:", res?.gasUsed); + console.log("Seventh deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 8)).wait(); - console.log("Eighth deposit erc721 cost:", res?.gasUsed); + console.log("Eighth deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 9)).wait(); - console.log("Ninth deposit erc721 cost:", res?.gasUsed); + console.log("Ninth deposit erc721 cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 10)).wait(); - console.log("Tenth deposit erc721 cost:", res?.gasUsed); + console.log("Tenth deposit erc721 cost:", getGasUsed(res)); }); it("calculate erc721 deposits without eth without automatic deploy and approve each time", async () => { let res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 1)).wait(); - console.log("First approve of ERC721 token cost:", res?.gasUsed); + console.log("First approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 1)).wait(); - console.log("First deposit erc721 cost:", res?.gasUsed); + console.log("First deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 2)).wait(); - console.log("Second approve of ERC721 token cost:", res?.gasUsed); + console.log("Second approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 2)).wait(); - console.log("Second deposit erc721 cost:", res?.gasUsed); + console.log("Second deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 3)).wait(); - console.log("Third approve of ERC721 token cost:", res?.gasUsed); + console.log("Third approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 3)).wait(); - console.log("Third deposit erc721 cost:", res?.gasUsed); + console.log("Third deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 4)).wait(); - console.log("Forth approve of ERC721 token cost:", res?.gasUsed); + console.log("Forth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 4)).wait(); - console.log("Forth deposit erc721 cost:", res?.gasUsed); + console.log("Forth deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 5)).wait(); - console.log("Fifth approve of ERC721 token cost:", res?.gasUsed); + console.log("Fifth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 5)).wait(); - console.log("Fifth deposit erc721 cost:", res?.gasUsed); + console.log("Fifth deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 6)).wait(); - console.log("Sixth approve of ERC721 token cost:", res?.gasUsed); + console.log("Sixth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 6)).wait(); - console.log("Sixth deposit erc721 cost:", res?.gasUsed); + console.log("Sixth deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 7)).wait(); - console.log("Seventh approve of ERC721 token cost:", res?.gasUsed); + console.log("Seventh approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 7)).wait(); - console.log("Seventh deposit erc721 cost:", res?.gasUsed); + console.log("Seventh deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 8)).wait(); - console.log("Eighth approve of ERC721 token cost:", res?.gasUsed); + console.log("Eighth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 8)).wait(); - console.log("Eighth deposit erc721 cost:", res?.gasUsed); + console.log("Eighth deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 9)).wait(); - console.log("Ninth approve of ERC721 token cost:", res?.gasUsed); + console.log("Ninth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 9)).wait(); - console.log("Ninth deposit erc721 cost:", res?.gasUsed); + console.log("Ninth deposit erc721 cost:", getGasUsed(res)); res = await (await ERC721TokenOnMainnet.connect(user).approve(depositBoxERC721, 10)).wait(); - console.log("Tenth approve of ERC721 token cost:", res?.gasUsed); + console.log("Tenth approve of ERC721 token cost:", getGasUsed(res)); res = await (await depositBoxERC721.connect(user).depositERC721(schainName, ERC721TokenOnMainnet, 10)).wait(); - console.log("Tenth deposit erc721 cost:", res?.gasUsed); + console.log("Tenth deposit erc721 cost:", getGasUsed(res)); }); }); describe("ERC1155 init", async () => { beforeEach(async () => { let res = await (await tokenManagerERC1155.connect(schainOwner).addERC1155TokenByOwner(mainnetName, ERC1155TokenOnMainnet, ERC1155TokenOnSchain)).wait(); - console.log("Registration of ERC1155 token in TokenManager cost:", res?.gasUsed); + console.log("Registration of ERC1155 token in TokenManager cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(schainOwner).addERC1155TokenByOwner(schainName, ERC1155TokenOnMainnet)).wait(); - console.log("Registration of ERC1155 token in DepositBox cost:", res?.gasUsed); + console.log("Registration of ERC1155 token in DepositBox cost:", getGasUsed(res)); }); it("calculate registration and approve ERC1155", async () => { const res = await (await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true)).wait(); - console.log("Approve ERC1155 token cost:", res?.gasUsed); + console.log("Approve ERC1155 token cost:", getGasUsed(res)); }); it("calculate erc1155 deposits without eth without automatic deploy", async () => { await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true); let res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 1, 1)).wait(); - console.log("First deposit erc1155 cost:", res?.gasUsed); + console.log("First deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 2, 2)).wait(); - console.log("Second deposit erc1155 cost:", res?.gasUsed); + console.log("Second deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 3, 3)).wait(); - console.log("Third deposit erc1155 cost:", res?.gasUsed); + console.log("Third deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 4, 4)).wait(); - console.log("Forth deposit erc1155 cost:", res?.gasUsed); + console.log("Forth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 5, 5)).wait(); - console.log("Fifth deposit erc1155 cost:", res?.gasUsed); + console.log("Fifth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 6, 6)).wait(); - console.log("Sixth deposit erc1155 cost:", res?.gasUsed); + console.log("Sixth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 7, 7)).wait(); - console.log("Seventh deposit erc1155 cost:", res?.gasUsed); + console.log("Seventh deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 8, 8)).wait(); - console.log("Eighth deposit erc1155 cost:", res?.gasUsed); + console.log("Eighth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 9, 9)).wait(); - console.log("Ninth deposit erc1155 cost:", res?.gasUsed); + console.log("Ninth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155(schainName, ERC1155TokenOnMainnet, 10, 10)).wait(); - console.log("Tenth deposit erc1155 cost:", res?.gasUsed); + console.log("Tenth deposit erc1155 cost:", getGasUsed(res)); }); it("calculate erc1155 deposits batches without eth without automatic deploy", async () => { await ERC1155TokenOnMainnet.connect(user).setApprovalForAll(depositBoxERC1155, true); let res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("First deposit erc1155 cost:", res?.gasUsed); + console.log("First deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Second deposit erc1155 cost:", res?.gasUsed); + console.log("Second deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [3, 4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Third deposit erc1155 cost:", res?.gasUsed); + console.log("Third deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [4, 5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1, 1])).wait(); - console.log("Forth deposit erc1155 cost:", res?.gasUsed); + console.log("Forth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [5, 6, 7, 8, 9, 10], [1, 1, 1, 1, 1, 1])).wait(); - console.log("Fifth deposit erc1155 cost:", res?.gasUsed); + console.log("Fifth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [6, 7, 8, 9, 10], [1, 1, 1, 1, 1])).wait(); - console.log("Sixth deposit erc1155 cost:", res?.gasUsed); + console.log("Sixth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [7, 8, 9, 10], [1, 1, 1, 1])).wait(); - console.log("Seventh deposit erc1155 cost:", res?.gasUsed); + console.log("Seventh deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [8, 9, 10], [1, 1, 1])).wait(); - console.log("Eighth deposit erc1155 cost:", res?.gasUsed); + console.log("Eighth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [9, 10], [1, 1])).wait(); - console.log("Ninth deposit erc1155 cost:", res?.gasUsed); + console.log("Ninth deposit erc1155 cost:", getGasUsed(res)); res = await (await depositBoxERC1155.connect(user).depositERC1155Batch(schainName, ERC1155TokenOnMainnet, [10], [1])).wait(); - console.log("Tenth deposit erc1155 cost:", res?.gasUsed); + console.log("Tenth deposit erc1155 cost:", getGasUsed(res)); }); }); @@ -568,7 +575,7 @@ describe("Gas calculation", () => { arrayOfMessages, sign )).wait(); - console.log(action, "cost:", res?.gasUsed); + console.log(action, "cost:", getGasUsed(res)); } describe("Eth transfers ready", async () => { @@ -588,7 +595,7 @@ describe("Gas calculation", () => { async function getMyEth(action: string) { const res = await (await depositBoxEth.connect(user).getMyEth()).wait(); - console.log(action, "getMyEth eth cost:", res?.gasUsed); + console.log(action, "getMyEth eth cost:", getGasUsed(res)); } it("calculate 1 exit eth cost per one message", async () => { diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index 30a6c56c4..b0ac9d6dc 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -72,9 +72,12 @@ const weiTolerance = Number(ethers.parseEther("0.002")); async function reimbursed(transaction: ContractTransactionResponse, operation?: string) { const receipt = await transaction.wait(); + if (!receipt) { + throw new Error("Transaction failed"); + } const sender = transaction.from; - const balanceBefore = await ethers.provider.getBalance(sender, (receipt?.blockNumber ?? 1) - 1); - const balanceAfter = await ethers.provider.getBalance(sender, receipt?.blockNumber); + const balanceBefore = await ethers.provider.getBalance(sender, (receipt.blockNumber ?? 1) - 1); + const balanceAfter = await ethers.provider.getBalance(sender, receipt.blockNumber); if (balanceAfter < balanceBefore) { const shortageEth = balanceBefore - balanceAfter; const shortageGas = shortageEth / transaction.gasPrice; From 975d2f3bab5efe781e43747385fac3314d6543e7 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Thu, 14 Nov 2024 20:11:05 +0000 Subject: [PATCH 30/45] Fix linter --- gas/calculateGas.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gas/calculateGas.ts b/gas/calculateGas.ts index 561ce1c3e..de1f32c81 100644 --- a/gas/calculateGas.ts +++ b/gas/calculateGas.ts @@ -89,7 +89,7 @@ import { expect } from "chai"; import { deployCommunityLocker } from "../test/utils/deploy/schain/communityLocker"; import { deployCommunityPool } from "../test/utils/deploy/mainnet/communityPool"; -function getGasUsed(res: ContractTransactionReceipt | null): BigInt { +function getGasUsed(res: ContractTransactionReceipt | null): bigint { if (!res) { throw new Error("Transaction result is null"); } @@ -334,7 +334,7 @@ describe("Gas calculation", () => { let res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); console.log("First deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); - console.log("Second deposit eth cost:", getGasUsed(res));; + console.log("Second deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); console.log("Third deposit eth cost:", getGasUsed(res)); res = await (await depositBoxEth.connect(user).deposit(schainName, {value: "1000000000000000000"})).wait(); From 912a61ac8fbc088c2fbee9abe6d16a13be903e14 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Fri, 15 Nov 2024 21:46:05 +0000 Subject: [PATCH 31/45] Add generation of new abi's --- migrations/deployMainnet.ts | 6 +++--- migrations/upgradeMainnet.ts | 24 ++++++++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/migrations/deployMainnet.ts b/migrations/deployMainnet.ts index d9c054f93..6b060adf6 100644 --- a/migrations/deployMainnet.ts +++ b/migrations/deployMainnet.ts @@ -78,14 +78,14 @@ async function getMessageProxyForMainnet(): Promise { } async function getSkaleManagerInstance() { - if (!process.env.TARGET) { + if (!process.env.SKALE_MANAGER_ADDRESS) { console.log(chalk.red("Specify desired skale-manager instance")); - console.log(chalk.red("Set instance alias or SkaleManager address to TARGET environment variable")); + console.log(chalk.red("Set instance alias or SkaleManager address to SKALE_MANAGER_ADDRESS environment variable")); process.exit(1); } const network = await skaleContracts.getNetworkByProvider(ethers.provider); const project = network.getProject("skale-manager"); - return await project.getInstance(process.env.TARGET); + return await project.getInstance(process.env.SKALE_MANAGER_ADDRESS); } async function setVersion(messageProxy: MessageProxyForMainnet, version: string) { diff --git a/migrations/upgradeMainnet.ts b/migrations/upgradeMainnet.ts index 64af8ba8f..4a165fb77 100644 --- a/migrations/upgradeMainnet.ts +++ b/migrations/upgradeMainnet.ts @@ -1,10 +1,11 @@ import chalk from "chalk"; import { ethers } from "hardhat"; +import { promises as fs } from 'fs'; import { Interface, Transaction } from "ethers"; -import { Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; +import { getAbi, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; import { skaleContracts, Instance } from "@skalenetwork/skale-contracts-ethers-v6"; import { MessageProxyForMainnet } from "../typechain"; -import { contracts } from "./deployMainnet"; +import { contracts, getContractKeyInAbiFile } from "./deployMainnet"; async function getImaMainnetInstance() { @@ -58,7 +59,7 @@ class ImaMainnetUpgrader extends Upgrader { } // deployNewContracts = () => { }; - + initialize = async () => { const contractManagerAddress = await (await this.getMessageProxyForMainnet()).contractManagerOfSkaleManager(); const contractManagerInterface = new Interface([{ @@ -107,7 +108,6 @@ class ImaMainnetUpgrader extends Upgrader { const contractAddress = await contractManager.getContract(contractName); console.log(`Address of ${contractName} is set to ${contractAddress}`); } catch { - // getContract failed because the contract is not set const contractAddress = await this.instance.getContract(contractName); this.transactions.push(Transaction.from( @@ -132,6 +132,21 @@ class ImaMainnetUpgrader extends Upgrader { } } +async function updateAbi() { + if (!process.env.ABI) { + console.log(chalk.red("Set path to file with ABI and addresses to ABI environment variables")); + process.exit(1); + } + const abiFilename = process.env.ABI; + const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); + for (const contract of contracts) { + const contractInterface = (await ethers.getContractFactory(contract)).interface; + abi[getContractKeyInAbiFile(contract) + "_abi"] = getAbi(contractInterface); + } + await fs.writeFile(abiFilename, JSON.stringify(abi, null, 4)); + console.log(chalk.green(`ABI updated and saved to ${abiFilename}`)); +} + async function main() { const upgrader = new ImaMainnetUpgrader( "2.1.0", @@ -139,6 +154,7 @@ async function main() { contracts ); await upgrader.upgrade(); + await updateAbi(); } if (require.main === module) { From 88782a86e35b3d7a690042c846bff011409ec7c3 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Fri, 15 Nov 2024 21:46:36 +0000 Subject: [PATCH 32/45] Fix deploy script for schain part --- migrations/upgradeSchain.ts | 57 ++++++++++++++++++++++++++----------- scripts/test_deploy.sh | 6 ++-- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/migrations/upgradeSchain.ts b/migrations/upgradeSchain.ts index 3c446c1fe..552787164 100644 --- a/migrations/upgradeSchain.ts +++ b/migrations/upgradeSchain.ts @@ -1,29 +1,45 @@ import chalk from "chalk"; import { ethers } from "hardhat"; import { promises as fs } from "fs"; -import { AutoSubmitter, Upgrader } from "@skalenetwork/upgrade-tools"; -import { SkaleABIFile } from "@skalenetwork/upgrade-tools/dist/src/types/SkaleABIFile"; -import { contracts } from "./deploySchain"; +import { Transaction } from "ethers"; +import { getAbi, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; +import { skaleContracts, Instance } from "@skalenetwork/skale-contracts-ethers-v6"; +import { contracts, getContractKeyInAbiFile } from "./deploySchain"; import { manifestSetup } from "./generateManifest"; import { MessageProxyForSchain } from "../typechain"; + +async function getImaSchainInstance() { + if (!process.env.TARGET) { + console.log(chalk.red("Specify desired schain-ima instance")); + console.log(chalk.red("Set instance alias or MessageProxyForSchain address to TARGET environment variable")); + process.exit(1); + } + const network = await skaleContracts.getNetworkByProvider(ethers.provider); + const project = network.getProject("schain-ima"); + return await project.getInstance(process.env.TARGET); +} class ImaSchainUpgrader extends Upgrader { constructor( targetVersion: string, - abi: SkaleABIFile, + instance: Instance, contractNamesToUpgrade: string[], - submitter = new AutoSubmitter()) { + submitter?: Submitter) { super( - "proxySchain", - targetVersion, - abi, - contractNamesToUpgrade, - submitter); + { + contractNamesToUpgrade, + instance, + name: "proxySchain", + version: targetVersion, + }, + submitter + ); } async getMessageProxyForSchain() { - return await ethers.getContractAt("MessageProxyForSchain", this.abi.message_proxy_chain_address as string) as MessageProxyForSchain; + return await this.instance.getContract("MessageProxyForSchain") as MessageProxyForSchain; + } getDeployedVersion = async () => { @@ -37,10 +53,10 @@ class ImaSchainUpgrader extends Upgrader { setVersion = async (newVersion: string) => { const messageProxyForSchain = await this.getMessageProxyForSchain(); - this.transactions.push({ - to: messageProxyForSchain.address, + this.transactions.push(Transaction.from({ + to: await messageProxyForSchain.getAddress(), data: messageProxyForSchain.interface.encodeFunctionData("setVersion", [newVersion]) - }); + })); } // deployNewContracts = () => { }; @@ -55,13 +71,19 @@ class ImaSchainUpgrader extends Upgrader { } } -async function getImaSchainAbiAndAddress(): Promise { +async function updateAbi(contracts: string[]) { if (!process.env.ABI) { console.log(chalk.red("Set path to file with ABI and addresses to ABI environment variables")); process.exit(1); } const abiFilename = process.env.ABI; - return JSON.parse(await fs.readFile(abiFilename, "utf-8")); + const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); + for (const contract of contracts) { + const contractInterface = (await ethers.getContractFactory(contract)).interface; + abi[getContractKeyInAbiFile(contract) + "_abi"] = getAbi(contractInterface); + } + await fs.writeFile(abiFilename, JSON.stringify(abi, null, 4)); + console.log(chalk.green(`ABI updated and saved to ${abiFilename}`)); } async function main() { @@ -69,10 +91,11 @@ async function main() { await manifestSetup(pathToManifest); const upgrader = new ImaSchainUpgrader( "2.1.0", - await getImaSchainAbiAndAddress(), + await getImaSchainInstance(), contracts ); await upgrader.upgrade(); + updateAbi(contracts); } if (require.main === module) { diff --git a/scripts/test_deploy.sh b/scripts/test_deploy.sh index da918caf0..b232f2c4a 100755 --- a/scripts/test_deploy.sh +++ b/scripts/test_deploy.sh @@ -17,9 +17,7 @@ export PRIVATE_KEY_FOR_ETHEREUM=$PRIVATE_KEY export PRIVATE_KEY_FOR_SCHAIN=$PRIVATE_KEY yarn deploy-skale-manager-components -export TARGET=$(cat data/skaleManagerComponents.json | jq -r .skale_manager_address) -yarn deploy-to-mainnet -# TODO: Uncomment after fixing deploy script for schain, related issue https://github.com/skalenetwork/IMA/issues/1720 -# yarn deploy-to-both-chains +export SKALE_MANAGER_ADDRESS=$(cat data/skaleManagerComponents.json | jq -r .skale_manager_address) +yarn deploy-to-both-chains npx ganache instances stop "$GANACHE" From 7be6507eae097cbc2dec70eb6a03e4929535286f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 12:19:55 +0000 Subject: [PATCH 33/45] Fix deploySchain.ts --- migrations/deploySchain.ts | 181 ++++++++++++++++++------------------- 1 file changed, 87 insertions(+), 94 deletions(-) diff --git a/migrations/deploySchain.ts b/migrations/deploySchain.ts index cdaf2fd08..bf0f18c83 100644 --- a/migrations/deploySchain.ts +++ b/migrations/deploySchain.ts @@ -22,30 +22,13 @@ * @file deploySchain.ts * @copyright SKALE Labs 2019-Present */ -// TODO: Remove this line after closing issue https://github.com/skalenetwork/IMA/issues/1720 -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck import { promises as fs } from 'fs'; -import { Interface } from "ethers/lib/utils"; +import { Interface } from "ethers"; import { ethers, upgrades } from "hardhat"; -import hre from "hardhat"; import { getAbi, getVersion } from '@skalenetwork/upgrade-tools'; import { Manifest } from "@openzeppelin/upgrades-core"; -import { getManifestAdmin } from "@openzeppelin/hardhat-upgrades/dist/admin"; -import { - CommunityLocker, - EthErc20, - KeyStorage, - MessageProxyForSchain, - TokenManagerERC20, - TokenManagerERC721, - TokenManagerEth, - TokenManagerLinker, - TokenManagerERC721WithMetadata, - MessageProxyForSchainWithoutSignature -} from '../typechain'; -import { TokenManagerERC1155 } from '../typechain'; -import { SkaleABIFile } from '@skalenetwork/upgrade-tools/dist/src/types/SkaleABIFile'; +import { MessageProxyForSchain, MessageProxyForSchainWithoutSignature } from '../typechain'; + export function getContractKeyInAbiFile(contract: string): string { if (contract === "MessageProxyForSchain") { @@ -60,7 +43,7 @@ export async function getManifestFile(): Promise { async function getProxyMainnet(contractName: string) { const defaultFilePath = "data/proxyMainnet.json"; - const jsonData = JSON.parse(await fs.readFile(defaultFilePath)) as SkaleABIFile; + const jsonData: { [key: string]: string | [] } = JSON.parse(await fs.readFile(defaultFilePath, 'utf-8')); try { const contractAddress = jsonData[contractName] as string; return contractAddress; @@ -123,10 +106,10 @@ async function main() { console.log("Deploy KeyStorage"); const keyStorageFactory = await ethers.getContractFactory("KeyStorage"); - const keyStorage = await upgrades.deployProxy(keyStorageFactory) as KeyStorage; - await keyStorage.deployTransaction.wait(); - deployed.set( "KeyStorage", { address: keyStorage.address, interface: keyStorage.interface } ); - console.log("Contract KeyStorage deployed to", keyStorage.address); + const keyStorage = await upgrades.deployProxy(keyStorageFactory); + await keyStorage.waitForDeployment(); + deployed.set( "KeyStorage", { address: await keyStorage.getAddress(), interface: keyStorage.interface } ); + console.log("Contract KeyStorage deployed to", await keyStorage.getAddress()); let messageProxy: MessageProxyForSchain | MessageProxyForSchainWithoutSignature; if( process.env.NO_SIGNATURES === "true" ) { @@ -139,12 +122,13 @@ async function main() { console.log("Deploy MessageProxyForSchain"); messageProxy = await upgrades.deployProxy( await ethers.getContractFactory("MessageProxyForSchain"), - [keyStorage.address, schainName] - ) as MessageProxyForSchain; + [await keyStorage.getAddress(), schainName] + ) as unknown as MessageProxyForSchain; } - await messageProxy.deployTransaction.wait(); - deployed.set( "MessageProxyForSchain", { address: messageProxy.address, interface: messageProxy.interface } ); - console.log("Contract MessageProxyForSchain deployed to", messageProxy.address); + await messageProxy.waitForDeployment(); + const messageProxyAddress = await messageProxy.getAddress(); + deployed.set( "MessageProxyForSchain", { address: messageProxyAddress, interface: messageProxy.interface } ); + console.log("Contract MessageProxyForSchain deployed to", messageProxyAddress); try { console.log(`Set version ${version}`) @@ -155,111 +139,123 @@ async function main() { console.log("Deploy TokenManagerLinker"); const tokenManagerLinkerFactory = await ethers.getContractFactory("TokenManagerLinker"); - const tokenManagerLinker = await upgrades.deployProxy(tokenManagerLinkerFactory, [ messageProxy.address, linkerAddress ] ) as TokenManagerLinker; - await tokenManagerLinker.deployTransaction.wait(); - deployed.set( "TokenManagerLinker", { address: tokenManagerLinker.address, interface: tokenManagerLinker.interface } ); - console.log("Contract TokenManagerLinker deployed to", tokenManagerLinker.address); + const tokenManagerLinker = await upgrades.deployProxy(tokenManagerLinkerFactory, [messageProxyAddress, linkerAddress]); + await tokenManagerLinker.waitForDeployment(); + deployed.set( "TokenManagerLinker", { + address: await tokenManagerLinker.getAddress(), + interface: tokenManagerLinker.interface + }); + console.log("Contract TokenManagerLinker deployed to", await tokenManagerLinker.getAddress()); console.log("Deploy CommunityLocker"); const communityLockerFactory = await ethers.getContractFactory("CommunityLocker"); const communityLocker = await upgrades.deployProxy( communityLockerFactory, - [ schainName, messageProxy.address, tokenManagerLinker.address, communityPoolAddress ] - ) as CommunityLocker; - await communityLocker.deployTransaction.wait(); - deployed.set( "CommunityLocker", { address: communityLocker.address, interface: communityLocker.interface }); - console.log("Contract CommunityLocker deployed to", communityLocker.address); + [ schainName, messageProxyAddress, await tokenManagerLinker.getAddress(), communityPoolAddress ] + ); + await communityLocker.waitForDeployment(); + deployed.set( "CommunityLocker", { address: await communityLocker.getAddress(), interface: communityLocker.interface }); + console.log("Contract CommunityLocker deployed to", await communityLocker.getAddress()); console.log("Deploy TokenManagerEth"); const tokenManagerEthFactory = await ethers.getContractFactory("TokenManagerEth"); const tokenManagerEth = await upgrades.deployProxy(tokenManagerEthFactory, [ schainName, - messageProxy.address, - tokenManagerLinker.address, - communityLocker.address, + messageProxyAddress, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), depositBoxEthAddress, "0x0000000000000000000000000000000000000000" - ]) as TokenManagerEth; - await tokenManagerEth.deployTransaction.wait(); - deployed.set( "TokenManagerEth", { address: tokenManagerEth.address, interface: tokenManagerEth.interface } ); - console.log("Contract TokenManagerEth deployed to", tokenManagerEth.address); + ]); + await tokenManagerEth.waitForDeployment(); + deployed.set( "TokenManagerEth", { address: await tokenManagerEth.getAddress(), interface: tokenManagerEth.interface } ); + console.log("Contract TokenManagerEth deployed to", await tokenManagerEth.getAddress()); console.log("Deploy TokenManagerERC20"); const tokenManagerERC20Factory = await ethers.getContractFactory("TokenManagerERC20"); const tokenManagerERC20 = await upgrades.deployProxy(tokenManagerERC20Factory, [ schainName, - messageProxy.address, - tokenManagerLinker.address, - communityLocker.address, + messageProxyAddress, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), depositBoxERC20Address - ]) as TokenManagerERC20; - await tokenManagerERC20.deployTransaction.wait(); - deployed.set( "TokenManagerERC20", { address: tokenManagerERC20.address, interface: tokenManagerERC20.interface } ); - console.log("Contract TokenManagerERC20 deployed to", tokenManagerERC20.address); + ]); + await tokenManagerERC20.waitForDeployment(); + deployed.set( "TokenManagerERC20", { + address: await tokenManagerERC20.getAddress(), + interface: tokenManagerERC20.interface + }); + console.log("Contract TokenManagerERC20 deployed to", await tokenManagerERC20.getAddress()); console.log("Deploy TokenManagerERC721"); const tokenManagerERC721Factory = await ethers.getContractFactory("TokenManagerERC721"); const tokenManagerERC721 = await upgrades.deployProxy(tokenManagerERC721Factory, [ schainName, - messageProxy.address, - tokenManagerLinker.address, - communityLocker.address, + messageProxyAddress, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), depositBoxERC721Address - ]) as TokenManagerERC721; - await tokenManagerERC721.deployTransaction.wait(); - deployed.set( "TokenManagerERC721", { address: tokenManagerERC721.address, interface: tokenManagerERC721.interface } ); - console.log("Contract TokenManagerERC721 deployed to", tokenManagerERC721.address); + ]); + await tokenManagerERC721.waitForDeployment(); + deployed.set( "TokenManagerERC721", { + address: await tokenManagerERC721.getAddress(), + interface: tokenManagerERC721.interface + }); + console.log("Contract TokenManagerERC721 deployed to", await tokenManagerERC721.getAddress()); console.log("Deploy TokenManagerERC1155"); const tokenManagerERC1155Factory = await ethers.getContractFactory("TokenManagerERC1155"); const tokenManagerERC1155 = await upgrades.deployProxy(tokenManagerERC1155Factory, [ schainName, - messageProxy.address, - tokenManagerLinker.address, - communityLocker.address, + messageProxyAddress, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), depositBoxERC1155Address - ]) as TokenManagerERC1155; - await tokenManagerERC1155.deployTransaction.wait(); - deployed.set( "TokenManagerERC1155", { address: tokenManagerERC1155.address, interface: tokenManagerERC1155.interface } ); - console.log("Contract TokenManagerERC1155 deployed to", tokenManagerERC1155.address); + ]); + await tokenManagerERC1155.waitForDeployment(); + deployed.set( "TokenManagerERC1155", { address: await tokenManagerERC1155.getAddress(), interface: tokenManagerERC1155.interface } ); + console.log("Contract TokenManagerERC1155 deployed to", await tokenManagerERC1155.getAddress()); console.log("Deploy TokenManagerERC721WithMetadata"); const tokenManagerERC721WithMetadataFactory = await ethers.getContractFactory("TokenManagerERC721WithMetadata"); const tokenManagerERC721WithMetadata = await upgrades.deployProxy(tokenManagerERC721WithMetadataFactory, [ schainName, - messageProxy.address, - tokenManagerLinker.address, - communityLocker.address, + messageProxyAddress, + await tokenManagerLinker.getAddress(), + await communityLocker.getAddress(), depositBoxERC721WithMetadataAddress - ]) as TokenManagerERC721WithMetadata; - await tokenManagerERC721WithMetadata.deployTransaction.wait(); - deployed.set( "TokenManagerERC721WithMetadata", { address: tokenManagerERC721WithMetadata.address, interface: tokenManagerERC721WithMetadata.interface } ); - console.log("Contract TokenManagerERC721WithMetadata deployed to", tokenManagerERC721WithMetadata.address); + ]); + await tokenManagerERC721WithMetadata.waitForDeployment(); + deployed.set("TokenManagerERC721WithMetadata", { + address: await tokenManagerERC721WithMetadata.getAddress(), + interface: tokenManagerERC721WithMetadata.interface + }); + console.log("Contract TokenManagerERC721WithMetadata deployed to", await tokenManagerERC721WithMetadata.getAddress()); console.log("Register token managers"); - await (await tokenManagerLinker.registerTokenManager(tokenManagerEth.address)).wait(); - await (await tokenManagerLinker.registerTokenManager(tokenManagerERC20.address)).wait(); - await (await tokenManagerLinker.registerTokenManager(tokenManagerERC721.address)).wait(); - await (await tokenManagerLinker.registerTokenManager(tokenManagerERC1155.address)).wait(); - await (await tokenManagerLinker.registerTokenManager(tokenManagerERC721WithMetadata.address)).wait(); + await (await tokenManagerLinker.registerTokenManager(await tokenManagerEth.getAddress())).wait(); + await (await tokenManagerLinker.registerTokenManager(await tokenManagerERC20.getAddress())).wait(); + await (await tokenManagerLinker.registerTokenManager(await tokenManagerERC721.getAddress())).wait(); + await (await tokenManagerLinker.registerTokenManager(await tokenManagerERC1155.getAddress())).wait(); + await (await tokenManagerLinker.registerTokenManager(await tokenManagerERC721WithMetadata.getAddress())).wait(); console.log("Deploy EthErc20"); const ethERC20Factory = await ethers.getContractFactory("EthErc20"); - const ethERC20 = await upgrades.deployProxy(ethERC20Factory, [ tokenManagerEth.address ]) as EthErc20; - await ethERC20.deployTransaction.wait(); - deployed.set( "EthErc20", { address: ethERC20.address, interface: ethERC20.interface } ); - console.log("Contract EthErc20 deployed to", ethERC20.address); + const ethERC20 = await upgrades.deployProxy(ethERC20Factory, [ await tokenManagerEth.getAddress() ]); + await ethERC20.waitForDeployment(); + deployed.set( "EthErc20", { address: await ethERC20.getAddress(), interface: ethERC20.interface } ); + console.log("Contract EthErc20 deployed to", await ethERC20.getAddress()); console.log( "\nWill set dependencies!\n" ); - await tokenManagerEth.setEthErc20Address( ethERC20.address ); - console.log( "Set EthErc20 address", ethERC20.address, "in TokenManagerEth", tokenManagerEth.address, "completed!\n" ); + await tokenManagerEth.setEthErc20Address( await ethERC20.getAddress() ); + console.log( "Set EthErc20 address", await ethERC20.getAddress(), "in TokenManagerEth", await tokenManagerEth.getAddress(), "completed!\n" ); const chainConnectorRole = await messageProxy.CHAIN_CONNECTOR_ROLE(); - await messageProxy.grantRole( chainConnectorRole, tokenManagerLinker.address ); - console.log( "Grant CHAIN_CONNECTOR_ROLE to TokenManagerLinker", tokenManagerLinker.address, "in MessageProxyForSchain", messageProxy.address, "completed!\n" ); + await messageProxy.grantRole( chainConnectorRole, await tokenManagerLinker.getAddress() ); + console.log( "Grant CHAIN_CONNECTOR_ROLE to TokenManagerLinker", await tokenManagerLinker.getAddress(), "in MessageProxyForSchain", messageProxyAddress, "completed!\n" ); const constantSetterRole = await communityLocker.CONSTANT_SETTER_ROLE(); - await communityLocker.grantRole(constantSetterRole, owner.address); + await communityLocker.grantRole(constantSetterRole, await owner.getAddress()); console.log("Grant CONSTANT_SETTER_ROLE to owner of schain"); const extraContracts = [ @@ -271,10 +267,10 @@ async function main() { tokenManagerERC721WithMetadata ]; const extraContractRegistrarRole = await messageProxy.EXTRA_CONTRACT_REGISTRAR_ROLE(); - await messageProxy.grantRole(extraContractRegistrarRole, owner.address); + await messageProxy.grantRole(extraContractRegistrarRole, await owner.getAddress()); for (const extraContract of extraContracts) { - await messageProxy.registerExtraContractForAll(extraContract.address) - console.log("Contract with address ", extraContract.address, "registered as extra contract"); + await messageProxy.registerExtraContractForAll(await extraContract.getAddress()) + console.log("Contract with address ", await extraContract.getAddress(), "registered as extra contract"); } const jsonObjectABI: {[k: string]: string | []} = { }; @@ -302,9 +298,6 @@ async function main() { jsonObjectABI.ERC721OnChain_abi = getAbi(erc721OnChainFactory.interface); const erc1155OnChainFactory = await ethers.getContractFactory("ERC1155OnChain"); jsonObjectABI.ERC1155OnChain_abi = getAbi(erc1155OnChainFactory.interface); - const proxyAdmin = await getManifestAdmin(hre); - jsonObjectABI.proxy_admin_address = proxyAdmin.address; - jsonObjectABI.proxy_admin_abi = getAbi(proxyAdmin.interface); await fs.writeFile( `data/proxySchain_${schainName}.json`, JSON.stringify( jsonObjectABI ) ); console.log( `Done, check proxySchain_${schainName}.json file in data folder.` ); From 3afbb70f248386090bb2e9dfd9c1e00f4caba277 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:16:13 +0000 Subject: [PATCH 34/45] Fix hotfixUpgrade script --- migrations/hotfixUpgrade.ts | 8 ++++---- tsconfig.json | 10 +--------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/migrations/hotfixUpgrade.ts b/migrations/hotfixUpgrade.ts index 9b7f5ec16..abff0c071 100644 --- a/migrations/hotfixUpgrade.ts +++ b/migrations/hotfixUpgrade.ts @@ -52,15 +52,15 @@ async function main() { const newImplementation = await ( await ethers.getContractFactory("MessageProxyForSchain") ).deploy(); - await newImplementation.deployTransaction.wait(); - console.log(`Deployed on address ${newImplementation.address}`) + await newImplementation.waitForDeployment(); + console.log(`Deployed on address ${await newImplementation.getAddress()}`) console.log("Upgrade a proxy"); const proxyAdmin = (new ethers.Contract(proxyAdminAddress, ProxyAdminArtifacts.abi, ethers.provider)) .connect((await ethers.getSigners())[0]) as ProxyAdmin; - const upgradeTransaction = await proxyAdmin.upgrade(messageProxyAddress, newImplementation.address); + const upgradeTransaction = await proxyAdmin.upgrade(messageProxyAddress, await newImplementation.getAddress()); const receipt = await upgradeTransaction.wait(); - if (receipt.status === 1) { + if (receipt?.status === 1) { console.log("Successfully upgraded"); } else { console.log("Something went wrong"); diff --git a/tsconfig.json b/tsconfig.json index fb427750c..8463ccd9b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,14 +22,6 @@ "node_modules", "example", "build", - "test-tokens", - // TODO: Remove these excludes after closing https://github.com/skalenetwork/IMA/issues/1720 - "migrations/deploySchain.ts", - "migrations/upgradeSchain.ts", - "migrations/transferOwnership.ts", - "migrations/submitTransactions.ts", - "migrations/hotfixUpgrade.ts", - "migrations/generateManifest.ts", - "migrations/deploySchain.ts" + "test-tokens" ] } From 53222fe174ae43d0cbb0d96be438bbf97452cdf1 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:16:24 +0000 Subject: [PATCH 35/45] Fix submitTransaction.ts --- migrations/submitTransactions.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/migrations/submitTransactions.ts b/migrations/submitTransactions.ts index 194fe30b1..15aa7bac7 100644 --- a/migrations/submitTransactions.ts +++ b/migrations/submitTransactions.ts @@ -1,12 +1,13 @@ import { createMultiSendTransaction } from "@skalenetwork/upgrade-tools"; import { promises as fs } from "fs"; -import { UnsignedTransaction } from "ethers"; +import { Transaction } from "ethers"; async function main() { if (!process.env.TRANSACTIONS || !process.env.SAFE) { console.log("Example of usage:"); console.log("SAFE=0x13fD1622F0E7e50A87B79cb296cbAf18362631C0", "TRANSACTIONS=data/transactions-1.8.0-mainnet.json", + "CHAIN_ID=1", "npx hardhat run migrations/submitTransactions.ts --network mainnet"); process.exit(1); } @@ -14,15 +15,19 @@ async function main() { console.log("Private key is not set"); process.exit(1); } - + if (!process.env.CHAIN_ID) { + console.log("Chain ID is not set"); + process.exit(1); + } + const chainId = BigInt(process.env.CHAIN_ID); const safe = process.env.SAFE; let privateKey = process.env.PRIVATE_KEY; if (!privateKey.startsWith("0x")) { privateKey = "0x" + privateKey; } - const safeTransactions = JSON.parse(await fs.readFile(process.env.TRANSACTIONS, "utf-8")) as UnsignedTransaction[]; + const safeTransactions = JSON.parse(await fs.readFile(process.env.TRANSACTIONS, "utf-8")) as Transaction[]; - await createMultiSendTransaction(safe, safeTransactions); + await createMultiSendTransaction(safe, chainId, safeTransactions); console.log("Done"); } From 630249a2586b2b8dd2fb08613443ccc2f455307c Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:16:37 +0000 Subject: [PATCH 36/45] Fix transferOwnership.ts --- migrations/transferOwnership.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/migrations/transferOwnership.ts b/migrations/transferOwnership.ts index a04604453..62591b64d 100644 --- a/migrations/transferOwnership.ts +++ b/migrations/transferOwnership.ts @@ -1,10 +1,9 @@ import { contracts, getContractKeyInAbiFile } from "./deployMainnet"; import { ethers } from "hardhat"; -import hre from "hardhat"; import { promises as fs } from "fs"; -import { getManifestAdmin } from "@openzeppelin/hardhat-upgrades/dist/admin"; +import {getAdminAddress } from '@openzeppelin/upgrades-core'; import chalk from "chalk"; -import { SafeMock } from "../typechain"; +import { AccessControlEnumerableUpgradeable, SafeMock } from "../typechain"; function stringValue(value: string | undefined) { if (value) { @@ -14,6 +13,13 @@ function stringValue(value: string | undefined) { } } +async function getProxyAdmin(proxyAdminAddress: string) { + const abi = [ + "function owner() view returns (address)" + ]; + return new ethers.Contract(proxyAdminAddress, abi, ethers.provider); + } + export async function transferOwnership(contractNamesToTransfer: string[]) { if (!process.env.ABI) { @@ -25,7 +31,9 @@ export async function transferOwnership(contractNamesToTransfer: string[]) const newOwner = stringValue(process.env.NEW_OWNER); const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); - const proxyAdmin = await getManifestAdmin(hre); + const addressOfAnyContract = abi[getContractKeyInAbiFile(contractNamesToTransfer[0]) + "_address"]; + const proxyAdminAddress = await getAdminAddress(ethers.provider, addressOfAnyContract); + const proxyAdmin = await getProxyAdmin(proxyAdminAddress); const [ deployer ] = await ethers.getSigners(); @@ -42,7 +50,7 @@ export async function transferOwnership(contractNamesToTransfer: string[]) const contractFactory = await ethers.getContractFactory(contractName); const _contract = contractName; const contractAddress = abi[getContractKeyInAbiFile(_contract) + "_address"]; - const contract = contractFactory.attach(contractAddress); + const contract = contractFactory.attach(contractAddress) as AccessControlEnumerableUpgradeable; console.log(chalk.blue(`Grant access to ${contractName}`)); await (await contract.grantRole(await contract.DEFAULT_ADMIN_ROLE(), newOwner)).wait(); } @@ -51,7 +59,7 @@ export async function transferOwnership(contractNamesToTransfer: string[]) const contractFactory = await ethers.getContractFactory(contractName); const _contract = contractName; const contractAddress = abi[getContractKeyInAbiFile(_contract) + "_address"]; - const contract = contractFactory.attach(contractAddress); + const contract = contractFactory.attach(contractAddress) as AccessControlEnumerableUpgradeable; console.log(chalk.blue(`Revoke role on ${contractName}`)); await (await contract.revokeRole(await contract.DEFAULT_ADMIN_ROLE(), deployer.address)).wait(); } @@ -59,7 +67,7 @@ export async function transferOwnership(contractNamesToTransfer: string[]) const safeMockFactory = await ethers.getContractFactory("SafeMock"); const safeMock = await safeMockFactory.attach(adminOwner) as SafeMock; try { - await (await safeMock.transferProxyAdminOwnership(proxyAdmin.address, deployer.address)).wait(); + await (await safeMock.transferProxyAdminOwnership(await proxyAdmin.getAddress(), deployer.address)).wait(); } catch { console.log(chalk.red("Could not run transferProxyAdminOwnership in SafeMock")); process.exit(1); From 50412263721d7db13d44573a566179370c95264f Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:17:24 +0000 Subject: [PATCH 37/45] Change name for generated abi's --- migrations/upgradeMainnet.ts | 9 +++++++-- migrations/upgradeSchain.ts | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/migrations/upgradeMainnet.ts b/migrations/upgradeMainnet.ts index 4a165fb77..189bc78e2 100644 --- a/migrations/upgradeMainnet.ts +++ b/migrations/upgradeMainnet.ts @@ -137,14 +137,19 @@ async function updateAbi() { console.log(chalk.red("Set path to file with ABI and addresses to ABI environment variables")); process.exit(1); } + const network = await ethers.provider.getNetwork(); + const imaInstance = await getImaMainnetInstance(); + const messageProxyForMainnet = (await imaInstance.getContract("MessageProxyForMainnet")) as MessageProxyForMainnet; + const version = await messageProxyForMainnet.version(); const abiFilename = process.env.ABI; const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); for (const contract of contracts) { const contractInterface = (await ethers.getContractFactory(contract)).interface; abi[getContractKeyInAbiFile(contract) + "_abi"] = getAbi(contractInterface); } - await fs.writeFile(abiFilename, JSON.stringify(abi, null, 4)); - console.log(chalk.green(`ABI updated and saved to ${abiFilename}`)); + const newAbiFilename = `mainnet-ima-${version}-${network.name}.json`; + await fs.writeFile(newAbiFilename, JSON.stringify(abi, null, 4)); + console.log(chalk.green(`ABI updated and saved to ${newAbiFilename}`)); } async function main() { diff --git a/migrations/upgradeSchain.ts b/migrations/upgradeSchain.ts index 552787164..d9bca2803 100644 --- a/migrations/upgradeSchain.ts +++ b/migrations/upgradeSchain.ts @@ -76,14 +76,19 @@ async function updateAbi(contracts: string[]) { console.log(chalk.red("Set path to file with ABI and addresses to ABI environment variables")); process.exit(1); } + const network = await ethers.provider.getNetwork(); + const imaInstance = await getImaSchainInstance(); + const messageProxyForSchain = (await imaInstance.getContract("MessageProxyForSchain")) as MessageProxyForSchain; + const version = await messageProxyForSchain.version(); const abiFilename = process.env.ABI; const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); for (const contract of contracts) { const contractInterface = (await ethers.getContractFactory(contract)).interface; abi[getContractKeyInAbiFile(contract) + "_abi"] = getAbi(contractInterface); } - await fs.writeFile(abiFilename, JSON.stringify(abi, null, 4)); - console.log(chalk.green(`ABI updated and saved to ${abiFilename}`)); + const newAbiFilename = `schain-ima-${version}-${network.name}.json`; + await fs.writeFile(newAbiFilename, JSON.stringify(abi, null, 4)); + console.log(chalk.green(`ABI updated and saved to ${newAbiFilename}`)); } async function main() { From fa75d8dfa08c5cc9d021177b1293c07ab8cfc67e Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:18:14 +0000 Subject: [PATCH 38/45] Fix test_upgrade.sh --- scripts/test_upgrade.sh | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/scripts/test_upgrade.sh b/scripts/test_upgrade.sh index a03d36d07..17d191dd7 100755 --- a/scripts/test_upgrade.sh +++ b/scripts/test_upgrade.sh @@ -49,30 +49,30 @@ perl -0777 -i -pe 's/await contractManagerInst\.setContractsAddress\( "MessagePr SKALE_MANAGER=$(cat data/skaleManagerComponents.json | jq -r .skale_manager_address) VERSION="$DEPLOYED_VERSION" TARGET=$SKALE_MANAGER npx hardhat run migrations/deployMainnet.ts --network localhost -# TODO: uncomment upgrade schain test after closing issue https://github.com/skalenetwork/IMA/issues/1720 -# CHAIN_NAME_SCHAIN="Test" \ -# VERSION="$DEPLOYED_VERSION" \ -# URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ -# PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ -# npx hardhat run migrations/deploySchain.ts --network schain +CHAIN_NAME_SCHAIN="Test" \ +VERSION="$DEPLOYED_VERSION" \ +URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ +PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ +npx hardhat run migrations/deploySchain.ts --network schain -# ABI_FILENAME_SCHAIN="proxySchain_Test.json" -# ABI="data/$ABI_FILENAME_SCHAIN" \ -# MANIFEST=".openzeppelin/unknown-1337.json" \ -# VERSION="$DEPLOYED_VERSION" \ -# npx hardhat run migrations/changeManifest.ts --network localhost +ABI_FILENAME_SCHAIN="proxySchain_Test.json" +ABI="data/$ABI_FILENAME_SCHAIN" \ +MANIFEST=".openzeppelin/unknown-1337.json" \ +VERSION="$DEPLOYED_VERSION" \ +npx hardhat run migrations/changeManifest.ts --network localhost cp .openzeppelin/unknown-*.json "$GITHUB_WORKSPACE/.openzeppelin" cp ./data/skaleManagerComponents.json "$GITHUB_WORKSPACE/data/" cp "data/proxyMainnet.json" "$GITHUB_WORKSPACE/data" -# cp "./data/ima-schain-$DEPLOYED_VERSION-manifest.json" "$GITHUB_WORKSPACE/data/" -# cp "data/$ABI_FILENAME_SCHAIN" "$GITHUB_WORKSPACE/data" +cp "./data/ima-schain-$DEPLOYED_VERSION-manifest.json" "$GITHUB_WORKSPACE/data/" +cp "data/$ABI_FILENAME_SCHAIN" "$GITHUB_WORKSPACE/data" cd "$GITHUB_WORKSPACE" rm -rf "$DEPLOYED_DIR" MESSAGE_PROXY_FOR_MAINNET=$(cat data/proxyMainnet.json | jq -r .message_proxy_mainnet_address) TEST_UPGRADE=true \ +ABI="data/proxyMainnet.json" \ TARGET="$MESSAGE_PROXY_FOR_MAINNET" \ ALLOW_NOT_ATOMIC_UPGRADE="OK" \ VERSION=$VERSION_TAG \ @@ -80,12 +80,15 @@ npx hardhat run migrations/upgradeMainnet.ts --network localhost VERSION="$(git describe --tags | echo "$VERSION_TAG")" echo "$VERSION" -# mv "data/proxyMainnet-$VERSION-localhost-abi.json" "data/proxyMainnet.json" +MESSAGE_PROXY_FOR_SCHAIN=$(cat data/$ABI_FILENAME_SCHAIN | jq -r .message_proxy_chain_address) + +# TODO: uncomment upgrade schain test after fixing the issue related to skale-contracts # ABI="data/$ABI_FILENAME_SCHAIN" \ # MANIFEST="data/ima-schain-$DEPLOYED_VERSION-manifest.json" \ # CHAIN_NAME_SCHAIN="Test" \ # ALLOW_NOT_ATOMIC_UPGRADE="OK" \ +# TARGET="$MESSAGE_PROXY_FOR_SCHAIN" \ # VERSION=$VERSION_TAG \ # URL_W3_S_CHAIN="$URL_W3_S_CHAIN" \ # PRIVATE_KEY_FOR_SCHAIN="$PRIVATE_KEY_FOR_SCHAIN" \ From 8856adcf4426bad4b2fcc38eb510e4b49af1fd9b Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 13:35:15 +0000 Subject: [PATCH 39/45] Fix getVersion --- migrations/upgradeMainnet.ts | 6 ++---- migrations/upgradeSchain.ts | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/migrations/upgradeMainnet.ts b/migrations/upgradeMainnet.ts index 189bc78e2..226646d10 100644 --- a/migrations/upgradeMainnet.ts +++ b/migrations/upgradeMainnet.ts @@ -2,7 +2,7 @@ import chalk from "chalk"; import { ethers } from "hardhat"; import { promises as fs } from 'fs'; import { Interface, Transaction } from "ethers"; -import { getAbi, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; +import { getAbi, getVersion, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; import { skaleContracts, Instance } from "@skalenetwork/skale-contracts-ethers-v6"; import { MessageProxyForMainnet } from "../typechain"; import { contracts, getContractKeyInAbiFile } from "./deployMainnet"; @@ -138,9 +138,7 @@ async function updateAbi() { process.exit(1); } const network = await ethers.provider.getNetwork(); - const imaInstance = await getImaMainnetInstance(); - const messageProxyForMainnet = (await imaInstance.getContract("MessageProxyForMainnet")) as MessageProxyForMainnet; - const version = await messageProxyForMainnet.version(); + const version = await getVersion(); const abiFilename = process.env.ABI; const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); for (const contract of contracts) { diff --git a/migrations/upgradeSchain.ts b/migrations/upgradeSchain.ts index d9bca2803..57f8ea942 100644 --- a/migrations/upgradeSchain.ts +++ b/migrations/upgradeSchain.ts @@ -2,7 +2,7 @@ import chalk from "chalk"; import { ethers } from "hardhat"; import { promises as fs } from "fs"; import { Transaction } from "ethers"; -import { getAbi, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; +import { getAbi, getVersion, Submitter, Upgrader } from "@skalenetwork/upgrade-tools"; import { skaleContracts, Instance } from "@skalenetwork/skale-contracts-ethers-v6"; import { contracts, getContractKeyInAbiFile } from "./deploySchain"; import { manifestSetup } from "./generateManifest"; @@ -77,9 +77,7 @@ async function updateAbi(contracts: string[]) { process.exit(1); } const network = await ethers.provider.getNetwork(); - const imaInstance = await getImaSchainInstance(); - const messageProxyForSchain = (await imaInstance.getContract("MessageProxyForSchain")) as MessageProxyForSchain; - const version = await messageProxyForSchain.version(); + const version = await getVersion(); const abiFilename = process.env.ABI; const abi = JSON.parse(await fs.readFile(abiFilename, "utf-8")); for (const contract of contracts) { From 2ced3c53d493cf13029e923c02a822a9d49ea18c Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 16:50:10 +0000 Subject: [PATCH 40/45] Use assert to fix eslint no-unused-expressions --- scripts/test_upgrade.sh | 2 +- test/CommunityPool.ts | 25 ++++++++++++------------- test/TokenManagerEth.ts | 8 +++----- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/scripts/test_upgrade.sh b/scripts/test_upgrade.sh index 17d191dd7..8442ef58c 100755 --- a/scripts/test_upgrade.sh +++ b/scripts/test_upgrade.sh @@ -68,7 +68,7 @@ cp "data/proxyMainnet.json" "$GITHUB_WORKSPACE/data" cp "./data/ima-schain-$DEPLOYED_VERSION-manifest.json" "$GITHUB_WORKSPACE/data/" cp "data/$ABI_FILENAME_SCHAIN" "$GITHUB_WORKSPACE/data" cd "$GITHUB_WORKSPACE" -rm -rf "$DEPLOYED_DIR" +rm -r --interactive=never "$DEPLOYED_DIR" MESSAGE_PROXY_FOR_MAINNET=$(cat data/proxyMainnet.json | jq -r .message_proxy_mainnet_address) TEST_UPGRADE=true \ diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 23d541f63..28dc4f796 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -10,7 +10,7 @@ import { import { getBalance } from "./utils/helper"; -import chai from "chai"; +import chai, { assert } from "chai"; import chaiAlmost from "chai-almost"; chai.should(); @@ -33,7 +33,6 @@ import { BigNumberish, toNumber } from "ethers"; import { expect } from "chai"; import { deployMessages } from "./utils/deploy/messages"; -/* eslint-disable @typescript-eslint/no-unused-expressions */ describe("CommunityPool", () => { let deployer: SignerWithAddress; @@ -86,7 +85,7 @@ describe("CommunityPool", () => { await communityPool.addSchainContract(schainName, fakeContractOnSchain); - expect(await communityPool.hasSchainContract(schainName)).to.be.true; + assert.isTrue(await communityPool.hasSchainContract(schainName)); await communityPool.addSchainContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("SKALE chain is already set"); }); @@ -95,14 +94,14 @@ describe("CommunityPool", () => { const fakeContractOnSchain = user.address; await initializeSchain(contractManager, schainName, user.address, 1, 1); await communityPool.connect(user).addSchainContract(schainName, fakeContractOnSchain); - expect(await communityPool.hasSchainContract(schainName)).to.be.true; + assert.isTrue(await communityPool.hasSchainContract(schainName)); await communityPool.removeSchainContract(schainName) .should.be.eventually.rejectedWith("Not authorized caller"); await initializeSchain(contractManager, schainName, deployer.address, 1, 1); await communityPool.removeSchainContract(schainName); - expect(await communityPool.hasSchainContract(schainName)).to.be.false; + assert.isFalse(await communityPool.hasSchainContract(schainName)); await communityPool.removeSchainContract(schainName) .should.be.eventually.rejectedWith("SKALE chain is not set"); }); @@ -112,9 +111,9 @@ describe("CommunityPool", () => { const LINKER_ROLE = await communityPool.LINKER_ROLE(); await communityPool.grantRole(LINKER_ROLE, user.address); await communityPool.connect(user).addSchainContract(schainName, fakeContractOnSchain); - expect(await communityPool.hasSchainContract(schainName)).to.be.true; + assert.isTrue(await communityPool.hasSchainContract(schainName)); await communityPool.connect(user).removeSchainContract(schainName); - expect(await communityPool.hasSchainContract(schainName)).to.be.false; + assert.isFalse(await communityPool.hasSchainContract(schainName)); await communityPool.connect(user).removeSchainContract(schainName) .should.be.eventually.rejectedWith("SKALE chain is not set"); }); @@ -349,11 +348,11 @@ describe("CommunityPool", () => { await messageProxyTester.registerExtraContract(schainNameRGBU, communityPoolTester); const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice); - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; + assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.true; + assert.isTrue(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice }); - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; + assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); }); it("should lock user with extra low balance", async () => { @@ -362,13 +361,13 @@ describe("CommunityPool", () => { const gasPrice = tx.gasPrice as BigNumberish; const wei = BigInt(minTransactionGas) * BigInt(gasPrice); const gasPriceDuringGasSpikes = BigInt(gasPrice) * 2n; - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; + assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.true; + assert.isTrue(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await messageProxyTester .connect(deployer) .refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice: gasPriceDuringGasSpikes }); - expect(await communityPoolTester.activeUsers(user.address, schainHashRGBU)).to.be.false; + assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); }); }); }); diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index eb55efebd..442aa5fde 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -24,7 +24,7 @@ */ import chaiAsPromised from "chai-as-promised"; -import chai from "chai"; +import chai, { assert } from "chai"; import { CommunityLocker, EthErc20, @@ -54,8 +54,6 @@ import { deployKeyStorageMock } from "./utils/deploy/test/keyStorageMock"; const schainName = "TestSchain"; const schainHash = ethers.id(schainName); -/* eslint-disable @typescript-eslint/no-unused-expressions */ - describe("TokenManagerEth", () => { let deployer: SignerWithAddress; let user: SignerWithAddress; @@ -163,7 +161,7 @@ describe("TokenManagerEth", () => { .connect(deployer) .hasTokenManager(schainName2); // expectation - expect(res).to.be.true; + assert.isTrue(res); }); it("should return false when invoke `hasTokenManager`", async () => { @@ -174,7 +172,7 @@ describe("TokenManagerEth", () => { .connect(deployer) .hasTokenManager(schainName2); // expectation - expect(res).to.be.false; + assert.isFalse(res); }); it("should invoke `removeTokenManager` without mistakes", async () => { From e74edcdeb8c4988ac58e091b78cf215c63c61af1 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 16:50:39 +0000 Subject: [PATCH 41/45] Remove unused function stringToHex --- test/DepositBoxERC20.ts | 8 ++++---- test/DepositBoxERC721.ts | 6 +++--- test/DepositBoxERC721WithMetadata.ts | 6 +++--- test/DepositBoxEth.ts | 12 ++++++------ test/utils/helper.ts | 7 ------- 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index 3a03212fc..51942cfd7 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -33,7 +33,7 @@ import { ERC20OnChain, CommunityPool } from "../typechain"; -import { getPublicKey, stringToHex } from "./utils/helper"; +import { getPublicKey } from "./utils/helper"; import chai from "chai"; @@ -301,7 +301,7 @@ describe("DepositBoxERC20", () => { erc20Clone = await deployERC20OnChain("Token", "T",); }); - it("should transfer ERC20 token", async () => { + it.only("should transfer ERC20 token", async () => { // preparation const ercOnSchain = erc20; const fakeErc20OnSchain = erc20Clone; @@ -370,11 +370,11 @@ describe("DepositBoxERC20", () => { await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("Given address is not a contract")); + .withArgs(0n, ethers.toUtf8Bytes("Given address is not a contract")); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(1n, stringToHex("Not enough money")); + .withArgs(1n, ethers.toUtf8Bytes("Not enough money")); const balanceBefore = await ethers.provider.getBalance(deployer.address); diff --git a/test/DepositBoxERC721.ts b/test/DepositBoxERC721.ts index bcb67895d..2b09e0914 100644 --- a/test/DepositBoxERC721.ts +++ b/test/DepositBoxERC721.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey } from "./utils/helper"; import chai from "chai"; import chaiAlmost from "chai-almost"; @@ -352,7 +352,7 @@ describe("DepositBoxERC721", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("Given address is not a contract")); + .withArgs(0n, ethers.toUtf8Bytes("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -371,7 +371,7 @@ describe("DepositBoxERC721", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("Incorrect tokenId")); + .withArgs(0n, ethers.toUtf8Bytes("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { diff --git a/test/DepositBoxERC721WithMetadata.ts b/test/DepositBoxERC721WithMetadata.ts index e4f43349a..31695346e 100644 --- a/test/DepositBoxERC721WithMetadata.ts +++ b/test/DepositBoxERC721WithMetadata.ts @@ -34,7 +34,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey } from "./utils/helper"; import chai from "chai"; import chaiAlmost from "chai-almost"; @@ -361,7 +361,7 @@ describe("DepositBoxERC721WithMetadata", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("Given address is not a contract")); + .withArgs(0n, ethers.toUtf8Bytes("Given address is not a contract")); }); it("should revert `Incorrect tokenId`", async () => { @@ -382,7 +382,7 @@ describe("DepositBoxERC721WithMetadata", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [messageWithWrongTokenAddress], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("Incorrect tokenId")); + .withArgs(0n, ethers.toUtf8Bytes("Incorrect tokenId")); }); it("should transfer ERC721 token", async () => { diff --git a/test/DepositBoxEth.ts b/test/DepositBoxEth.ts index b0ac9d6dc..3e38e659d 100644 --- a/test/DepositBoxEth.ts +++ b/test/DepositBoxEth.ts @@ -33,7 +33,7 @@ import { MessagesTester, CommunityPool } from "../typechain"; -import { getBalance, getPublicKey, stringToHex } from "./utils/helper"; +import { getBalance, getPublicKey } from "./utils/helper"; import chai from "chai"; import chaiAlmost from "chai-almost"; @@ -296,7 +296,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex(error)); + .withArgs(0n, ethers.toUtf8Bytes(error)); }); it("should rejected with message `Not enough money to finish this transaction` when " @@ -334,7 +334,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex(error)); + .withArgs(0n, ethers.toUtf8Bytes(error)); }); it("should rejected with message `Not enough money to finish this transaction`", async () => { @@ -373,7 +373,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex(error)); + .withArgs(0n, ethers.toUtf8Bytes(error)); }); it("should rejected with message `null`", async () => { @@ -414,7 +414,7 @@ describe("DepositBoxEth", () => { const tx = await messageProxy.connect(nodeAddress).postIncomingMessages(schainName, 0, [message], sign); await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(0n, stringToHex("")); + .withArgs(0n, ethers.toUtf8Bytes("")); }); it("should transfer eth", async () => { @@ -606,7 +606,7 @@ describe("DepositBoxEth", () => { await expect(tx) .to.emit(messageProxy, "PostMessageError") - .withArgs(1n, stringToHex("Address: unable to send value, recipient may have reverted")); + .withArgs(1n, ethers.toUtf8Bytes("Address: unable to send value, recipient may have reverted")); expect(await depositBoxEth.approveTransfers(fallbackEthTester)).to.equal(wei); diff --git a/test/utils/helper.ts b/test/utils/helper.ts index fa9339be7..07b00360a 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -46,13 +46,6 @@ export function stringFromHex(value: string) { return str; } -export function stringToHex(str: string) { - const hex = Array.from(str) - .map(char => char.charCodeAt(0).toString(16).padStart(2, '0')) - .join(''); - return `0x${hex}`; -} - export function getPublicKey(wallet: HDNodeWallet | Wallet): [BytesLike, BytesLike] { const publicKey = secp256k1EC.keyFromPrivate(wallet.privateKey.slice(2)).getPublic(); return [ethers.hexlify(publicKey.getX().toBuffer()), ethers.hexlify(publicKey.getY().toBuffer())] From 61cc023d01b69a38212e9a9c7b85e986fe2b4176 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 17:03:14 +0000 Subject: [PATCH 42/45] Rename SkaleManager to SkaleManagerMock --- contracts/test/SkaleManagerMock.sol | 4 ++-- migrations/deploySkaleManagerComponents.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/test/SkaleManagerMock.sol b/contracts/test/SkaleManagerMock.sol index 7b77e7a79..11e99fa4c 100644 --- a/contracts/test/SkaleManagerMock.sol +++ b/contracts/test/SkaleManagerMock.sol @@ -22,11 +22,11 @@ pragma solidity 0.8.16; import "./TestContractManager.sol"; -interface ISkaleManager { +interface ISkaleManagerMock { function setVersion(string calldata newVersion) external; } -contract SkaleManager is ISkaleManager, ContractManager { +contract SkaleManagerMock is ISkaleManagerMock, ContractManager { ContractManager public contractManager; diff --git a/migrations/deploySkaleManagerComponents.ts b/migrations/deploySkaleManagerComponents.ts index 593f602a7..03d148e72 100644 --- a/migrations/deploySkaleManagerComponents.ts +++ b/migrations/deploySkaleManagerComponents.ts @@ -113,7 +113,7 @@ async function main() { console.log("Contract Nodes deployed to", nodesAddress); console.log("Deploy SkaleManager"); - const skaleManagerFactory = await ethers.getContractFactory("SkaleManager"); + const skaleManagerFactory = await ethers.getContractFactory("SkaleManagerMock"); const skaleManager = await skaleManagerFactory.deploy(contractManager); const skaleManagerAddress = await skaleManager.getAddress(); console.log("Contract SkaleManager deployed to", skaleManagerAddress); From 05b7583ad0a433f97c67d5337f359347fa776717 Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 17:10:06 +0000 Subject: [PATCH 43/45] Remove .only --- test/DepositBoxERC20.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/DepositBoxERC20.ts b/test/DepositBoxERC20.ts index 51942cfd7..ca5183d4d 100644 --- a/test/DepositBoxERC20.ts +++ b/test/DepositBoxERC20.ts @@ -301,7 +301,7 @@ describe("DepositBoxERC20", () => { erc20Clone = await deployERC20OnChain("Token", "T",); }); - it.only("should transfer ERC20 token", async () => { + it("should transfer ERC20 token", async () => { // preparation const ercOnSchain = erc20; const fakeErc20OnSchain = erc20Clone; From 3a15d9f87dcd785b5cea010d7723178bb10a645d Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Mon, 18 Nov 2024 17:45:19 +0000 Subject: [PATCH 44/45] Remove isTrue --- test/CommunityPool.ts | 10 +++++----- test/TokenManagerEth.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/CommunityPool.ts b/test/CommunityPool.ts index 28dc4f796..5f57afeb3 100644 --- a/test/CommunityPool.ts +++ b/test/CommunityPool.ts @@ -85,7 +85,7 @@ describe("CommunityPool", () => { await communityPool.addSchainContract(schainName, fakeContractOnSchain); - assert.isTrue(await communityPool.hasSchainContract(schainName)); + assert(await communityPool.hasSchainContract(schainName)); await communityPool.addSchainContract(schainName, fakeContractOnSchain) .should.be.eventually.rejectedWith("SKALE chain is already set"); }); @@ -94,7 +94,7 @@ describe("CommunityPool", () => { const fakeContractOnSchain = user.address; await initializeSchain(contractManager, schainName, user.address, 1, 1); await communityPool.connect(user).addSchainContract(schainName, fakeContractOnSchain); - assert.isTrue(await communityPool.hasSchainContract(schainName)); + assert(await communityPool.hasSchainContract(schainName)); await communityPool.removeSchainContract(schainName) .should.be.eventually.rejectedWith("Not authorized caller"); @@ -111,7 +111,7 @@ describe("CommunityPool", () => { const LINKER_ROLE = await communityPool.LINKER_ROLE(); await communityPool.grantRole(LINKER_ROLE, user.address); await communityPool.connect(user).addSchainContract(schainName, fakeContractOnSchain); - assert.isTrue(await communityPool.hasSchainContract(schainName)); + assert(await communityPool.hasSchainContract(schainName)); await communityPool.connect(user).removeSchainContract(schainName); assert.isFalse(await communityPool.hasSchainContract(schainName)); await communityPool.connect(user).removeSchainContract(schainName) @@ -350,7 +350,7 @@ describe("CommunityPool", () => { const wei = BigInt(minTransactionGas) * BigInt(gasPrice); assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); - assert.isTrue(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); + assert(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await messageProxyTester.connect(deployer).refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice }); assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); }); @@ -363,7 +363,7 @@ describe("CommunityPool", () => { const gasPriceDuringGasSpikes = BigInt(gasPrice) * 2n; assert.isFalse(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await communityPoolTester.connect(user).rechargeUserWallet(schainNameRGBU, user.address, { value: wei.toString() }); - assert.isTrue(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); + assert(await communityPoolTester.activeUsers(user.address, schainHashRGBU)); await messageProxyTester .connect(deployer) .refundGasByUser(schainHashRGBU, node.address, user.address, 1000000, { gasPrice: gasPriceDuringGasSpikes }); diff --git a/test/TokenManagerEth.ts b/test/TokenManagerEth.ts index 442aa5fde..b530295ff 100644 --- a/test/TokenManagerEth.ts +++ b/test/TokenManagerEth.ts @@ -161,7 +161,7 @@ describe("TokenManagerEth", () => { .connect(deployer) .hasTokenManager(schainName2); // expectation - assert.isTrue(res); + assert(res); }); it("should return false when invoke `hasTokenManager`", async () => { From 1ad91a2521c7675eeebba1145e2bdab3e3bdfcaa Mon Sep 17 00:00:00 2001 From: Vadim Yavorsky Date: Tue, 19 Nov 2024 01:03:40 +0000 Subject: [PATCH 45/45] Bump upgrade-tools version --- package.json | 2 +- yarn.lock | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index a57e99ae7..173b16fdd 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@skalenetwork/etherbase-interfaces": "^0.0.1-develop.20", "@skalenetwork/ima-interfaces": "2.0.0", "@skalenetwork/skale-manager-interfaces": "2.0.0", - "@skalenetwork/upgrade-tools": "3.0.0-develop.33", + "@skalenetwork/upgrade-tools": "3.0.0-develop.34", "axios": "^0.21.4", "dotenv": "^16.0.0", "ethers": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index 311c95554..e26a347b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1288,18 +1288,18 @@ dependencies: "@skalenetwork/skale-manager-interfaces" "^0.1.2" -"@skalenetwork/skale-contracts-ethers-v6@^1.0.2-develop.0": - version "1.0.2-develop.19" - resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts-ethers-v6/-/skale-contracts-ethers-v6-1.0.2-develop.19.tgz#d5db311220ea12f6717898e9418b595081dca448" - integrity sha512-eVuCT/BLZtMpbvcSLGuxSqZzTX0XsdlCvqp86n6MrgDQLx7NSXiaPmPr459xpXMxkSZX6gwJTWjO9zGb3ss67Q== +"@skalenetwork/skale-contracts-ethers-v6@^1.0.2-develop.30": + version "1.0.2-develop.30" + resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts-ethers-v6/-/skale-contracts-ethers-v6-1.0.2-develop.30.tgz#d4adf188041fa5de7c34d6cefbabdd4835547266" + integrity sha512-mWYCyK1kneEAd4RsAYXoiVj2kmcYhKtB/gnAGM7nOGaaLjMsHPGLxGU9bGytiZZRiwGf5758x/F2Trrn5bKR9g== dependencies: - "@skalenetwork/skale-contracts" "1.0.2-develop.19" - ethers "^6.13.3" + "@skalenetwork/skale-contracts" "1.0.2-develop.30" + ethers "^6.13.4" -"@skalenetwork/skale-contracts@1.0.2-develop.19": - version "1.0.2-develop.19" - resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts/-/skale-contracts-1.0.2-develop.19.tgz#d32bbb210b60757486f14b2352c4835ece41da0f" - integrity sha512-0+g46+9dbHkWL2kwXVlywEGPLrIrrGsiFsSe7blflcDcvN5zu4dNZX/WwV1gP8wcN7bZOGLNI6fOOtx5LEY9Aw== +"@skalenetwork/skale-contracts@1.0.2-develop.30": + version "1.0.2-develop.30" + resolved "https://registry.yarnpkg.com/@skalenetwork/skale-contracts/-/skale-contracts-1.0.2-develop.30.tgz#ed165d49ef6de6c4bbc831a741b206ffb833d5ab" + integrity sha512-h84NQxobzbI5KZcPZtcgKZYL9/iOJym2mF876pfUY7ftBd0aIu/xtJqIPfeoAcDaevhxJEg9QeabCXKp+9tbCA== dependencies: "@renovatebot/pep440" "^3.0.20" axios "^1.4.0" @@ -1315,15 +1315,15 @@ resolved "https://registry.yarnpkg.com/@skalenetwork/skale-manager-interfaces/-/skale-manager-interfaces-0.1.2.tgz#88e543c8cc298cd0cc9559892d746d2d74786da8" integrity sha512-gapSQJahwWMlTB/xp/kMzB6k+9+Skx/N0fvEloiW4CUrkGkSa8+fj16YmUXX45p1hOc45W+JydiJPNgZtx32Dg== -"@skalenetwork/upgrade-tools@3.0.0-develop.33": - version "3.0.0-develop.33" - resolved "https://registry.yarnpkg.com/@skalenetwork/upgrade-tools/-/upgrade-tools-3.0.0-develop.33.tgz#fb61d2fa680e5fd2bddd782e6175652ffd39378b" - integrity sha512-KGeJ9CosJBljoveKik++aZB41OJ0tu8gUrJzu90p/+p/i+huPnL/zHoUZVJ8hpf4xpRIUhvyZfFfiDHSz0vcNQ== +"@skalenetwork/upgrade-tools@3.0.0-develop.34": + version "3.0.0-develop.34" + resolved "https://registry.yarnpkg.com/@skalenetwork/upgrade-tools/-/upgrade-tools-3.0.0-develop.34.tgz#8dfe1f64f241fd734acdbe0f5e35010847aa992b" + integrity sha512-yA4S8y/eHJwjxe3288+A4aLjt0z+Wj40pphbQ3poug/p4Uny17jj2+FMG+JN/EQjwkXLNI/BD8m66atOOeoQ8A== dependencies: "@safe-global/api-kit" "^2.4.1" "@safe-global/protocol-kit" "^5.0.1" "@safe-global/safe-core-sdk-types" "^5.0.1" - "@skalenetwork/skale-contracts-ethers-v6" "^1.0.2-develop.0" + "@skalenetwork/skale-contracts-ethers-v6" "^1.0.2-develop.30" axios "^1.4.0" ethereumjs-util "^7.1.4" semaphore-async-await "^1.5.1" @@ -2971,7 +2971,7 @@ ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^6.1.0, ethers@^6.13.3: +ethers@^6.1.0, ethers@^6.13.4: version "6.13.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==