From f662149718aae7bc019cc98caf731cd644403a35 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 09:37:16 +0530 Subject: [PATCH 01/10] Upgrade dependency to Web3 Onboard --- .nvmrc | 2 +- package.json | 7 +- yarn.lock | 849 ++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 822 insertions(+), 36 deletions(-) diff --git a/.nvmrc b/.nvmrc index 8351c1939..b6a7d89c6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -14 +16 diff --git a/package.json b/package.json index 2d5d90996..a590db3f7 100644 --- a/package.json +++ b/package.json @@ -177,11 +177,16 @@ "@sentry/react": "^6.10.0", "@sentry/tracing": "^6.10.0", "@unstoppabledomains/resolution": "^1.17.0", + "@web3-onboard/common": "^2.2.3", + "@web3-onboard/core": "^2.15.0", + "@web3-onboard/injected-wallets": "^2.7.0", + "@web3-onboard/react": "^2.6.2", + "@web3-onboard/transaction-preview": "^2.0.2", + "@web3-onboard/walletconnect": "^2.2.2", "@yplusvault/contract-deployments": "^0.9.0", "abi-decoder": "^2.4.0", "axios": "0.21.1", "bignumber.js": "9.0.1", - "bnc-onboard": "~1.36.0", "classnames": "^2.2.6", "connected-react-router": "6.8.0", "currency-flags": "2.1.2", diff --git a/yarn.lock b/yarn.lock index 48a49daf6..ace2a5413 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1523,7 +1523,22 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" + integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -1566,7 +1581,20 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.5.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== @@ -1603,7 +1631,18 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.5.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== @@ -1636,7 +1675,18 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/rlp" "^5.4.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -1654,7 +1704,14 @@ dependencies: "@ethersproject/bytes" "^5.4.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.5.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== @@ -1669,7 +1726,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.5.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== @@ -1686,7 +1751,16 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.5.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== @@ -1711,7 +1785,14 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.5.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== @@ -1725,7 +1806,14 @@ dependencies: "@ethersproject/bignumber" "^5.4.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.5.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== @@ -1748,6 +1836,22 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/transactions" "^5.4.0" +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/contracts@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" @@ -1778,7 +1882,21 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.5.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== @@ -1811,7 +1929,25 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.5.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== @@ -1848,7 +1984,26 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.5.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== @@ -1875,7 +2030,15 @@ "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.5.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== @@ -1888,7 +2051,12 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.1.tgz#503bd33683538b923c578c07d1c2c0dd18672054" integrity sha512-DZ+bRinnYLPw1yAC64oRl0QyVZj43QeHIhVKfD/+YwSz4wsv1pfwb5SOFjz+r710YEWzU6LrhuSjpSO+6PeE4A== -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.5.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== @@ -1905,7 +2073,14 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" + integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.5.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== @@ -1927,7 +2102,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/sha2" "^5.4.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.5.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== @@ -1942,7 +2125,14 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.5.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== @@ -1981,7 +2171,57 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2": +"@ethersproject/providers@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.2.tgz#131ccf52dc17afd0ab69ed444b8c0e3a27297d99" + integrity sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.3.tgz#56c2b070542ac44eb5de2ed3cf6784acd60a3130" + integrity sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.5.0": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -2015,7 +2255,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/random@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" + integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.5.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== @@ -2031,7 +2279,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.5.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== @@ -2048,7 +2304,16 @@ "@ethersproject/logger" "^5.4.0" hash.js "1.1.7" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.5.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== @@ -2069,7 +2334,19 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.5.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== @@ -2092,6 +2369,18 @@ "@ethersproject/sha2" "^5.4.0" "@ethersproject/strings" "^5.4.0" +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/solidity@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" @@ -2113,7 +2402,16 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.5.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== @@ -2137,7 +2435,22 @@ "@ethersproject/rlp" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.5.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== @@ -2161,6 +2474,15 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" @@ -2191,6 +2513,27 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + "@ethersproject/wallet@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" @@ -2223,7 +2566,18 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" + integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.5.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== @@ -2245,7 +2599,18 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.5.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== @@ -2256,6 +2621,45 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" + integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-skeleton-parser" "1.3.6" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" + integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" + integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== + dependencies: + tslib "^2.1.0" + "@gnosis.pm/safe-apps-provider@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.5.0.tgz#e0121553ef22c1458eb95cf0afed14e8c2570ae3" @@ -3160,11 +3564,23 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@sideway/formula@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + "@sideway/pinpoint@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" @@ -4815,6 +5231,17 @@ optionalDependencies: dotenv "^8.2.0" +"@unstoppabledomains/resolution@^8.0": + version "8.5.0" + resolved "https://registry.yarnpkg.com/@unstoppabledomains/resolution/-/resolution-8.5.0.tgz#7f65146fb3bc69bfae8699c4ed1c61f3d6f0096c" + integrity sha512-csqExbiK8F5mRKoHlDZjGuIEuvi63O8PSyhUcGhnTi76Il5fCREAGNVdTiRxagPPYoxCO+Xmf6kThwtmiws1Ow== + dependencies: + "@ethersproject/abi" "^5.0.1" + bn.js "^4.4.0" + cross-fetch "^3.1.4" + crypto-js "^4.1.1" + elliptic "^6.5.4" + "@walletconnect/browser-utils@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz#33c10e777aa6be86c713095b5206d63d32df0951" @@ -4826,7 +5253,7 @@ "@walletconnect/window-metadata" "1.0.0" detect-browser "5.2.0" -"@walletconnect/client@^1.8.0": +"@walletconnect/client@^1.7.1", "@walletconnect/client@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.8.0.tgz#6f46b5499c7c861c651ff1ebe5da5b66225ca696" integrity sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ== @@ -4914,7 +5341,7 @@ resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== -"@walletconnect/qrcode-modal@^1.8.0": +"@walletconnect/qrcode-modal@^1.7.1", "@walletconnect/qrcode-modal@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz#ddd6f5c9b7ee52c16adf9aacec2a3eac4994caea" integrity sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg== @@ -4992,6 +5419,77 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" +"@web3-onboard/common@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@web3-onboard/common/-/common-2.2.3.tgz#fc0841186d84cf017f4cf0368dcd349e6ed8dc8b" + integrity sha512-ZI0XuCpxtuL9XGgeWglXR6rhgLP261EMEstjonxy8ptuOKLlTJcgvL7wSx2MjNDO3i/qmb/PGQpInvxYx5klSA== + dependencies: + bignumber.js "^9.1.0" + ethers "5.5.4" + joi "^17.6.1" + +"@web3-onboard/core@^2.15.0": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@web3-onboard/core/-/core-2.15.0.tgz#23b0532c9d01aefed086725eeab2ad060a5b4057" + integrity sha512-YE4nBNT90VYxKCfpeyJEACA1W36kmuOlVcaGk/IMrZRUqKxtxFRdvheK7PhD6A5n4u5sEpDafSr7+bH6w6DiOw== + dependencies: + "@unstoppabledomains/resolution" "^8.0" + "@web3-onboard/common" "^2.2.3" + bignumber.js "^9.0.0" + bnc-sdk "^4.6.6" + bowser "^2.11.0" + ethers "5.5.3" + eventemitter3 "^4.0.7" + joi "^17.6.1" + lodash.merge "^4.6.2" + lodash.partition "^4.6.0" + nanoid "^4.0.0" + rxjs "^7.5.5" + svelte "^3.49.0" + svelte-i18n "^3.3.13" + +"@web3-onboard/injected-wallets@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@web3-onboard/injected-wallets/-/injected-wallets-2.7.0.tgz#31725e026b52d55e49ebb2d2bed6d77c1090a4cc" + integrity sha512-Prz9Ts38NnptpPOvBzzk0KyIDDqZ5x18U/CSLE9yqvbovQxlHteBGqWduJKmV4R5fvOHcggpZRD+EaExkpmFlg== + dependencies: + "@web3-onboard/common" "^2.2.3" + joi "^17.6.1" + lodash.uniqby "^4.7.0" + +"@web3-onboard/react@^2.6.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@web3-onboard/react/-/react-2.6.2.tgz#330f8f1f162466bbddff89a4a6c6d041d175d811" + integrity sha512-5Q2YBnyiLdVAvDJXrHGORsXvUAeZGDl5fb/MWVF1J9+AguNgqkH0LpFrl4DF5pDwBYWTGUW21y9YkuUszOiX+g== + dependencies: + "@web3-onboard/common" "^2.2.3" + "@web3-onboard/core" "^2.15.0" + use-sync-external-store "1.0.0" + +"@web3-onboard/transaction-preview@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@web3-onboard/transaction-preview/-/transaction-preview-2.0.2.tgz#5c96587b70def019eb699b4369230f365e06a96e" + integrity sha512-0Oe1Wioo1rpfKI6BACQUKWGY64vUtiLZ1fb54Umd91shm4PNTBhRKD03DSXhGbq5JsHROLE3VoFfRvTKClx+cw== + dependencies: + "@web3-onboard/common" "^2.2.3" + bnc-sdk "^4.6.6" + bowser "^2.11.0" + joi "^17.6.1" + rxjs "^7.5.2" + svelte "^3.49.0" + svelte-i18n "^3.3.13" + +"@web3-onboard/walletconnect@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3-onboard/walletconnect/-/walletconnect-2.2.2.tgz#202b700ee606d0a9055d4a716dba7b04e18da0f0" + integrity sha512-JIxjlUy3C0bbY76JQ50uwBLMtWRKXaxMDoeEcJQAnYcHMb+ba6B40qSv2BlJpAAEI7NGW52GHSdwUT0QOrM7Ng== + dependencies: + "@ethersproject/providers" "^5.5.0" + "@walletconnect/client" "^1.7.1" + "@walletconnect/qrcode-modal" "^1.7.1" + "@web3-onboard/common" "^2.2.3" + rxjs "^7.5.2" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -6499,6 +6997,11 @@ bignumber.js@9.0.1, bignumber.js@^9.0.0, bignumber.js@^9.0.1: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== +bignumber.js@^9.1.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -6697,6 +7200,16 @@ bnc-sdk@^3.4.1: rxjs "^6.6.3" sturdy-websocket "^0.1.12" +bnc-sdk@^4.6.6: + version "4.6.6" + resolved "https://registry.yarnpkg.com/bnc-sdk/-/bnc-sdk-4.6.6.tgz#ef5501a0c68014efae24d00d2e3fb706318fa00d" + integrity sha512-cpavy/WBQrkw5PZpnuUAvxzj/RjmP1vSldOEG+nonf7n/4sykScDO6KrJN2oVhEMaxHOqOVf2rOugSL5t515eA== + dependencies: + crypto-es "^1.2.2" + nanoid "^3.3.1" + rxjs "^6.6.3" + sturdy-websocket "^0.1.12" + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -6735,7 +7248,7 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570" integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g== -bowser@^2.10.0: +bowser@^2.10.0, bowser@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== @@ -7607,6 +8120,17 @@ cli-boxes@^2.2.0, cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-color@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" + integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.61" + es6-iterator "^2.0.3" + memoizee "^0.4.15" + timers-ext "^0.1.7" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -8261,6 +8785,13 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-fetch@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -8335,6 +8866,11 @@ crypto-js@^4.0.0: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg== +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -9623,6 +10159,15 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: es6-symbol "~3.1.3" next-tick "~1.0.0" +es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + es5-shim@^4.5.13: version "4.5.15" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.15.tgz#6a26869b261854a3b045273f5583c52d390217fe" @@ -9688,7 +10233,7 @@ es6-symbol@3.1.1: d "1" es5-ext "~0.10.14" -es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3, 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== @@ -9696,7 +10241,7 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -es6-weak-map@^2.0.1: +es6-weak-map@^2.0.1, es6-weak-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== @@ -10045,6 +10590,11 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== +estree-walker@^2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -10544,6 +11094,78 @@ ethers@4.0.47: uuid "2.0.1" xmlhttprequest "1.8.0" +ethers@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.3.tgz#1e361516711c0c3244b6210e7e3ecabf0c75fca0" + integrity sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.2" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.2" + "@ethersproject/random" "5.5.1" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.1" + "@ethersproject/wordlists" "5.5.0" + +ethers@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.4.tgz#e1155b73376a2f5da448e4a33351b57a885f4352" + integrity sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.2" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.3" + "@ethersproject/random" "5.5.1" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.1" + "@ethersproject/wordlists" "5.5.0" + ethers@^5.0.13: version "5.4.6" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.6.tgz#fe0a023956b5502c947f58e82fbcf9a73e5e75b6" @@ -10632,7 +11254,7 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-emitter@~0.3.5: +event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= @@ -10660,7 +11282,7 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@4.0.7, eventemitter3@^4.0.0: +eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -11735,6 +12357,11 @@ globalthis@^1.0.0, globalthis@^1.0.1: dependencies: define-properties "^1.1.3" +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + globby@11.0.1: version "11.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" @@ -11783,6 +12410,11 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -12685,6 +13317,16 @@ interpret@^2.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +intl-messageformat@^9.13.0: + version "9.13.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" + integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + tslib "^2.1.0" + invariant@2, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -13124,6 +13766,11 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-promise@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + is-regex@^1.0.4, is-regex@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" @@ -13828,6 +14475,17 @@ joi@^17.3.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" +joi@^17.6.1: + version "17.7.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.7.1.tgz#854fc85c7fa3cfc47c91124d30bffdbb58e06cec" + integrity sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -14732,6 +15390,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + lodash.unset@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" @@ -14858,6 +15521,13 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== + dependencies: + es5-ext "~0.10.2" + ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -15016,6 +15686,20 @@ memdown@^1.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== +memoizee@^0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" + integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.53" + es6-weak-map "^2.0.3" + event-emitter "^0.3.5" + is-promise "^2.2.2" + lru-queue "^0.1.0" + next-tick "^1.1.0" + timers-ext "^0.1.7" + memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" @@ -15429,6 +16113,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -15537,6 +16226,16 @@ nanoid@^3.1.20: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.3.1: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +nanoid@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.1.tgz#398d7ccfdbf9faf2231b2ca7e8fff5dbca6a509b" + integrity sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -15591,6 +16290,11 @@ neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^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, next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -15650,6 +16354,13 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -19363,6 +20074,20 @@ rxjs@6, rxjs@^6.1.0, rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.3: dependencies: tslib "^1.9.0" +rxjs@^7.5.2, rxjs@^7.5.5: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +sade@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -20746,6 +21471,23 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svelte-i18n@^3.3.13: + version "3.6.0" + resolved "https://registry.yarnpkg.com/svelte-i18n/-/svelte-i18n-3.6.0.tgz#0f345d066662dd8f46efefc0e867fb05b71c9dbd" + integrity sha512-qvvcMqHVCXJ5pHoQR5uGzWAW5vS3qB9mBq+W6veLZ6jkrzZGOziR+wyOUJsc59BupMh+Ae30qjOndFrRU6v5jA== + dependencies: + cli-color "^2.0.3" + deepmerge "^4.2.2" + estree-walker "^2" + intl-messageformat "^9.13.0" + sade "^1.8.1" + tiny-glob "^0.2.9" + +svelte@^3.49.0: + version "3.55.1" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.55.1.tgz#6f93b153e5248039906ce5fe196efdb9e05dfce8" + integrity sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ== + svg-parser@^2.0.0, svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -21072,6 +21814,14 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +timers-ext@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" + integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== + dependencies: + es5-ext "~0.10.46" + next-tick "1" + timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" @@ -21082,6 +21832,14 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + tiny-invariant@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" @@ -21235,7 +21993,7 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tr46@~0.0.1: +tr46@~0.0.1, tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= @@ -21321,6 +22079,11 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tslib@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" @@ -21787,6 +22550,11 @@ use-sidecar@^1.0.1: detect-node-es "^1.0.0" tslib "^1.9.3" +use-sync-external-store@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0.tgz#d98f4a9c2e73d0f958e7e2d2c2bfb5f618cbd8fd" + integrity sha512-AFVsxg5GkFg8GDcxnl+Z0lMAz9rE8DGJCc28qnBuQF7lac57B5smLcT37aXpXIIPz75rW4g3eXHPjhHwdGskOw== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -22655,6 +23423,11 @@ webidl-conversions@^2.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" integrity sha1-O/glj30xjHRDw28uFpQCoaZwNQY= +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -22919,6 +23692,14 @@ whatwg-url-compat@~0.6.5: dependencies: tr46 "~0.0.1" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0: version "8.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" From 32168da9674651c3bd4ca3a7995c0d021cf7d513 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 09:47:57 +0530 Subject: [PATCH 02/10] Enabled Web3Onboard with custom code for XDCPayV1 --- src/assets/icons/xdc-icon.svg | 777 ++++++++++++++++ src/assets/icons/xdc-logo.svg | 826 ++++++++++++++++++ src/assets/images/xdcpay.png | Bin 0 -> 1471 bytes src/assets/images/yodaplus-logo-wide.png | Bin 0 -> 3609 bytes src/assets/images/yodaplus_icon.png | Bin 0 -> 13745 bytes .../AppLayout/Header/components/Layout.tsx | 7 +- .../components/WalletIcon/icons/index.ts | 4 + src/components/AppLayout/Header/index.tsx | 45 +- src/components/ConnectButton/index.tsx | 105 +-- .../safe/store/actions/createTransaction.ts | 4 +- src/logic/wallets/__tests__/network.test.ts | 248 +++--- src/logic/wallets/eip1193.ts | 97 ++ src/logic/wallets/getWeb3.ts | 1 + .../wallets/store/actions/removeProvider.ts | 7 +- src/logic/wallets/types.ts | 56 ++ src/logic/wallets/utils/network.ts | 160 ++-- src/logic/wallets/walletConnection.ts | 319 +++++++ src/routes/welcome/components/index.tsx | 4 +- 18 files changed, 2331 insertions(+), 329 deletions(-) create mode 100644 src/assets/icons/xdc-icon.svg create mode 100644 src/assets/icons/xdc-logo.svg create mode 100644 src/assets/images/xdcpay.png create mode 100644 src/assets/images/yodaplus-logo-wide.png create mode 100644 src/assets/images/yodaplus_icon.png create mode 100644 src/logic/wallets/eip1193.ts create mode 100644 src/logic/wallets/types.ts create mode 100644 src/logic/wallets/walletConnection.ts diff --git a/src/assets/icons/xdc-icon.svg b/src/assets/icons/xdc-icon.svg new file mode 100644 index 000000000..7d28d07e6 --- /dev/null +++ b/src/assets/icons/xdc-icon.svg @@ -0,0 +1,777 @@ + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + 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 + + + diff --git a/src/assets/icons/xdc-logo.svg b/src/assets/icons/xdc-logo.svg new file mode 100644 index 000000000..27b5d0931 --- /dev/null +++ b/src/assets/icons/xdc-logo.svg @@ -0,0 +1,826 @@ + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + diff --git a/src/assets/images/xdcpay.png b/src/assets/images/xdcpay.png new file mode 100644 index 0000000000000000000000000000000000000000..96e42d011c9d7d5822e0f97f80a4196ab118ac98 GIT binary patch literal 1471 zcmV;w1wi_VP)e{}70xGbG#V>o&!WY#JdE{E8ZAi-0f^z)i(q+v7Q} zywSe((cbsk7;n;#*WTan{O)=8o^$Sf0$jGLK)6YPi5v%xBZ{7cB07KVQ}@eZ$(jtHTGboD z1FeLqm%-WgMI1z-bVN1vi+uU=50Kd^$Q2(Aq3t2_W7IkHk{5Q-I% zkh&+GHbZcgKQx;b*DvJV8HKj(h!5fS^CEHMNv-L$iO&%13+jXPLxUsoVu28QBcZ_Z zDT1ql`Wgk`{bJd5!%La5B^pw9GRH*^qag2|5Fl=FLtH#8#v)q4Hz}CJt|a9>vIbYL ztb&rOy$0;7Z_m){Y*vcKMP*P^ohmsd{)$8Qr!iSm00~ejsq`BjCc%C5B`C}C?8Ebc zU)+wJIuG|hJqi%FMjRR6kNFAxlXuE68GGC4eWg5ZbQWQ zA93>X2pk{#+qmX|@PN$5ci_h(6OIKZ0GfHRZKdh3-Z2XS-+X=nJh-gfpa_qS!BZXI z7~gpyJRm#o%iF}a*u(oNQQRpHzJ%a;x^H_u@FzFE?WHrP!M3*BjcfLJ(}s~L^IO&? z6-FcMVVyjz%7U%^*~9E#s7d*OABj$@6X-0%%5*pp?8s5%4M%=yh&L z)2D#R!$MiG%Ql3VY>$S5doyc^px&S$vT#Q`3+p1|5XV!&T!hl15%&>_{B?`6ZI5}{V;Ks3*qr{xD zD~)Rx*)2mjBI*>@LIuMxB^4FqnWEv%DOoFSW8v>E$KIS`J~> zW=-2XEgaRuh{Lp1sy8!T3x%~EP6V46E_&=LF`hQH3sVP2s|5Fi7olQGBoXm6-kJr=1R>zb@1Y#1`(7AFqo5)Db)j^%N19uhC zwlp;*i_vH(u-F7<2(D1|1s(+sQGJ~AR8!ir697V7D4tu6^ey{2t6=_-3i>T1_+=;j zg~rhNS}Rp*o6~u-9|jg++vHX}73=RrHUD!~9{c0g|4_7@*eQ$7IvT1oHd39D^_P62u*L5GoQvy!^~k^+WkqAS-0MX?jB{1s+j)&b*Iuf`T4H+Ow_JBFr-#!C zDg)uA^boO?GU9!?i1YfNo*pF;Hj~iL^XhL+9QlGSK3IH$`l}SNEAqv0Kk{UR^6LO? zF1w2UU@@Dp%B2JIJl=Q%C~zAkPCi8Qk*q3ugiDJZWAqlK-=ie*U>p+R<66@(nE_h+ Z{tGs49-(ph;ST@+002ovPDHLkV1n!B#^3+| literal 0 HcmV?d00001 diff --git a/src/assets/images/yodaplus-logo-wide.png b/src/assets/images/yodaplus-logo-wide.png new file mode 100644 index 0000000000000000000000000000000000000000..58993fecb5ff223164762508b3b688e079fc8633 GIT binary patch literal 3609 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 LQ=wAc>h1pk#XhG< literal 0 HcmV?d00001 diff --git a/src/components/AppLayout/Header/components/Layout.tsx b/src/components/AppLayout/Header/components/Layout.tsx index c6852400b..c72fcd4c1 100644 --- a/src/components/AppLayout/Header/components/Layout.tsx +++ b/src/components/AppLayout/Header/components/Layout.tsx @@ -16,9 +16,10 @@ import Row from 'src/components/layout/Row' import { headerHeight, md, screenSm, sm } from 'src/theme/variables' import { useStateHandler } from 'src/logic/hooks/useStateHandler' -import SafeLogo from '../assets/yodaplus-logo-wide.png' +import SafeLogo from 'src/assets/images/yodaplus-logo-wide.png' import { getNetworks } from 'src/config' -import { shouldSwitchNetwork } from 'src/logic/wallets/utils/network' +//import { shouldSwitchNetwork } from 'src/logic/wallets/utils/network' +import { Web3OnboardProvider, init } from '@web3-onboard/react' const styles = () => ({ root: { @@ -87,7 +88,7 @@ const Layout = ({ classes, providerDetails, providerInfo }) => { diff --git a/src/components/AppLayout/Header/components/WalletIcon/icons/index.ts b/src/components/AppLayout/Header/components/WalletIcon/icons/index.ts index 7e41e7307..cb40dce62 100644 --- a/src/components/AppLayout/Header/components/WalletIcon/icons/index.ts +++ b/src/components/AppLayout/Header/components/WalletIcon/icons/index.ts @@ -25,6 +25,10 @@ const WALLET_ICONS: { [key in WALLET_PROVIDER]: { src: string; height: number } src: xinpayIcon, height: 25, }, + [WALLET_PROVIDER.XDCPAYV1]: { + src: xinpayIcon, + height: 25, + }, [WALLET_PROVIDER.METAMASK]: { src: metamaskIcon, height: 25, diff --git a/src/components/AppLayout/Header/index.tsx b/src/components/AppLayout/Header/index.tsx index 861e08e4d..d1dade14b 100644 --- a/src/components/AppLayout/Header/index.tsx +++ b/src/components/AppLayout/Header/index.tsx @@ -14,9 +14,10 @@ import { userAccountSelector, } from 'src/logic/wallets/store/selectors' import { removeProvider } from 'src/logic/wallets/store/actions' -import { canSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network' -import { getNetworkId } from 'src/config' -import { onboard } from 'src/components/ConnectButton' +//import { canSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network' +//import { getNetworkId } from 'src/config' +//import { onboard, State } from 'src/components/ConnectButton' +import { OnboardUser, disconnectWallet } from 'src/logic/wallets/walletConnection' import { loadLastUsedProvider } from 'src/logic/wallets/store/middlewares/providerWatcher' const HeaderComponent = (): React.ReactElement => { @@ -26,39 +27,39 @@ const HeaderComponent = (): React.ReactElement => { const loaded = useSelector(loadedSelector) const available = useSelector(availableSelector) const dispatch = useDispatch() - const showSwitchButton = canSwitchNetwork() + //const showSwitchButton = canSwitchNetwork() useEffect(() => { const tryToConnectToLastUsedProvider = async () => { const lastUsedProvider = await loadLastUsedProvider() if (lastUsedProvider) { - await onboard.walletSelect(lastUsedProvider) + //await onboard.walletSelect(lastUsedProvider) + OnboardUser() } } tryToConnectToLastUsedProvider() }, []) - const openDashboard = () => { - const { wallet } = onboard.getState() - return wallet.type === 'sdk' && wallet.dashboard - } + // const openDashboard = () => { + // return PrimaryWallet.type === 'sdk' && PrimaryWallet.dashboard + // } const onDisconnect = () => { dispatch(removeProvider()) } - const onNetworkChange = async () => { - const { wallet } = onboard.getState() - const desiredNetwork = getNetworkId() - try { - await switchNetwork(wallet, desiredNetwork) - } catch (e) { - e.log() - // Fallback to the onboard popup if switching isn't supported - await onboard.walletCheck() - } - } + // const onNetworkChange = async () => { + // const { wallet } = State + // const desiredNetwork = getNetworkId() + // try { + // await switchNetwork(wallet, desiredNetwork) + // } catch (e) { + // e.log() + // // Fallback to the onboard popup if switching isn't supported + // await onboard.walletCheck() + // } + // } const getProviderInfoBased = () => { if (!loaded || !provider) { @@ -78,8 +79,8 @@ const HeaderComponent = (): React.ReactElement => { connected={available} network={network} onDisconnect={onDisconnect} - onNetworkChange={showSwitchButton ? onNetworkChange : undefined} - openDashboard={openDashboard()} + // onNetworkChange={showSwitchButton ? onNetworkChange : undefined} + //openDashboard={openDashboard()} provider={provider} userAddress={userAddress} /> diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index a4dd393da..29ef44f25 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -1,107 +1,24 @@ -import Onboard from 'bnc-onboard' import React, { ReactElement } from 'react' import Button from 'src/components/layout/Button' import { getNetworkName, getNetworkId } from 'src/config' -import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' -import { fetchProvider, removeProvider } from 'src/logic/wallets/store/actions' -import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' -import { getSupportedWallets } from 'src/logic/wallets/utils/walletList' -import { store } from 'src/store' -import { shouldSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network' -import { transformProviderFromXinfin } from 'src/utils/xinfin' +//import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' +// import { fetchProvider, removeProvider } from 'src/logic/wallets/store/actions' +// import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' +//import { getSupportedWallets } from 'src/logic/wallets/utils/walletList' +// import { store } from 'src/store' +// import { shouldSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network' +// import { transformProviderFromXinfin } from 'src/utils/xinfin' +import { OnboardUser } from 'src/logic/wallets/walletConnection' const networkId = getNetworkId() const networkName = getNetworkName().toLowerCase() -let lastUsedAddress = '' -let providerName - -const wallets = getSupportedWallets() - -export const onboard = Onboard({ - networkId, - networkName, - subscriptions: { - wallet: (wallet) => { - if (wallet.provider && 'qrcodeModalOptions' in wallet.provider) { - wallet.provider.connector._qrcodeModalOptions = { - desktopLinks: [], - } - } - - if (wallet.provider) { - // this function will intialize web3 and store it somewhere available throughout the dapp and - // can also instantiate your contracts with the web3 instance - setWeb3(transformProviderFromXinfin(wallet.provider)) - providerName = wallet.name - } - }, - address: (address) => { - if (!lastUsedAddress && address) { - lastUsedAddress = address - store.dispatch(fetchProvider(providerName)) - } - - // we don't have an unsubscribe event so we rely on this - if (!address && lastUsedAddress) { - lastUsedAddress = '' - providerName = undefined - store.dispatch(removeProvider()) - } - }, - }, - walletSelect: { - description: 'Please select a wallet to connect to Yodaplus Multi-Sig Safe', - explanation: - 'Wallets are used to send, receive, and store digital assets. Wallets come in many forms. They are either built into your browser, an extension added to your browser, a piece of hardware plugged into your computer or even an app on your phone.', - wallets, - }, - walletCheck: [ - { checkName: 'derivationPath' }, - { checkName: 'connect' }, - { checkName: 'accounts' }, - { checkName: 'network' }, - transactionDataCheck(), - ], -}) - -const checkWallet = async (): Promise => { - const ready = onboard.walletCheck() - - if (shouldSwitchNetwork()) { - try { - await switchNetwork(onboard.getState().wallet, getNetworkId()) - return true - } catch (e) { - e.log() - return false - } - } - - return await ready -} - -export const onboardUser = async (): Promise => { - // before calling walletSelect you want to check if web3 has been instantiated - // which indicates that a wallet has already been selected - // and web3 has been instantiated with that provider - const web3 = getWeb3() - const walletSelected = web3 ? true : await onboard.walletSelect() - return walletSelected && checkWallet() -} - -export const onConnectButtonClick = async (): Promise => { - const walletSelected = await onboard.walletSelect() - - // perform wallet checks only if user selected a wallet - if (walletSelected) { - await checkWallet() - } -} +// let lastUsedAddress = '' +// let providerName const ConnectButton = (props: { 'data-testid': string }): ReactElement => ( - ) diff --git a/src/logic/safe/store/actions/createTransaction.ts b/src/logic/safe/store/actions/createTransaction.ts index 3eda87a0a..6e81597c2 100644 --- a/src/logic/safe/store/actions/createTransaction.ts +++ b/src/logic/safe/store/actions/createTransaction.ts @@ -2,7 +2,7 @@ import { push } from 'connected-react-router' import { AnyAction } from 'redux' import { ThunkAction } from 'redux-thunk' -import { onboardUser } from 'src/components/ConnectButton' +import { OnboardUser } from 'src/logic/wallets/walletConnection' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { getNotificationsFromTxType, NOTIFICATIONS } from 'src/logic/notifications' import { @@ -86,7 +86,7 @@ export const createTransaction = ) } - const ready = await onboardUser() + const ready = await OnboardUser() if (!ready) return const { account: from, hardwareWallet, smartContractWallet } = providerSelector(state) diff --git a/src/logic/wallets/__tests__/network.test.ts b/src/logic/wallets/__tests__/network.test.ts index c283012fd..415a23ba6 100644 --- a/src/logic/wallets/__tests__/network.test.ts +++ b/src/logic/wallets/__tests__/network.test.ts @@ -1,124 +1,124 @@ -import { Wallet } from 'bnc-onboard/dist/src/interfaces' -import { switchNetwork, shouldSwitchNetwork, canSwitchNetwork } from 'src/logic/wallets/utils/network' - -class CodedError extends Error { - public code: number -} - -jest.mock('src/config', () => { - const original = jest.requireActual('src/config') - return { - ...original, - getNetworkId: () => 1, - } -}) - -describe('src/logic/wallets/utils/network', () => { - describe('switchNetwork', () => { - it('should try to add a network config if chain is unrecognized', () => { - const wallet = { - provider: { - request: jest.fn(() => { - const err = new CodedError('No such chain') - err.code = 4902 - return Promise.reject(err) - }), - }, - } - - expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( - 'Code 301: Error adding a new wallet network (No such chain)', - ) - }) - - it('should throw if provider throws', () => { - const wallet = { - provider: { - request: jest.fn(() => { - const err = new CodedError('Some error') - err.code = 4454 - return Promise.reject(err) - }), - }, - } - - expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( - 'Code 300: Error switching the wallet network (Some error)', - ) - }) - - it('should resolve to undefined when user rejects', () => { - const wallet = { - provider: { - request: jest.fn(() => { - const err = new CodedError('User rejected') - err.code = 4001 - return Promise.reject(err) - }), - }, - } - - expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) - }) - - it('should resolve to undefined if request succeeds', () => { - const wallet = { - provider: { - request: jest.fn(() => Promise.resolve(true)), - }, - } - - expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) - }) - }) - - describe('shouldSwitchNetwork', () => { - it('should return true when networks mismatch', () => { - const wallet = { - provider: { - networkVersion: '4', - }, - } - - expect(shouldSwitchNetwork(wallet as Wallet)).toBe(true) - }) - - it('should return false when wallet is not connected', () => { - const wallet = { - provider: undefined, - } - - expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) - }) - - it('should return false when networks are the same', () => { - const wallet = { - provider: { - networkVersion: '1', - }, - } - - expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) - }) - }) - - describe('canSwitchNetwork', () => { - it('should return true when swithcing is supported', () => { - const wallet = { - provider: { - isMetaMask: true, - }, - } - - expect(canSwitchNetwork(wallet as Wallet)).toBe(true) - }) - - it('should return false when swithcing is not supported', () => { - const wallet = { - provider: undefined, - } - - expect(canSwitchNetwork(wallet as Wallet)).toBe(false) - }) - }) -}) +// import { Wallet } from 'bnc-onboard/dist/src/interfaces' +// import { switchNetwork, shouldSwitchNetwork, canSwitchNetwork } from 'src/logic/wallets/utils/network' + +// class CodedError extends Error { +// public code: number +// } + +// jest.mock('src/config', () => { +// const original = jest.requireActual('src/config') +// return { +// ...original, +// getNetworkId: () => 1, +// } +// }) + +// describe('src/logic/wallets/utils/network', () => { +// describe('switchNetwork', () => { +// it('should try to add a network config if chain is unrecognized', () => { +// const wallet = { +// provider: { +// request: jest.fn(() => { +// const err = new CodedError('No such chain') +// err.code = 4902 +// return Promise.reject(err) +// }), +// }, +// } + +// expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( +// 'Code 301: Error adding a new wallet network (No such chain)', +// ) +// }) + +// it('should throw if provider throws', () => { +// const wallet = { +// provider: { +// request: jest.fn(() => { +// const err = new CodedError('Some error') +// err.code = 4454 +// return Promise.reject(err) +// }), +// }, +// } + +// expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( +// 'Code 300: Error switching the wallet network (Some error)', +// ) +// }) + +// it('should resolve to undefined when user rejects', () => { +// const wallet = { +// provider: { +// request: jest.fn(() => { +// const err = new CodedError('User rejected') +// err.code = 4001 +// return Promise.reject(err) +// }), +// }, +// } + +// expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) +// }) + +// it('should resolve to undefined if request succeeds', () => { +// const wallet = { +// provider: { +// request: jest.fn(() => Promise.resolve(true)), +// }, +// } + +// expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) +// }) +// }) + +// describe('shouldSwitchNetwork', () => { +// it('should return true when networks mismatch', () => { +// const wallet = { +// provider: { +// networkVersion: '4', +// }, +// } + +// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(true) +// }) + +// it('should return false when wallet is not connected', () => { +// const wallet = { +// provider: undefined, +// } + +// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) +// }) + +// it('should return false when networks are the same', () => { +// const wallet = { +// provider: { +// networkVersion: '1', +// }, +// } + +// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) +// }) +// }) + +// describe('canSwitchNetwork', () => { +// it('should return true when swithcing is supported', () => { +// const wallet = { +// provider: { +// isMetaMask: true, +// }, +// } + +// expect(canSwitchNetwork(wallet as Wallet)).toBe(true) +// }) + +// it('should return false when swithcing is not supported', () => { +// const wallet = { +// provider: undefined, +// } + +// expect(canSwitchNetwork(wallet as Wallet)).toBe(false) +// }) +// }) +// }) diff --git a/src/logic/wallets/eip1193.ts b/src/logic/wallets/eip1193.ts new file mode 100644 index 000000000..65a1418aa --- /dev/null +++ b/src/logic/wallets/eip1193.ts @@ -0,0 +1,97 @@ +import { + RequestPatch, + Balance, + ChainId, + EIP1193Provider, + ProviderAccounts, + ProviderRpcError, +} from '@web3-onboard/common' + +/** + * Takes a provider instance along with events + * and requests to override and returns an EIP1193 provider + * + * ## Example: + * + * *Overriding events: * + * ```typescript + * ``` + * + * @param provider The provider to patch + * @param requestPatch An `object` with the method to patch + * and the implementation with which to patch + * @param events Events to patch + * @returns An EIP1193 Provider + */ +export const createXDCPayProvider = (provider: any, requestPatch?: RequestPatch): EIP1193Provider => { + let baseRequest: any + if (provider.request) { + // Copy the original request method and bind the provider context to it + baseRequest = provider.request.bind(provider) + } else if (provider.sendAsync) { + baseRequest = createRequest(provider) + } + + const request: EIP1193Provider['request'] = async ({ method, params }) => { + const key = method as keyof RequestPatch + + // If the request method is set to null + // this indicates this method is not supported + if (requestPatch && requestPatch[key] === null) { + throw new ProviderRpcError({ + code: 4200, + message: `The Provider does not support the requested method: ${method}`, + }) + } + + if (requestPatch && requestPatch[key]) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore // @TODO - Fix this type error + return requestPatch[key]({ baseRequest, params }) + } else if (baseRequest) { + return baseRequest({ method, params }) + } else { + throw new ProviderRpcError({ + code: 4200, + message: `The Provider does not support the requested method: ${method}`, + }) + } + } + provider.request = request + return provider +} + +interface JsonRpcResponse { + id: string | undefined + jsonrpc: '2.0' + method: string + result?: ProviderAccounts | Balance | ProviderAccounts | ChainId | null + error?: string +} + +const createRequest = (provider: any): EIP1193Provider['request'] => + (({ method, params }) => + new Promise((resolve, reject) => { + if (method !== 'wallet_getPermissions') { + provider.sendAsync( + { + id: 0, + jsonrpc: '2.0', + method, + params, + }, + (error: string, { result }: JsonRpcResponse) => { + if (error) { + const stringConstructor = 'String'.constructor + if (error.constructor === stringConstructor) { + reject(JSON.parse(error)) + } else { + reject() + } + } else { + resolve(result == undefined ? null : (result as any)) + } + }, + ) + } + })) as EIP1193Provider['request'] diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 1c7d2d95c..efce3c46b 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -14,6 +14,7 @@ import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' export enum WALLET_PROVIDER { DETECTED_WALLET = 'DETECTED WALLET', XDCPAY = 'XDCPAY', + XDCPAYV1 = 'XDCPAY V1', METAMASK = 'METAMASK', TORUS = 'TORUS', PORTIS = 'PORTIS', diff --git a/src/logic/wallets/store/actions/removeProvider.ts b/src/logic/wallets/store/actions/removeProvider.ts index 1ca0c3d48..ba3c98841 100644 --- a/src/logic/wallets/store/actions/removeProvider.ts +++ b/src/logic/wallets/store/actions/removeProvider.ts @@ -1,7 +1,9 @@ import { Dispatch } from 'src/logic/safe/store/actions/types.d' import { createAction } from 'redux-actions' -import { onboard } from 'src/components/ConnectButton' +//import { onboard } from 'src/components/ConnectButton' +import { disconnectWallet } from 'src/logic/wallets/walletConnection' + import { resetWeb3 } from 'src/logic/wallets/getWeb3' export const REMOVE_PROVIDER = 'REMOVE_PROVIDER' @@ -10,7 +12,8 @@ const removeProvider = createAction(REMOVE_PROVIDER) export default () => (dispatch: Dispatch): void => { - onboard.walletReset() + //onboard.walletReset() + disconnectWallet() resetWeb3() dispatch(removeProvider()) diff --git a/src/logic/wallets/types.ts b/src/logic/wallets/types.ts new file mode 100644 index 000000000..347d02ae3 --- /dev/null +++ b/src/logic/wallets/types.ts @@ -0,0 +1,56 @@ +import type { ExternalProvider } from '@ethersproject/providers' +import { WalletModule, Platform, Device } from '@web3-onboard/common' + +/** + * The `ProviderIdentityFlag` is a property on an injected provider + * that uniquely identifies that provider + */ +export enum ProviderIdentityFlag { + MetaMask = 'isMetaMask', + XDCPay = 'isXDCPay', +} + +export enum ProviderLabel { + MetaMask = 'MetaMask', + XDCPay = 'XDCPay', +} + +export enum InjectedNameSpace { + Ethereum = 'ethereum', + Web3 = 'web3', +} + +export type InjectedProvider = ExternalProvider & Record & Record + +export type WalletFilters = { + /**A provider label mapped to a list of excluded platforms + * or a boolean indicating if it should be included. */ + [key in ProviderLabel | string]?: Platform[] | boolean | 'unavailable' +} + +export interface InjectedWalletOptions { + /**A list of injected wallets to include that + * are not included by default here: ./packages/injected/ */ + custom?: InjectedWalletModule[] + /**A mapping of a provider label to a list of filtered platforms + * or a boolean indicating if it should be included or not. + * By default all wallets listed in ./packages/injected/ + * are included add them to here to remove them. */ + filter?: WalletFilters + /**Will display wallets to be selected even if they + * are not currently available to the end user. + */ + displayUnavailable?: boolean + /**A function that allows for customizing the message to be displayed if the wallet + * is unavailable + */ + walletUnavailableMessage?: (wallet: WalletModule) => string + /**Function that can be used to sort the order of wallets that are displayed */ + sort?: (wallets: WalletModule[]) => WalletModule[] +} + +export interface InjectedWalletModule extends WalletModule { + injectedNamespace: InjectedNameSpace + checkProviderIdentity: (helpers: { provider: any; device: Device }) => boolean + platforms: Platform[] +} diff --git a/src/logic/wallets/utils/network.ts b/src/logic/wallets/utils/network.ts index fbc50da34..0dd266aeb 100644 --- a/src/logic/wallets/utils/network.ts +++ b/src/logic/wallets/utils/network.ts @@ -1,89 +1,89 @@ -import { Wallet } from 'bnc-onboard/dist/src/interfaces' -import { onboard } from 'src/components/ConnectButton' -import { getConfig, getNetworkId } from 'src/config' -import { Errors, CodedException } from 'src/logic/exceptions/CodedException' -import { numberToHex } from 'web3-utils' +// //import { Wallet } from 'bnc-onboard/dist/src/interfaces' +// import { onboard } from 'src/config/wallets' +// import { getConfig, getNetworkId } from 'src/config' +// import { Errors, CodedException } from 'src/logic/exceptions/CodedException' +// import { numberToHex } from 'web3-utils' -const WALLET_ERRORS = { - UNRECOGNIZED_CHAIN: 4902, - USER_REJECTED: 4001, - // ADDING_EXISTING_CHAIN: -32603, -} +// const WALLET_ERRORS = { +// UNRECOGNIZED_CHAIN: 4902, +// USER_REJECTED: 4001, +// // ADDING_EXISTING_CHAIN: -32603, +// } -/** - * Switch the chain assuming it's MetaMask. - * @see https://github.com/MetaMask/metamask-extension/pull/10905 - */ -const requestSwitch = async (wallet: Wallet, chainId: number): Promise => { - await wallet.provider.request({ - method: 'wallet_switchEthereumChain', - params: [ - { - chainId: numberToHex(chainId), - }, - ], - }) -} +// /** +// * Switch the chain assuming it's MetaMask. +// * @see https://github.com/MetaMask/metamask-extension/pull/10905 +// */ +// const requestSwitch = async (wallet: Wallet, chainId: number): Promise => { +// await wallet.provider.request({ +// method: 'wallet_switchEthereumChain', +// params: [ +// { +// chainId: numberToHex(chainId), +// }, +// ], +// }) +// } -/** - * Add a chain config based on EIP-3085. - * Known to be implemented by MetaMask. - * @see https://docs.metamask.io/guide/rpc-api.html#wallet-addethereumchain - */ -const requestAdd = async (wallet: Wallet, chainId: number): Promise => { - const cfg = getConfig() +// /** +// * Add a chain config based on EIP-3085. +// * Known to be implemented by MetaMask. +// * @see https://docs.metamask.io/guide/rpc-api.html#wallet-addethereumchain +// */ +// const requestAdd = async (wallet: Wallet, chainId: number): Promise => { +// const cfg = getConfig() - await wallet.provider.request({ - method: 'wallet_addEthereumChain', - params: [ - { - chainId: numberToHex(chainId), - chainName: cfg.network.label, - nativeCurrency: { - name: cfg.network.nativeCoin.name, - symbol: cfg.network.nativeCoin.symbol, - decimals: cfg.network.nativeCoin.decimals, - }, - rpcUrls: [cfg.rpcServiceUrl], - blockExplorerUrls: [cfg.networkExplorerUrl], - }, - ], - }) -} +// await wallet.provider.request({ +// method: 'wallet_addEthereumChain', +// params: [ +// { +// chainId: numberToHex(chainId), +// chainName: cfg.network.label, +// nativeCurrency: { +// name: cfg.network.nativeCoin.name, +// symbol: cfg.network.nativeCoin.symbol, +// decimals: cfg.network.nativeCoin.decimals, +// }, +// rpcUrls: [cfg.rpcServiceUrl], +// blockExplorerUrls: [cfg.networkExplorerUrl], +// }, +// ], +// }) +// } -/** - * Try switching the wallet chain, and if it fails, try adding the chain config - */ -export const switchNetwork = async (wallet: Wallet, chainId: number): Promise => { - try { - await requestSwitch(wallet, chainId) - } catch (e) { - if (e.code === WALLET_ERRORS.USER_REJECTED) { - return - } +// /** +// * Try switching the wallet chain, and if it fails, try adding the chain config +// */ +// export const switchNetwork = async (wallet: Wallet, chainId: number): Promise => { +// try { +// await requestSwitch(wallet, chainId) +// } catch (e) { +// if (e.code === WALLET_ERRORS.USER_REJECTED) { +// return +// } - if (e.code == WALLET_ERRORS.UNRECOGNIZED_CHAIN) { - try { - await requestAdd(wallet, chainId) - } catch (e) { - if (e.code === WALLET_ERRORS.USER_REJECTED) { - return - } +// if (e.code == WALLET_ERRORS.UNRECOGNIZED_CHAIN) { +// try { +// await requestAdd(wallet, chainId) +// } catch (e) { +// if (e.code === WALLET_ERRORS.USER_REJECTED) { +// return +// } - throw new CodedException(Errors._301, e.message) - } - } else { - throw new CodedException(Errors._300, e.message) - } - } -} +// throw new CodedException(Errors._301, e.message) +// } +// } else { +// throw new CodedException(Errors._300, e.message) +// } +// } +// } -export const shouldSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { - const desiredNetwork = String(getNetworkId()) - const currentNetwork = wallet?.provider?.networkVersion - return currentNetwork ? desiredNetwork !== currentNetwork : false -} +// export const shouldSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { +// const desiredNetwork = String(getNetworkId()) +// const currentNetwork = wallet?.provider?.networkVersion +// return currentNetwork ? desiredNetwork !== currentNetwork : false +// } -export const canSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { - return wallet?.provider?.isMetaMask || false -} +// export const canSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { +// return wallet?.provider?.isMetaMask || false +// } diff --git a/src/logic/wallets/walletConnection.ts b/src/logic/wallets/walletConnection.ts new file mode 100644 index 000000000..855af0988 --- /dev/null +++ b/src/logic/wallets/walletConnection.ts @@ -0,0 +1,319 @@ +import { createEIP1193Provider, WalletInit, WalletModule, Device, EIP1102Request } from '@web3-onboard/common' +import Onboard, { WalletState } from '@web3-onboard/core' +import { AccountCenterOptions, AccountCenter, ConnectModalOptions } from '@web3-onboard/core/dist/types' +import { InjectedWalletModule, InjectedWalletOptions } from '@web3-onboard/injected-wallets/dist/types' +import walletConnectModule from '@web3-onboard/walletconnect' +import { InjectedProvider } from '@web3-onboard/injected-wallets/dist/types' +import { CustomWindow } from '@web3-onboard/injected-wallets/dist/types' +import { RequestPatch } from '@web3-onboard/common' +import { EthBalanceRequest, SelectAccountsRequest } from '@web3-onboard/common' +import { ProviderRpcError, ProviderRpcErrorCode } from '@web3-onboard/common' + +import XDCPayIcon from 'src/assets/icons/xdc-icon.svg' +import VaultIcon from 'src/assets/images/yodaplus_icon.png' +import VaultIconWide from 'src/assets/images/yodaplus-logo-wide.png' +import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' +import { InjectedNameSpace, ProviderLabel } from 'src/logic/wallets/types' +import { fetchProvider } from 'src/logic/wallets/store/actions' +import { store } from 'src/store' +import { transformProviderFromXinfin } from 'src/utils/xinfin' +import { createXDCPayProvider } from './eip1193' + +export const isWalletAvailable = ( + provider: InjectedProvider, + checkProviderIdentity: InjectedWalletModule['checkProviderIdentity'], + device: Device, +): boolean => { + // No injected providers exist. + if (!provider) { + return false + } + + // Many injected providers add their own object into window. + if (checkProviderIdentity({ provider, device })) { + return true + } + + // For multiple injected providers, check providers array + // example coinbase inj wallet pushes over-ridden wallets + // into a providers array at window.ethereum + return !!provider.providers?.some((provider) => checkProviderIdentity({ provider, device })) +} + +function isXDCPay(provider) { + //return !!provider && (!!provider.isXDCPay || !!provider.isMetaMask) + return !!provider && !!provider.isXDCPay +} + +async function getAddress() { + const accounts = await getWeb3().eth.getAccounts() + if (accounts.length === 0) { + throw new ProviderRpcError({ + code: ProviderRpcErrorCode.ACCOUNT_ACCESS_REJECTED, + message: 'User rejected the request.', + }) + } + return accounts +} + +const xdcPayRequestPatch: RequestPatch = { + eth_requestAccounts: ({ baseRequest }) => { + return getWeb3().eth.getAccounts() + }, + eth_getBalance: async ({ baseRequest }) => { + const accounts = await getAddress() + const activeAddress = accounts[0] + const balanceReq: EthBalanceRequest = { + method: 'eth_getBalance', + params: [activeAddress, 'latest'], + } + const response = baseRequest(balanceReq) + return response + }, + eth_selectAccounts: ({ baseRequest }) => { + const request: SelectAccountsRequest = { + method: 'eth_selectAccounts', + } + return baseRequest(request) + }, +} + +const xdcPayModule: InjectedWalletModule = { + label: 'XDCPay V1', + injectedNamespace: InjectedNameSpace.Ethereum, + checkProviderIdentity: ({ provider }) => isXDCPay(provider), + getIcon: async () => XDCPayIcon, + // getInterface: async () => { + // const anyWindow: any = window + // if('ethereum' in window){ + // return { + // provider: createXDCPayProvider(window.ethereum), + // } + // } + // window.open('https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', '_blank') + // throw new Error('Please install XDCPay before proceeding') + + // }, + getInterface: async () => ({ + provider: createXDCPayProvider(window.ethereum, xdcPayRequestPatch), + }), + platforms: ['all'], +} + +const metamaskModule: InjectedWalletModule = { + label: ProviderLabel.XDCPay, + injectedNamespace: InjectedNameSpace.Ethereum, + checkProviderIdentity: ({ provider }) => !!provider && !!provider.isMetaMask, + //getIcon: async () => (await import('./icons/metamask')).default, + getIcon: async () => XDCPayIcon, + getInterface: async () => ({ + provider: createEIP1193Provider(window.ethereum), + }), + platforms: ['all'], +} + +export const defaultWalletUnavailableMsg = ({ label }: InjectedWalletModule) => + `Please install or enable ${label} to continue` + +function injected(options?: InjectedWalletOptions): WalletInit { + if (typeof window === 'undefined') return () => null + + return (helpers) => { + const { device } = helpers + + const { custom = [], filter = {}, displayUnavailable, sort, walletUnavailableMessage } = options || {} + + // combine custom with standard wallets and dedupe + const allWallets = [...custom] + + const wallets = allWallets.reduce((acc, wallet) => { + const { label, platforms, injectedNamespace, checkProviderIdentity } = wallet + + const walletFilters = filter[label] + const filteredWallet = walletFilters === false + const provider = window[injectedNamespace] as CustomWindow['ethereum'] + + const walletAvailable = isWalletAvailable(provider, checkProviderIdentity, device) + + let excludedDevice = false + + // dev specified platform filters + if ( + Array.isArray(walletFilters) && + (walletFilters.includes(device.type) || walletFilters.includes(device.os.name)) + ) { + excludedDevice = true + } + + // unavailable filter + if (walletFilters === 'unavailable' && !walletAvailable) { + excludedDevice = true + } + + // wallet specified platform filters + const invalidPlatform = + !platforms.includes('all') && !platforms.includes(device.type) && !platforms.includes(device.os.name) + + const supportedWallet = + !filteredWallet && !excludedDevice && !invalidPlatform && (walletAvailable || displayUnavailable) + + if (supportedWallet) { + acc.push( + // modify wallet to display error if unavailable but displayUnavailable is set + displayUnavailable && !walletAvailable + ? { + ...wallet, + getInterface: async () => { + throw new Error( + walletUnavailableMessage ? walletUnavailableMessage(wallet) : defaultWalletUnavailableMsg(wallet), + ) + }, + } + : // otherwise add wallet to list as is + wallet, + ) + } + + return acc + }, [] as InjectedWalletModule[]) + + if (wallets.length) { + const moreThanOneWallet = wallets.length > 1 + + // if more than one wallet, then remove detected wallet + const formattedWallets = wallets + .filter((wallet) => { + const { label } = wallet + return !(label === ProviderLabel.MetaMask && moreThanOneWallet) + }) + // then map to the WalletModule interface + .map(({ label, getIcon, getInterface }: InjectedWalletModule) => ({ + label, + getIcon, + getInterface, + })) + // default sort by alphabetical + .sort((a, b) => (a.label < b.label ? -1 : a.label > b.label ? 1 : 0)) + + return sort ? sort(formattedWallets) : formattedWallets + } + + return [] + } +} + +const injectedWalletOpts: InjectedWalletOptions = { + custom: [xdcPayModule, metamaskModule], + displayUnavailable: true, +} + +const web3 = getWeb3() +let lastUsedAddress = '' +let providerName + +const walletConnect = walletConnectModule({ + bridge: 'https://bridge.walletconnect.org', + qrcodeModalOptions: { + mobileLinks: ['rainbow', 'metamask', 'argent', 'trust', 'imtoken', 'pillar'], + }, + connectFirstChainId: true, +}) + +const enabledChains = [ + { + id: '0x32', + token: 'XDC', + label: 'XDC-Mainnet', + rpcUrl: 'https://rpc.xinfin.yodaplus.net', + //icon: XDCPayIcon, + }, + { + id: '0x33', + token: 'TXDC', + label: 'XDC-Apothem', + rpcUrl: 'https://rpc-apothem.xinfin.yodaplus.net', + //icon: XDCPayIcon, + }, +] + +const yplusVaultMetadata = { + name: 'YplusVault', + icon: VaultIcon, // svg string icon ? + logo: VaultIconWide, // svg string logo + description: 'Multisig Vault for XDC Network', + recommendedInjectedWallets: [ + { name: 'XDCPay', url: 'https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo' }, + ], +} + +const onboardAccountCentre: AccountCenterOptions = { + desktop: { + position: 'bottomRight', + enabled: true, + minimal: false, + }, + mobile: { + position: 'bottomLeft', + enabled: false, + minimal: false, + }, +} + +const connectOptions: ConnectModalOptions = { + showSidebar: true, + //autoConnectLastWallet: true +} + +const onboard = Onboard({ + wallets: [injected(injectedWalletOpts), walletConnect], + chains: enabledChains, + appMetadata: yplusVaultMetadata, + accountCenter: onboardAccountCentre, + connect: connectOptions, +}) + +function processStateUpdate(state) { + const [connectedWallet] = state.wallets + if (connectedWallet) { + const address = connectedWallet.provider.selectedAddress + const chain = connectedWallet.provider.chainId + providerName = connectedWallet.label + console.log('Connected [' + providerName + ':' + address + ':' + chain + ']') + + if (!lastUsedAddress && address) { + lastUsedAddress = address + store.dispatch(fetchProvider(providerName)) + } + + setWeb3(transformProviderFromXinfin(connectedWallet.provider)) + } else { + lastUsedAddress = '' + providerName = undefined + } +} + +async function connectWallet() { + const state = onboard.state.select() + const { unsubscribe } = state.subscribe((update) => processStateUpdate(update)) + await onboard.connectWallet() +} + +export async function disconnectWallet() { + // disconnect the first wallet in the wallets array + const [primaryWallet] = onboard.state.get().wallets + await onboard.disconnectWallet({ label: primaryWallet.label }) +} + +export const OnboardUser = async (): Promise => { + connectWallet() + const [connectedWallet] = onboard.state.get().wallets + if (!connectedWallet) { + return false + } + return true +} + +export const PrimaryWallet = async (): Promise => { + const [primaryWallet] = onboard.state.get().wallets + return primaryWallet +} diff --git a/src/routes/welcome/components/index.tsx b/src/routes/welcome/components/index.tsx index cc7e0d763..34d8d673b 100644 --- a/src/routes/welcome/components/index.tsx +++ b/src/routes/welcome/components/index.tsx @@ -5,7 +5,7 @@ import { Card, Button, Title, Text, Divider, Dot, Icon } from '@gnosis.pm/safe-r import Link from 'src/components/layout/Link' import Block from 'src/components/layout/Block' import { LOAD_ADDRESS, OPEN_ADDRESS } from 'src/routes/routes' -import { onConnectButtonClick } from 'src/components/ConnectButton' +import { OnboardUser } from 'src/logic/wallets/walletConnection' import { useSelector } from 'react-redux' import { providerNameSelector } from 'src/logic/wallets/store/selectors' @@ -101,7 +101,7 @@ export const WelcomeLayout = ({ isOldMultisigMigration }: Props): React.ReactEle size="lg" color="primary" variant="contained" - onClick={onConnectButtonClick} + onClick={OnboardUser} disabled={!!provider} data-testid="connect-btn" > From df3fb469d2aefdb3e88f5eac634b8f53006f1700 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 09:54:44 +0530 Subject: [PATCH 03/10] Remove stray references to bnc onboard --- src/logic/wallets/utils/walletList.ts | 116 +++++++++++++------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts index c1653534b..0314fb8fc 100644 --- a/src/logic/wallets/utils/walletList.ts +++ b/src/logic/wallets/utils/walletList.ts @@ -1,67 +1,67 @@ -import { WalletInitOptions, WalletModule } from 'bnc-onboard/dist/src/interfaces' -import { getNetworkId, getRpcServiceUrl, getNetworkConfigDisabledWallets } from 'src/config' -import { WALLETS } from 'src/config/networks/network.d' -import WALLET_ICONS from 'src/components/AppLayout/Header/components/WalletIcon/icons' -import { WALLET_PROVIDER } from 'src/logic/wallets/getWeb3' +// import { WalletInitOptions, WalletModule } from 'bnc-onboard/dist/src/interfaces' +// import { getNetworkId, getRpcServiceUrl, getNetworkConfigDisabledWallets } from 'src/config' +// import { WALLETS } from 'src/config/networks/network.d' +// import WALLET_ICONS from 'src/components/AppLayout/Header/components/WalletIcon/icons' +// import { WALLET_PROVIDER } from 'src/logic/wallets/getWeb3' -const networkId = getNetworkId() -const disabledWallets = getNetworkConfigDisabledWallets() +// const networkId = getNetworkId() +// const disabledWallets = getNetworkConfigDisabledWallets() -type Wallet = WalletInitOptions & { - desktop: boolean - walletName: WALLETS -} +// type Wallet = WalletInitOptions & { +// desktop: boolean +// walletName: WALLETS +// } -const rpcUrl = getRpcServiceUrl() -const wallets: Wallet[] = [ - { - walletName: WALLETS.WALLET_CONNECT, - // as stated in the documentation, `infuraKey` is not mandatory if rpc is provided - rpc: { [networkId]: rpcUrl }, - desktop: true, - bridge: 'https://bridge.walletconnect.org', - preferred: true, - }, -] +// const rpcUrl = getRpcServiceUrl() +// const wallets: Wallet[] = [ +// { +// walletName: WALLETS.WALLET_CONNECT, +// // as stated in the documentation, `infuraKey` is not mandatory if rpc is provided +// rpc: { [networkId]: rpcUrl }, +// desktop: true, +// bridge: 'https://bridge.walletconnect.org', +// preferred: true, +// }, +// ] -const customWallets: WalletModule[] = [ - { - name: 'XDCPay', - iconSrc: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, - iconSrcSet: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, - wallet: async (helpers) => { - const { createModernProviderInterface } = helpers - const provider = (window as any).ethereum - const network = provider?.publicConfigStore?._state?.networkVersion - const correctWallet = network === '50' || network === '51' +// const customWallets: WalletModule[] = [ +// { +// name: 'XDCPay', +// iconSrc: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, +// iconSrcSet: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, +// wallet: async (helpers) => { +// const { createModernProviderInterface } = helpers +// const provider = (window as any).ethereum +// const network = provider?.publicConfigStore?._state?.networkVersion +// const correctWallet = network === '50' || network === '51' - return { - provider, - interface: correctWallet ? createModernProviderInterface(provider) : null, - } - }, - type: 'injected', - link: 'https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', - installMessage: (wallets) => { - const { currentWallet, selectedWallet } = wallets - if (currentWallet) { - return `You have ${currentWallet} installed already but if you would prefer to use ${selectedWallet} instead, then click below to install.` - } +// return { +// provider, +// interface: correctWallet ? createModernProviderInterface(provider) : null, +// } +// }, +// type: 'injected', +// link: 'https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', +// installMessage: (wallets) => { +// const { currentWallet, selectedWallet } = wallets +// if (currentWallet) { +// return `You have ${currentWallet} installed already but if you would prefer to use ${selectedWallet} instead, then click below to install.` +// } - return `You will need to install ${selectedWallet} to continue. Click below to install.` - }, - desktop: true, - mobile: false, - preferred: true, - }, -] +// return `You will need to install ${selectedWallet} to continue. Click below to install.` +// }, +// desktop: true, +// mobile: false, +// preferred: true, +// }, +// ] -export const getSupportedWallets = () => { - const { isDesktop } = window +// export const getSupportedWallets = () => { +// const { isDesktop } = window - const filteredWallets = isDesktop - ? wallets.filter((wallet) => wallet.desktop).map(({ desktop, ...rest }) => rest) - : wallets.map(({ desktop, ...rest }) => rest).filter((w) => !disabledWallets.includes(w.walletName)) +// const filteredWallets = isDesktop +// ? wallets.filter((wallet) => wallet.desktop).map(({ desktop, ...rest }) => rest) +// : wallets.map(({ desktop, ...rest }) => rest).filter((w) => !disabledWallets.includes(w.walletName)) - return [...customWallets, ...filteredWallets] -} +// return [...customWallets, ...filteredWallets] +// } From be7dca4b03794943f15d1933b903685dd0cbb455 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 12:30:35 +0530 Subject: [PATCH 04/10] Clubbed both XDCPay versions as 1 custom wallet --- src/logic/wallets/walletConnection.ts | 94 +++++++++++++++++---------- 1 file changed, 60 insertions(+), 34 deletions(-) diff --git a/src/logic/wallets/walletConnection.ts b/src/logic/wallets/walletConnection.ts index 855af0988..1ebc73c98 100644 --- a/src/logic/wallets/walletConnection.ts +++ b/src/logic/wallets/walletConnection.ts @@ -78,39 +78,39 @@ const xdcPayRequestPatch: RequestPatch = { }, } -const xdcPayModule: InjectedWalletModule = { - label: 'XDCPay V1', - injectedNamespace: InjectedNameSpace.Ethereum, - checkProviderIdentity: ({ provider }) => isXDCPay(provider), - getIcon: async () => XDCPayIcon, - // getInterface: async () => { - // const anyWindow: any = window - // if('ethereum' in window){ - // return { - // provider: createXDCPayProvider(window.ethereum), - // } - // } - // window.open('https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', '_blank') - // throw new Error('Please install XDCPay before proceeding') - - // }, - getInterface: async () => ({ - provider: createXDCPayProvider(window.ethereum, xdcPayRequestPatch), - }), - platforms: ['all'], -} - -const metamaskModule: InjectedWalletModule = { - label: ProviderLabel.XDCPay, - injectedNamespace: InjectedNameSpace.Ethereum, - checkProviderIdentity: ({ provider }) => !!provider && !!provider.isMetaMask, - //getIcon: async () => (await import('./icons/metamask')).default, - getIcon: async () => XDCPayIcon, - getInterface: async () => ({ - provider: createEIP1193Provider(window.ethereum), - }), - platforms: ['all'], -} +// const xdcPayModule: InjectedWalletModule = { +// label: 'XDCPay V1', +// injectedNamespace: InjectedNameSpace.Ethereum, +// checkProviderIdentity: ({ provider }) => isXDCPay(provider), +// getIcon: async () => XDCPayIcon, +// // getInterface: async () => { +// // const anyWindow: any = window +// // if('ethereum' in window){ +// // return { +// // provider: createXDCPayProvider(window.ethereum), +// // } +// // } +// // window.open('https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', '_blank') +// // throw new Error('Please install XDCPay before proceeding') + +// // }, +// getInterface: async () => ({ +// provider: createXDCPayProvider(window.ethereum, xdcPayRequestPatch), +// }), +// platforms: ['all'], +// } + +// const metamaskModule: InjectedWalletModule = { +// label: ProviderLabel.XDCPay, +// injectedNamespace: InjectedNameSpace.Ethereum, +// checkProviderIdentity: ({ provider }) => !!provider && !!provider.isMetaMask, +// //getIcon: async () => (await import('./icons/metamask')).default, +// getIcon: async () => XDCPayIcon, +// getInterface: async () => ({ +// provider: createEIP1193Provider(window.ethereum), +// }), +// platforms: ['all'], +// } export const defaultWalletUnavailableMsg = ({ label }: InjectedWalletModule) => `Please install or enable ${label} to continue` @@ -202,8 +202,34 @@ function injected(options?: InjectedWalletOptions): WalletInit { } } +function providerIdentityCheck(provider: { chainId: any; isMetaMask: any }) { + if (provider.chainId) { + return !!provider && !!provider.isMetaMask && !!provider.chainId + } else { + return isXDCPay(provider) + } +} + +function providerInterface(window) { + if ('chainId' in window.ethereum) { + return createEIP1193Provider(window.ethereum) + } else { + return createXDCPayProvider(window.ethereum, xdcPayRequestPatch) + } +} + +const moduleToInject: InjectedWalletModule = { + label: ProviderLabel.XDCPay, + injectedNamespace: InjectedNameSpace.Ethereum, + checkProviderIdentity: ({ provider }) => providerIdentityCheck(provider), + getIcon: async () => XDCPayIcon, + getInterface: async () => ({ + provider: providerInterface(window), + }), + platforms: ['all'], +} const injectedWalletOpts: InjectedWalletOptions = { - custom: [xdcPayModule, metamaskModule], + custom: [moduleToInject], displayUnavailable: true, } From f72ebf650763fee994f7562cdef138884ae38264 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:01:40 +0530 Subject: [PATCH 05/10] Remove unused files --- src/logic/wallets/__tests__/network.test.ts | 124 -------------------- src/logic/wallets/utils/network.ts | 89 -------------- src/logic/wallets/utils/walletList.ts | 67 ----------- 3 files changed, 280 deletions(-) delete mode 100644 src/logic/wallets/__tests__/network.test.ts delete mode 100644 src/logic/wallets/utils/network.ts delete mode 100644 src/logic/wallets/utils/walletList.ts diff --git a/src/logic/wallets/__tests__/network.test.ts b/src/logic/wallets/__tests__/network.test.ts deleted file mode 100644 index 415a23ba6..000000000 --- a/src/logic/wallets/__tests__/network.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -// import { Wallet } from 'bnc-onboard/dist/src/interfaces' -// import { switchNetwork, shouldSwitchNetwork, canSwitchNetwork } from 'src/logic/wallets/utils/network' - -// class CodedError extends Error { -// public code: number -// } - -// jest.mock('src/config', () => { -// const original = jest.requireActual('src/config') -// return { -// ...original, -// getNetworkId: () => 1, -// } -// }) - -// describe('src/logic/wallets/utils/network', () => { -// describe('switchNetwork', () => { -// it('should try to add a network config if chain is unrecognized', () => { -// const wallet = { -// provider: { -// request: jest.fn(() => { -// const err = new CodedError('No such chain') -// err.code = 4902 -// return Promise.reject(err) -// }), -// }, -// } - -// expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( -// 'Code 301: Error adding a new wallet network (No such chain)', -// ) -// }) - -// it('should throw if provider throws', () => { -// const wallet = { -// provider: { -// request: jest.fn(() => { -// const err = new CodedError('Some error') -// err.code = 4454 -// return Promise.reject(err) -// }), -// }, -// } - -// expect(switchNetwork(wallet as Wallet, 1438)).rejects.toThrow( -// 'Code 300: Error switching the wallet network (Some error)', -// ) -// }) - -// it('should resolve to undefined when user rejects', () => { -// const wallet = { -// provider: { -// request: jest.fn(() => { -// const err = new CodedError('User rejected') -// err.code = 4001 -// return Promise.reject(err) -// }), -// }, -// } - -// expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) -// }) - -// it('should resolve to undefined if request succeeds', () => { -// const wallet = { -// provider: { -// request: jest.fn(() => Promise.resolve(true)), -// }, -// } - -// expect(switchNetwork(wallet as Wallet, 1438)).resolves.toEqual(undefined) -// }) -// }) - -// describe('shouldSwitchNetwork', () => { -// it('should return true when networks mismatch', () => { -// const wallet = { -// provider: { -// networkVersion: '4', -// }, -// } - -// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(true) -// }) - -// it('should return false when wallet is not connected', () => { -// const wallet = { -// provider: undefined, -// } - -// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) -// }) - -// it('should return false when networks are the same', () => { -// const wallet = { -// provider: { -// networkVersion: '1', -// }, -// } - -// expect(shouldSwitchNetwork(wallet as Wallet)).toBe(false) -// }) -// }) - -// describe('canSwitchNetwork', () => { -// it('should return true when swithcing is supported', () => { -// const wallet = { -// provider: { -// isMetaMask: true, -// }, -// } - -// expect(canSwitchNetwork(wallet as Wallet)).toBe(true) -// }) - -// it('should return false when swithcing is not supported', () => { -// const wallet = { -// provider: undefined, -// } - -// expect(canSwitchNetwork(wallet as Wallet)).toBe(false) -// }) -// }) -// }) diff --git a/src/logic/wallets/utils/network.ts b/src/logic/wallets/utils/network.ts deleted file mode 100644 index 0dd266aeb..000000000 --- a/src/logic/wallets/utils/network.ts +++ /dev/null @@ -1,89 +0,0 @@ -// //import { Wallet } from 'bnc-onboard/dist/src/interfaces' -// import { onboard } from 'src/config/wallets' -// import { getConfig, getNetworkId } from 'src/config' -// import { Errors, CodedException } from 'src/logic/exceptions/CodedException' -// import { numberToHex } from 'web3-utils' - -// const WALLET_ERRORS = { -// UNRECOGNIZED_CHAIN: 4902, -// USER_REJECTED: 4001, -// // ADDING_EXISTING_CHAIN: -32603, -// } - -// /** -// * Switch the chain assuming it's MetaMask. -// * @see https://github.com/MetaMask/metamask-extension/pull/10905 -// */ -// const requestSwitch = async (wallet: Wallet, chainId: number): Promise => { -// await wallet.provider.request({ -// method: 'wallet_switchEthereumChain', -// params: [ -// { -// chainId: numberToHex(chainId), -// }, -// ], -// }) -// } - -// /** -// * Add a chain config based on EIP-3085. -// * Known to be implemented by MetaMask. -// * @see https://docs.metamask.io/guide/rpc-api.html#wallet-addethereumchain -// */ -// const requestAdd = async (wallet: Wallet, chainId: number): Promise => { -// const cfg = getConfig() - -// await wallet.provider.request({ -// method: 'wallet_addEthereumChain', -// params: [ -// { -// chainId: numberToHex(chainId), -// chainName: cfg.network.label, -// nativeCurrency: { -// name: cfg.network.nativeCoin.name, -// symbol: cfg.network.nativeCoin.symbol, -// decimals: cfg.network.nativeCoin.decimals, -// }, -// rpcUrls: [cfg.rpcServiceUrl], -// blockExplorerUrls: [cfg.networkExplorerUrl], -// }, -// ], -// }) -// } - -// /** -// * Try switching the wallet chain, and if it fails, try adding the chain config -// */ -// export const switchNetwork = async (wallet: Wallet, chainId: number): Promise => { -// try { -// await requestSwitch(wallet, chainId) -// } catch (e) { -// if (e.code === WALLET_ERRORS.USER_REJECTED) { -// return -// } - -// if (e.code == WALLET_ERRORS.UNRECOGNIZED_CHAIN) { -// try { -// await requestAdd(wallet, chainId) -// } catch (e) { -// if (e.code === WALLET_ERRORS.USER_REJECTED) { -// return -// } - -// throw new CodedException(Errors._301, e.message) -// } -// } else { -// throw new CodedException(Errors._300, e.message) -// } -// } -// } - -// export const shouldSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { -// const desiredNetwork = String(getNetworkId()) -// const currentNetwork = wallet?.provider?.networkVersion -// return currentNetwork ? desiredNetwork !== currentNetwork : false -// } - -// export const canSwitchNetwork = (wallet = onboard.getState()?.wallet): boolean => { -// return wallet?.provider?.isMetaMask || false -// } diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts deleted file mode 100644 index 0314fb8fc..000000000 --- a/src/logic/wallets/utils/walletList.ts +++ /dev/null @@ -1,67 +0,0 @@ -// import { WalletInitOptions, WalletModule } from 'bnc-onboard/dist/src/interfaces' -// import { getNetworkId, getRpcServiceUrl, getNetworkConfigDisabledWallets } from 'src/config' -// import { WALLETS } from 'src/config/networks/network.d' -// import WALLET_ICONS from 'src/components/AppLayout/Header/components/WalletIcon/icons' -// import { WALLET_PROVIDER } from 'src/logic/wallets/getWeb3' - -// const networkId = getNetworkId() -// const disabledWallets = getNetworkConfigDisabledWallets() - -// type Wallet = WalletInitOptions & { -// desktop: boolean -// walletName: WALLETS -// } - -// const rpcUrl = getRpcServiceUrl() -// const wallets: Wallet[] = [ -// { -// walletName: WALLETS.WALLET_CONNECT, -// // as stated in the documentation, `infuraKey` is not mandatory if rpc is provided -// rpc: { [networkId]: rpcUrl }, -// desktop: true, -// bridge: 'https://bridge.walletconnect.org', -// preferred: true, -// }, -// ] - -// const customWallets: WalletModule[] = [ -// { -// name: 'XDCPay', -// iconSrc: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, -// iconSrcSet: WALLET_ICONS[WALLET_PROVIDER.XDCPAY].src, -// wallet: async (helpers) => { -// const { createModernProviderInterface } = helpers -// const provider = (window as any).ethereum -// const network = provider?.publicConfigStore?._state?.networkVersion -// const correctWallet = network === '50' || network === '51' - -// return { -// provider, -// interface: correctWallet ? createModernProviderInterface(provider) : null, -// } -// }, -// type: 'injected', -// link: 'https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', -// installMessage: (wallets) => { -// const { currentWallet, selectedWallet } = wallets -// if (currentWallet) { -// return `You have ${currentWallet} installed already but if you would prefer to use ${selectedWallet} instead, then click below to install.` -// } - -// return `You will need to install ${selectedWallet} to continue. Click below to install.` -// }, -// desktop: true, -// mobile: false, -// preferred: true, -// }, -// ] - -// export const getSupportedWallets = () => { -// const { isDesktop } = window - -// const filteredWallets = isDesktop -// ? wallets.filter((wallet) => wallet.desktop).map(({ desktop, ...rest }) => rest) -// : wallets.map(({ desktop, ...rest }) => rest).filter((w) => !disabledWallets.includes(w.walletName)) - -// return [...customWallets, ...filteredWallets] -// } From e67fd668bb5457b5030b2187cf9dee5978c7b122 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:03:12 +0530 Subject: [PATCH 06/10] removed stray references to unsupported chains --- package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index a590db3f7..957928b61 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "scripts": { "analyze": "source-map-explorer 'build/static/js/*.js'", "build-desktop": "cross-env REACT_APP_BUILD_FOR_DESKTOP=true REACT_APP_ENV=production yarn build-mainnet", - "build-mainnet": "cross-env REACT_APP_NETWORK=mainnet yarn build", + "build-mainnet": "cross-env REACT_APP_NETWORK=xinfin yarn build", "build": "cross-env REACT_APP_APP_VERSION=$npm_package_version rescripts --max-old-space-size=8192 build", "copy-gateway-types": "rm -rf src/types/gateway; cp -r node_modules/@gnosis.pm/safe-react-gateway-sdk/dist/types src/types/gateway", "eject": "rescripts eject", @@ -40,9 +40,8 @@ "prettier:fix": "yarn prettier --write", "prettier": "prettier './src/**/*.{js,jsx,ts,tsx}'", "release": "electron-builder --mac --linux --windows -p always", - "start-mainnet": "REACT_APP_NETWORK=mainnet yarn start", - "start-polygon": "REACT_APP_LATEST_SAFE_VERSION='1.3.0' REACT_APP_NETWORK=polygon yarn start", - "start-bsc": "REACT_APP_LATEST_SAFE_VERSION='1.3.0' REACT_APP_NETWORK='bsc' yarn start", + "start-mainnet": "REACT_APP_NETWORK=xinfin yarn start", + "start-apothem": "REACT_APP_NETWORK=apothem yarn start", "start": "rescripts start", "test": "rescripts test --env=jsdom", "test:coverage": "yarn test --coverage --watchAll=false", From 554c3e3b1a962b9ce6cbcd32ff37a2789b99a070 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:04:09 +0530 Subject: [PATCH 07/10] Hack to make XDCPayV1 RPC errors show up --- src/logic/wallets/eip1193.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/logic/wallets/eip1193.ts b/src/logic/wallets/eip1193.ts index 65a1418aa..f929897c0 100644 --- a/src/logic/wallets/eip1193.ts +++ b/src/logic/wallets/eip1193.ts @@ -82,11 +82,19 @@ const createRequest = (provider: any): EIP1193Provider['request'] => }, (error: string, { result }: JsonRpcResponse) => { if (error) { + // hack implemented to make XDCPayV1 error messages propagate. + // error.stack is currently sent in error.message + // causing JSON parsing issue const stringConstructor = 'String'.constructor if (error.constructor === stringConstructor) { reject(JSON.parse(error)) } else { - reject() + const errorObject = Object(error) + if ('message' in errorObject) { + reject(errorObject.message) + } else { + reject() + } } } else { resolve(result == undefined ? null : (result as any)) From c100043db604119bc723aab170f4dfd4f8d8a8e5 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:05:43 +0530 Subject: [PATCH 08/10] fix issue with Onboard pop-up opening before signing txn --- src/logic/wallets/walletConnection.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/logic/wallets/walletConnection.ts b/src/logic/wallets/walletConnection.ts index 1ebc73c98..bc579a579 100644 --- a/src/logic/wallets/walletConnection.ts +++ b/src/logic/wallets/walletConnection.ts @@ -318,10 +318,16 @@ function processStateUpdate(state) { } } +/** + * Tries to connect to onboard if not already connected. + */ async function connectWallet() { - const state = onboard.state.select() - const { unsubscribe } = state.subscribe((update) => processStateUpdate(update)) - await onboard.connectWallet() + const [connectedWallet] = onboard.state.get().wallets + if (!connectedWallet) { + const state = onboard.state.select() + const { unsubscribe } = state.subscribe((update) => processStateUpdate(update)) + await onboard.connectWallet() + } } export async function disconnectWallet() { @@ -330,6 +336,11 @@ export async function disconnectWallet() { await onboard.disconnectWallet({ label: primaryWallet.label }) } +/** + * Wrapper on "connectWallet" and exported. + * Has additional support for boolean status to accomodate existing workflows. + * @returns boolean + */ export const OnboardUser = async (): Promise => { connectWallet() const [connectedWallet] = onboard.state.get().wallets From 555f0c1b50bbc42e602b9780d15be78ee0103552 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:06:51 +0530 Subject: [PATCH 09/10] enable autoconnect & hide onboard widget --- src/logic/wallets/walletConnection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/logic/wallets/walletConnection.ts b/src/logic/wallets/walletConnection.ts index bc579a579..d423032fe 100644 --- a/src/logic/wallets/walletConnection.ts +++ b/src/logic/wallets/walletConnection.ts @@ -275,7 +275,7 @@ const yplusVaultMetadata = { const onboardAccountCentre: AccountCenterOptions = { desktop: { position: 'bottomRight', - enabled: true, + enabled: false, minimal: false, }, mobile: { @@ -287,7 +287,7 @@ const onboardAccountCentre: AccountCenterOptions = { const connectOptions: ConnectModalOptions = { showSidebar: true, - //autoConnectLastWallet: true + autoConnectLastWallet: true, } const onboard = Onboard({ From 6a12144a20db069fd3efd437b540c4e8170b1cd1 Mon Sep 17 00:00:00 2001 From: Sudeep <49141455+rsud33p@users.noreply.github.com> Date: Mon, 27 Feb 2023 20:07:37 +0530 Subject: [PATCH 10/10] Added code comments and removed unused code --- src/logic/wallets/walletConnection.ts | 57 +++++++++++---------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/src/logic/wallets/walletConnection.ts b/src/logic/wallets/walletConnection.ts index d423032fe..976df37e8 100644 --- a/src/logic/wallets/walletConnection.ts +++ b/src/logic/wallets/walletConnection.ts @@ -40,8 +40,13 @@ export const isWalletAvailable = ( return !!provider.providers?.some((provider) => checkProviderIdentity({ provider, device })) } +/** + * Identify XDCPayV1 + * Should have isXDCPay attribute to true + * @param provider + * @returns boolean + */ function isXDCPay(provider) { - //return !!provider && (!!provider.isXDCPay || !!provider.isMetaMask) return !!provider && !!provider.isXDCPay } @@ -56,6 +61,10 @@ async function getAddress() { return accounts } +/** + * Custom requestPatch for XDCPay V1 + * Uses existing helper functions to fetch accounts & balances + */ const xdcPayRequestPatch: RequestPatch = { eth_requestAccounts: ({ baseRequest }) => { return getWeb3().eth.getAccounts() @@ -78,40 +87,6 @@ const xdcPayRequestPatch: RequestPatch = { }, } -// const xdcPayModule: InjectedWalletModule = { -// label: 'XDCPay V1', -// injectedNamespace: InjectedNameSpace.Ethereum, -// checkProviderIdentity: ({ provider }) => isXDCPay(provider), -// getIcon: async () => XDCPayIcon, -// // getInterface: async () => { -// // const anyWindow: any = window -// // if('ethereum' in window){ -// // return { -// // provider: createXDCPayProvider(window.ethereum), -// // } -// // } -// // window.open('https://chrome.google.com/webstore/detail/xinpay/bocpokimicclpaiekenaeelehdjllofo', '_blank') -// // throw new Error('Please install XDCPay before proceeding') - -// // }, -// getInterface: async () => ({ -// provider: createXDCPayProvider(window.ethereum, xdcPayRequestPatch), -// }), -// platforms: ['all'], -// } - -// const metamaskModule: InjectedWalletModule = { -// label: ProviderLabel.XDCPay, -// injectedNamespace: InjectedNameSpace.Ethereum, -// checkProviderIdentity: ({ provider }) => !!provider && !!provider.isMetaMask, -// //getIcon: async () => (await import('./icons/metamask')).default, -// getIcon: async () => XDCPayIcon, -// getInterface: async () => ({ -// provider: createEIP1193Provider(window.ethereum), -// }), -// platforms: ['all'], -// } - export const defaultWalletUnavailableMsg = ({ label }: InjectedWalletModule) => `Please install or enable ${label} to continue` @@ -202,6 +177,12 @@ function injected(options?: InjectedWalletOptions): WalletInit { } } +/** + * Custom function to validate if the wallet is currently selected. + * XDCPayV1 identified as the one that does not inject chainId. + * @param provider + * @returns boolean + */ function providerIdentityCheck(provider: { chainId: any; isMetaMask: any }) { if (provider.chainId) { return !!provider && !!provider.isMetaMask && !!provider.chainId @@ -210,6 +191,12 @@ function providerIdentityCheck(provider: { chainId: any; isMetaMask: any }) { } } +/** + * Custom function to choose EIP1193 Provider + * XDCPayV1 identified as the one that does not inject chainId. + * @param window + * @returns EIP1193Provider + */ function providerInterface(window) { if ('chainId' in window.ethereum) { return createEIP1193Provider(window.ethereum)