From 451c50bc356c7b44b5cccc0f628b0b68c9cfba1b Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Wed, 2 Apr 2025 01:35:05 -0300 Subject: [PATCH 1/8] chore: add solana dependencies --- craco.config.js | 14 + package.json | 6 + yarn.lock | 3893 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 3805 insertions(+), 108 deletions(-) diff --git a/craco.config.js b/craco.config.js index 7c558aa58..773e1a720 100644 --- a/craco.config.js +++ b/craco.config.js @@ -1,6 +1,8 @@ module.exports = { babel: { plugins: [ + "@babel/plugin-proposal-numeric-separator", + "@babel/plugin-proposal-logical-assignment-operators", "@babel/plugin-proposal-nullish-coalescing-operator", "@babel/plugin-proposal-optional-chaining", /* @@ -10,4 +12,16 @@ module.exports = { ["@babel/plugin-transform-class-properties", { loose: true }], ], }, + webpack: { + configure: (webpackConfig, { env, paths }) => { + // Add a rule to handle .mjs files + webpackConfig.module.rules.push({ + test: /\.mjs$/, + include: /node_modules/, + type: "javascript/auto", + }) + + return webpackConfig + }, + }, } diff --git a/package.json b/package.json index 1396ea63a..bef390cf7 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,12 @@ "@web3-react/injected-connector": "^6.0.7", "@web3-react/types": "^6.0.7", "@web3-react/walletlink-connector": "^6.2.13", + "@solana/wallet-adapter-base": "^0.9.24", + "@solana/wallet-adapter-react": "^0.15.36", + "@solana/wallet-adapter-react-ui": "^0.9.36", + "@solana/wallet-adapter-wallets": "^0.19.33", + "@solana/web3.js": "^1.98.0", + "@coral-xyz/anchor": "^0.31.0", "axios": "^0.24.0", "bignumber.js": "^9.1.2", "bitcoin-address-validation": "^2.2.1", diff --git a/yarn.lock b/yarn.lock index 7d7293f16..2ba44ae63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -1169,6 +1174,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.21.0", "@babel/runtime@^7.25.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.10.4", "@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" @@ -1981,6 +1993,38 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@coral-xyz/anchor-errors@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.31.0.tgz#dfc7329fca152b598842f68175efe5000825b51b" + integrity sha512-SUERksFSQ+4F11hkROIwHq4mcoSMXJxwVWLoklefi4dU679zVWFVcTq6O7otvjY8wlUaRXeE+iYcQWZTw2ll6w== + +"@coral-xyz/anchor@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.31.0.tgz#76b84541e6fdfbd6c661584cdc418453a6416f12" + integrity sha512-Yb1NwP1s4cWhAw7wL7vOLHSWWw3cD5D9pRCVSeJpdqPaI+w7sfRLScnVJL6ViYMZynB7nAG/5HcUPKUnY0L9rw== + dependencies: + "@coral-xyz/anchor-errors" "^0.31.0" + "@coral-xyz/borsh" "^0.31.0" + "@noble/hashes" "^1.3.1" + "@solana/web3.js" "^1.69.0" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + eventemitter3 "^4.0.7" + pako "^2.0.3" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/borsh@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.31.0.tgz#eb77239b75f3ea9e771b1ee0821712caf664cb32" + integrity sha512-DwdQ5fuj+rGQCTKRnxnW1W2lvcpBaFc9m9M1TcGGlm+bwCcggmDgbLKLgF+LjIrKnc7Nd+bCACx5RA9YTK2I4Q== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + "@craco/craco@6.4.5": version "6.4.5" resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.4.5.tgz#471e67082a2ffd3edf73759b215bdc16250d27b3" @@ -2160,6 +2204,16 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@emurgo/cardano-serialization-lib-browser@^13.2.0": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-browser/-/cardano-serialization-lib-browser-13.2.1.tgz#b5ef35f2d60773e493b7647aa8cd766d31897c28" + integrity sha512-7RfX1gI16Vj2DgCp/ZoXqyLAakWo6+X95ku/rYGbVzuS/1etrlSiJmdbmdm+eYmszMlGQjrtOJQeVLXoj4L/Ag== + +"@emurgo/cardano-serialization-lib-nodejs@13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-13.2.0.tgz#7427c30c94c7e9676327c9362f4f4d2e387efd2d" + integrity sha512-Bz1zLGEqBQ0BVkqt1OgMxdBOE3BdUWUd7Ly9Ecr/aUwkA8AV1w1XzBMe4xblmJHnB1XXNlPH4SraXCvO+q0Mig== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" @@ -2285,6 +2339,68 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@ethereumjs/common@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.2.0.tgz#b71df25845caf5456449163012074a55f048e0a0" + integrity sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== + dependencies: + "@ethereumjs/util" "^8.1.0" + crc-32 "^1.2.0" + +"@ethereumjs/common@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-4.4.0.tgz#fba41612f527a815bf304e98653d6b5fc5d6d4de" + integrity sha512-Fy5hMqF6GsE6DpYTyqdDIJPJgUtDn4dL120zKw+Pswuo+iLyBsEYuSyzMw6NVzD2vDzcBG9fE4+qX4X2bPc97w== + dependencies: + "@ethereumjs/util" "^9.1.0" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/rlp@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" + integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== + +"@ethereumjs/tx@^4.1.2": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" + integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== + dependencies: + "@ethereumjs/common" "^3.2.0" + "@ethereumjs/rlp" "^4.0.1" + "@ethereumjs/util" "^8.1.0" + ethereum-cryptography "^2.0.0" + +"@ethereumjs/tx@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-5.4.0.tgz#6f47894cc3e2d4e63d87c62b41ed7e8180a1de58" + integrity sha512-SCHnK7m/AouZ7nyoR0MEXw1OO/tQojSbp88t8oxhwes5iZkZCtfFdUrJaiIb72qIpH2FVw6s1k1uP7LXuH7PsA== + dependencies: + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/util" "^9.1.0" + ethereum-cryptography "^2.2.1" + +"@ethereumjs/util@^8.0.6", "@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethereumjs/util@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-9.1.0.tgz#75e3898a3116d21c135fa9e29886565609129bce" + integrity sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog== + dependencies: + "@ethereumjs/rlp" "^5.0.2" + ethereum-cryptography "^2.2.1" + "@ethersproject/abi@5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" @@ -2983,6 +3099,24 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@everstake/wallet-sdk-solana@2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@everstake/wallet-sdk-solana/-/wallet-sdk-solana-2.0.9.tgz#e4951e8206566cf8b4c75959ab1ac6ff713edb11" + integrity sha512-U4x+xc9Gla8CnFuYZbLgiZb0wbhMJr0Y5wPac+FP7B+9REier/9Lmcx07xPoXeucfSeaCwN2CqcD+jk8LsF+dQ== + dependencies: + "@solana-program/compute-budget" "^0.6.1" + "@solana-program/stake" "^0.1.0" + "@solana-program/system" "^0.6.2" + "@solana/web3.js" "2.0.0" + +"@fivebinaries/coin-selection@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@fivebinaries/coin-selection/-/coin-selection-3.0.0.tgz#00f19f21a8c6d183c8922efef6c102d0ce2b1af3" + integrity sha512-h25Pn1ZA7oqQBQDodGAgIsQt66T2wDge9onBKNqE66WNWL0KJiKJbpij8YOLo5AAlEIg5IS7EB1QjBgDOIg6DQ== + dependencies: + "@emurgo/cardano-serialization-lib-browser" "^13.2.0" + "@emurgo/cardano-serialization-lib-nodejs" "13.2.0" + "@fontsource/ibm-plex-mono@^4.5.13": version "4.5.13" resolved "https://registry.npmjs.org/@fontsource/ibm-plex-mono/-/ibm-plex-mono-4.5.13.tgz#f91559ab3b5074a8e2db75c0370b9640e80c99b2" @@ -2993,6 +3127,20 @@ resolved "https://registry.yarnpkg.com/@fontsource/inter/-/inter-4.5.11.tgz#3c45014821e8c82b247a291f1944dd2764a2d1ed" integrity sha512-toizzQkfXL8YJcG/f8j3EYXYGQe4OxiDEItThSigvHU+cYNDw8HPp3wLYQX745hddsnHqOGCM4exitFSBOU8+w== +"@fractalwagmi/popup-connection@^1.0.18": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@fractalwagmi/popup-connection/-/popup-connection-1.1.1.tgz#2dfff4f3bb89d17947adae597f355faf46c194a9" + integrity sha512-hYL+45iYwNbwjvP2DxP3YzVsrAGtj/RV9LOgMpJyCxsfNoyyOoi2+YrnywKkiANingiG2kJ1nKsizbu1Bd4zZw== + +"@fractalwagmi/solana-wallet-adapter@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@fractalwagmi/solana-wallet-adapter/-/solana-wallet-adapter-0.1.1.tgz#13d97bca657007a62b2118ea60f5d9e73f654a37" + integrity sha512-oTZLEuD+zLKXyhZC5tDRMPKPj8iaxKLxXiCjqRfOo4xmSbS2izGRWLJbKMYYsJysn/OI3UJ3P6CWP8WUWi0dZg== + dependencies: + "@fractalwagmi/popup-connection" "^1.0.18" + "@solana/wallet-adapter-base" "^0.9.17" + bs58 "^5.0.0" + "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -3238,6 +3386,16 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jnwng/walletconnect-solana@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@jnwng/walletconnect-solana/-/walletconnect-solana-0.2.0.tgz#aebea64beaa47273b9b9a71c62d88d543900ab96" + integrity sha512-nyRq0xLEj9i2J4UXQ0Mr4KzsooTMbLu0ewHOqdQV7iZE0PfbtKa8poTSF4ZBAQD8hoMHEx+I7zGFCNMI9BTrTA== + dependencies: + "@walletconnect/qrcode-modal" "^1.8.0" + "@walletconnect/sign-client" "^2.7.2" + "@walletconnect/utils" "^2.4.5" + bs58 "^5.0.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -3501,6 +3659,61 @@ "@summa-tx/relay-sol" "^2.0.2" openzeppelin-solidity "2.3.0" +"@keystonehq/alias-sampling@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@keystonehq/alias-sampling/-/alias-sampling-0.1.2.tgz#63af931ffe6500aef4c0d87775a5b279189abf8d" + integrity sha512-5ukLB3bcgltgaFfQfYKYwHDUbwHicekYo53fSEa7xhVkAEqsA74kxdIwoBIURmGUtXe3EVIRm4SYlgcrt2Ri0w== + +"@keystonehq/bc-ur-registry-sol@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-sol/-/bc-ur-registry-sol-0.9.5.tgz#f7c9395c38e4734cd49c45318d9342894a05a51b" + integrity sha512-HZeeph9297ZHjAziE9wL/u2W1dmV0p1H9Bu9g1bLJazP4F6W2fjCK9BAoCiKEsMBqadk6KI6r6VD67fmDzWyug== + dependencies: + "@keystonehq/bc-ur-registry" "^0.7.0" + bs58check "^2.1.2" + uuid "^8.3.2" + +"@keystonehq/bc-ur-registry@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.5.4.tgz#5802486a29f5d772520d15579d40fba02860e27f" + integrity sha512-z7bZe10I5k0zz9znmDTXh+o3Rzb5XsRVpwAzexubOaLxVdZ0F7aMbe2LoEsw766Hpox/7zARi7UGmLz5C8BAzA== + dependencies: + "@ngraveio/bc-ur" "^1.1.5" + bs58check "^2.1.2" + tslib "^2.3.0" + +"@keystonehq/bc-ur-registry@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.7.0.tgz#d0322d6a5cd2796dd0e40662c47b5a95ec917d9a" + integrity sha512-E6NUd6Y+YYM+IcYGOEXfO9+MU1s63Qjm8brtHftvNhxbdXhGtTYIsa4FQmqZ6q34q91bMkMqUQFsQYPmIxcxfg== + dependencies: + "@ngraveio/bc-ur" "^1.1.5" + bs58check "^2.1.2" + tslib "^2.3.0" + +"@keystonehq/sdk@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@keystonehq/sdk/-/sdk-0.19.2.tgz#2c7e35b93fc8c853b1161f32c1f0f68d272b43f3" + integrity sha512-ilA7xAhPKvpHWlxjzv3hjMehD6IKYda4C1TeG2/DhFgX9VSffzv77Eebf8kVwzPLdYV4LjX1KQ2ZDFoN1MsSFQ== + dependencies: + "@ngraveio/bc-ur" "^1.0.0" + qrcode.react "^1.0.1" + react-modal "^3.12.1" + react-qr-reader "^2.2.1" + rxjs "^6.6.3" + +"@keystonehq/sol-keyring@^0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@keystonehq/sol-keyring/-/sol-keyring-0.20.0.tgz#0fe224a0ef751fb6b2c93907e5ad7bd05cea7f06" + integrity sha512-UBeMlecybTDQaFMI951LBEVRyZarqKHOcwWqqvphV+x7WquYz0SZ/wf/PhizV0MWoGTQwt2m5aqROzksi6svqw== + dependencies: + "@keystonehq/bc-ur-registry" "0.5.4" + "@keystonehq/bc-ur-registry-sol" "^0.9.2" + "@keystonehq/sdk" "^0.19.2" + "@solana/web3.js" "^1.36.0" + bs58 "^5.0.0" + uuid "^8.3.2" + "@ledgerhq/connect-kit-loader@1.1.8": version "1.1.8" resolved "https://registry.yarnpkg.com/@ledgerhq/connect-kit-loader/-/connect-kit-loader-1.1.8.tgz#6cc32191660dd9d6e8f89047af09b0f201e30190" @@ -3513,6 +3726,16 @@ dependencies: invariant "2" +"@ledgerhq/devices@6.27.1", "@ledgerhq/devices@^6.27.1": + version "6.27.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.27.1.tgz#3b13ab1d1ba8201e9e74a08f390560483978c962" + integrity sha512-jX++oy89jtv7Dp2X6gwt3MMkoajel80JFWcdc0HCouwDsV1mVJ3SQdwl/bQU0zd8HI6KebvUP95QTwbQLLK/RQ== + dependencies: + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/logs" "^6.10.0" + rxjs "6" + semver "^7.3.5" + "@ledgerhq/devices@^5.51.1": version "5.51.1" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" @@ -3533,11 +3756,26 @@ rxjs "^7.8.1" semver "^7.3.5" +"@ledgerhq/devices@^8.4.4": + version "8.4.4" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.4.4.tgz#0d195c1650fe57da2fad7f0d9074a0190947cd6f" + integrity sha512-sz/ryhe/R687RHtevIE9RlKaV8kkKykUV4k29e7GAVwzHX1gqG+O75cu1NCJUHLbp3eABV5FdvZejqRUlLis9A== + dependencies: + "@ledgerhq/errors" "^6.19.1" + "@ledgerhq/logs" "^6.12.0" + rxjs "^7.8.1" + semver "^7.3.5" + "@ledgerhq/errors@^5.50.0": version "5.50.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== +"@ledgerhq/errors@^6.10.0", "@ledgerhq/errors@^6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.19.1.tgz#d9ac45ad4ff839e468b8f63766e665537aaede58" + integrity sha512-75yK7Nnit/Gp7gdrJAz0ipp31CCgncRp+evWt6QawQEtQKYEDfGo10QywgrrBBixeRxwnMy1DP6g2oCWRf1bjw== + "@ledgerhq/errors@^6.14.0", "@ledgerhq/errors@^6.15.0": version "6.15.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.15.0.tgz#45cda73915f695cc072cb8a99650830bc5dc6668" @@ -3555,6 +3793,25 @@ bignumber.js "^9.0.1" ethers "^5.2.0" +"@ledgerhq/hw-transport-webhid@6.27.1": + version "6.27.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.27.1.tgz#8fd1710d23b6bd7cbe2382dd02054dfabe788447" + integrity sha512-u74rBYlibpbyGblSn74fRs2pMM19gEAkYhfVibq0RE1GNFjxDMFC1n7Sb+93Jqmz8flyfB4UFJsxs8/l1tm2Kw== + dependencies: + "@ledgerhq/devices" "^6.27.1" + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/hw-transport" "^6.27.1" + "@ledgerhq/logs" "^6.10.0" + +"@ledgerhq/hw-transport@6.27.1": + version "6.27.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.27.1.tgz#88072278f69c279cb6569352acd4ae2fec33ace3" + integrity sha512-hnE4/Fq1YzQI4PA1W0H8tCkI99R3UWDb3pJeZd6/Xs4Qw/q1uiQO+vNLC6KIPPhK0IajUfuI/P2jk0qWcMsuAQ== + dependencies: + "@ledgerhq/devices" "^6.27.1" + "@ledgerhq/errors" "^6.10.0" + events "^3.3.0" + "@ledgerhq/hw-transport@^5.11.0", "@ledgerhq/hw-transport@^5.51.1": version "5.51.1" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" @@ -3564,6 +3821,16 @@ "@ledgerhq/errors" "^5.50.0" events "^3.3.0" +"@ledgerhq/hw-transport@^6.27.1": + version "6.31.4" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.31.4.tgz#9b23a6de4a4caaa5c24b149c2dea8adde46f0eb1" + integrity sha512-6c1ir/cXWJm5dCWdq55NPgCJ3UuKuuxRvf//Xs36Bq9BwkV2YaRQhZITAkads83l07NAdR16hkTWqqpwFMaI6A== + dependencies: + "@ledgerhq/devices" "^8.4.4" + "@ledgerhq/errors" "^6.19.1" + "@ledgerhq/logs" "^6.12.0" + events "^3.3.0" + "@ledgerhq/hw-transport@^6.28.8": version "6.29.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.29.0.tgz#2b85f39d90b093930f0c7bfc513b29eb47ba97fa" @@ -3579,6 +3846,11 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== +"@ledgerhq/logs@^6.10.0", "@ledgerhq/logs@^6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" + integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== + "@ledgerhq/logs@^6.11.0": version "6.11.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.11.0.tgz#0d28e7edcf71548506f4304686cba480ba91bbcf" @@ -3622,11 +3894,35 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.0.0" +"@metamask/rpc-errors@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@metamask/rpc-errors/-/rpc-errors-5.1.1.tgz#f82732ad0952d34d219eca42699c0c74bee95a9e" + integrity sha512-JjZnDi2y2CfvbohhBl+FOQRzmFlJpybcQlIk37zEX8B96eVSPbH/T8S0p7cSF8IE33IWx6JkD8Ycsd+2TXFxCw== + dependencies: + "@metamask/utils" "^5.0.0" + fast-safe-stringify "^2.0.6" + "@metamask/safe-event-emitter@2.0.0", "@metamask/safe-event-emitter@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== +"@metamask/utils@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" + integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== + dependencies: + "@ethereumjs/tx" "^4.1.2" + "@types/debug" "^4.1.7" + debug "^4.3.4" + semver "^7.3.8" + superstruct "^1.0.3" + +"@mobily/ts-belt@^3.13.1": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@mobily/ts-belt/-/ts-belt-3.13.1.tgz#8f8ce2a2eca41d88c2ca70c84d0f47d0f7f5cd5f" + integrity sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q== + "@motionone/animation@^10.15.1": version "10.15.1" resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" @@ -3696,6 +3992,60 @@ "@motionone/dom" "^10.16.2" tslib "^2.3.1" +"@ngraveio/bc-ur@^1.0.0", "@ngraveio/bc-ur@^1.1.5": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@ngraveio/bc-ur/-/bc-ur-1.1.13.tgz#27719fd3e745ccdbe97a7950905edcd1fed4844b" + integrity sha512-j73akJMV4+vLR2yQ4AphPIT5HZmxVjn/LxpL7YHoINnXoH6ccc90Zzck6/n6a3bCXOVZwBxq+YHwbAKRV+P8Zg== + dependencies: + "@keystonehq/alias-sampling" "^0.1.1" + assert "^2.0.0" + bignumber.js "^9.0.1" + cbor-sync "^1.0.4" + crc "^3.8.0" + jsbi "^3.1.5" + sha.js "^2.4.11" + +"@noble/ciphers@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.1.tgz#3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9" + integrity sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA== + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/curves@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.0.tgz#fe035a23959e6aeadf695851b51a87465b5ba8f7" + integrity sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ== + dependencies: + "@noble/hashes" "1.7.0" + +"@noble/curves@1.8.1", "@noble/curves@^1.1.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@^1.8.0", "@noble/curves@~1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== + dependencies: + "@noble/hashes" "1.7.1" + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.0.tgz#5d9e33af2c7d04fee35de1519b80c958b2e35e39" + integrity sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w== + +"@noble/hashes@1.7.1", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@^1.6.1", "@noble/hashes@~1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + "@noble/hashes@^1.1.5", "@noble/hashes@^1.2.0": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" @@ -3809,6 +4159,45 @@ web3-eth-contract "1.2.2" web3-utils "1.2.2" +"@particle-network/analytics@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@particle-network/analytics/-/analytics-1.0.2.tgz#cbcff42618e1c3045ed52183278b1a7963ff40a7" + integrity sha512-E4EpTRYcfNOkxj+bgNdQydBrvdLGo4HfVStZCuOr3967dYek30r6L7Nkaa9zJXRE2eGT4lPvcAXDV2WxDZl/Xg== + dependencies: + hash.js "^1.1.7" + uuidv4 "^6.2.13" + +"@particle-network/auth@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" + integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== + dependencies: + "@particle-network/analytics" "^1.0.1" + "@particle-network/chains" "*" + "@particle-network/crypto" "^1.0.1" + buffer "^6.0.3" + draggabilly "^3.0.0" + +"@particle-network/chains@*": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.8.3.tgz#76d90cb36bf4e1fa72418dfaac6a46abcc1dea9a" + integrity sha512-WgzY2Hp3tpQYBKXF0pOFdCyJ4yekTTOCzBvBt2tvt7Wbzti2bLyRlfGZAoP57TvIMiy1S1oUfasVfM0Dqd6k5w== + +"@particle-network/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" + integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== + dependencies: + crypto-js "^4.1.1" + uuidv4 "^6.2.13" + +"@particle-network/solana-wallet@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@particle-network/solana-wallet/-/solana-wallet-1.3.2.tgz#9966209ccda60abb0114bf0447a524c781536b76" + integrity sha512-KviKVP87OtWq813y8IumM3rIQMNkTjHBaQmCUbTWGebz3csFOv54JIoy1r+3J3NnA+mBxBdZeRedZ5g+07v75w== + dependencies: + "@particle-network/auth" "^1.3.1" + "@pmmmwh/react-refresh-webpack-plugin@0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" @@ -3826,6 +4215,67 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64" integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw== +"@project-serum/sol-wallet-adapter@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" + integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== + dependencies: + bs58 "^4.0.1" + eventemitter3 "^4.0.7" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@reach/alert@0.13.2": version "0.13.2" resolved "https://registry.yarnpkg.com/@reach/alert/-/alert-0.13.2.tgz#71c4a848d51341f1d6d9eaae060975391c224870" @@ -3853,6 +4303,13 @@ prop-types "^15.7.2" tslib "^2.1.0" +"@react-native-async-storage/async-storage@^1.17.7": + version "1.24.0" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz#888efbc62a26f7d9464b32f4d3027b7f2771999b" + integrity sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g== + dependencies: + merge-options "^3.0.4" + "@reduxjs/toolkit@^1.6.1": version "1.8.3" resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.3.tgz#9c6a9c497bde43a67618d37a4175a00ae12efeb2" @@ -3930,6 +4387,50 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/base@~1.2.2", "@scure/base@~1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.4.tgz#002eb571a35d69bdb4c214d0995dff76a8dcd2a9" + integrity sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ== + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip32@1.6.2", "@scure/bip32@^1.5.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" + integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== + dependencies: + "@noble/curves" "~1.8.1" + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.2" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.5.4", "@scure/bip39@^1.4.0", "@scure/bip39@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" + integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== + dependencies: + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.4" + "@sentry/browser@7.33.0": version "7.33.0" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.33.0.tgz#0360fd323afda1066734b6d175e55ca1c3264898" @@ -3998,6 +4499,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== +"@sinclair/typebox@^0.33.7": + version "0.33.22" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.33.22.tgz#3339d85172509095a8384cb4b44834a7c9309d86" + integrity sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -4022,78 +4528,1352 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@solidity-parser/parser@^0.14.1": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@solana-mobile/mobile-wallet-adapter-protocol-web3js@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol-web3js/-/mobile-wallet-adapter-protocol-web3js-2.1.5.tgz#543a6b86f2961fc499019b6748a887393eb4e0c1" + integrity sha512-2EQpnlnZSlp9galzYP0saHBLTQrI8PMILMjDbu9VzNx97Q3M6tXhgIOppyshp0Wj4AR9SMteoxtLHeplz6U/Ww== dependencies: - antlr4ts "^0.5.0-alpha.4" + "@solana-mobile/mobile-wallet-adapter-protocol" "^2.1.5" + bs58 "^5.0.0" + js-base64 "^3.7.5" -"@stablelib/aead@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" - integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== +"@solana-mobile/mobile-wallet-adapter-protocol@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.1.5.tgz#fcc0dc1439f0d3c59f0245f97706b6425755deed" + integrity sha512-Nn+3cmM2uGmK38XzQY0C3Ic4orGi7olE67n3sjTVi1qiWNjLbZ0mvYAXoZnHC3vZMBQvgjfUWW69DZrMgn7Euw== + dependencies: + "@solana/wallet-standard" "^1.1.2" + "@solana/wallet-standard-util" "^1.1.1" + "@wallet-standard/core" "^1.0.3" + js-base64 "^3.7.5" -"@stablelib/binary@^0.7.2": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-0.7.2.tgz#1b3392170c8a8741c8b8f843ea294de71aeb2cf7" - integrity sha512-J7iGppeKR112ICTZTAoALcT3yBpTrd2Z/F0wwiOUZPVPTDFTQFWHZZdYzfal9+mY1uMUPRSEnNmDuXRZbtE8Xg== +"@solana-mobile/wallet-adapter-mobile@^2.0.0": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@solana-mobile/wallet-adapter-mobile/-/wallet-adapter-mobile-2.1.5.tgz#ab2ddfaf9fab4a3d7d1c558ad6f12488cf68855c" + integrity sha512-gCcCnC/9HtBS1v1P4/rs/1Ait73I0tqd0XELaodZf+Or5Y4nOk2G1yhpzLNb+SCHJ1eO1dPm+7Cyf6XxRAMacA== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol-web3js" "^2.1.5" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-features" "^1.2.0" + js-base64 "^3.7.5" + qrcode "^1.5.4" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.17.7" + +"@solana-program/compute-budget@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@solana-program/compute-budget/-/compute-budget-0.6.1.tgz#009f2987ac8fe20d19830ace45c00b04dec1f1e1" + integrity sha512-PWcVmRx2gSQ8jd5va5HzSlKqQmR8Q1sYaPcqpCzhOHcApJ4YsVWY6QhaOD5Nx7z1UXkP12vNq3KDsSCZnT3Hkw== + +"@solana-program/compute-budget@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@solana-program/compute-budget/-/compute-budget-0.7.0.tgz#a9e30b2bb4f9d11b8b8eef926b1ce258c6382431" + integrity sha512-/JJSE1fKO5zx7Z55Z2tLGWBDDi7tUE+xMlK8qqkHlY51KpqksMsIBzQMkG9Dqhoe2Cnn5/t3QK1nJKqW6eHzpg== + +"@solana-program/stake@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@solana-program/stake/-/stake-0.1.0.tgz#fe65344a60248d5987c93bfa505405e89ca06f02" + integrity sha512-8U3ax8RFvE7NegZmxn2SKE0927iG6Z9eXwBGgZaocEnZ/V3x7q/r0or1DZOV86RVyl6MQ9cuW8ExrRdorVNAVg== + +"@solana-program/system@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@solana-program/system/-/system-0.6.2.tgz#7b5d5097a03cb544da9e7df49fe7519594cdd294" + integrity sha512-q0ZnylK+LISjuP2jH5GWV9IJPtpzQctj5KQwij9XCDRSGkcFr2fpqptNnVupTLQiNL6Q4c1OZuG8WBmyFXVXZw== + +"@solana-program/system@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@solana-program/system/-/system-0.7.0.tgz#3e21c9fb31d3795eb65ba5cb663947c19b305bad" + integrity sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw== + +"@solana-program/token-2022@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@solana-program/token-2022/-/token-2022-0.4.0.tgz#fada5bb1f9c3c2121166edbb644e29dbf799b50a" + integrity sha512-rLcYyjeRq/dW62ju9X+gFYqIIRGuD4vXq6EwM9oQBoURFbFzyo12VUi6v0hNh0dRcru+kUx321qVCAfsWWV/ug== + +"@solana-program/token@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@solana-program/token/-/token-0.5.1.tgz#10e327df23f05a7f892fd33a9b6418f17dd62296" + integrity sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag== + +"@solana/accounts@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/accounts/-/accounts-2.0.0.tgz#4d5806079a69d1a15bc85eb4072913cf848ae8f7" + integrity sha512-1CE4P3QSDH5x+ZtSthMY2mn/ekROBnlT3/4f3CHDJicDvLQsgAq2yCvGHsYkK3ZA0mxhFLuhJVjuKASPnmG1rQ== dependencies: - "@stablelib/int" "^0.5.0" + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/rpc-spec" "2.0.0" + "@solana/rpc-types" "2.0.0" -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== +"@solana/accounts@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/accounts/-/accounts-2.1.0.tgz#23fa5ba20dd7af9bfb84abc638096378b62c7276" + integrity sha512-1JOBiLFeIeHmGx7k1b23UWF9vM1HAh9GBMCzr5rBPrGSBs+QUgxBJ3+yrRg+UPEOSELubqo7qoOVFUKYsb1nXw== dependencies: - "@stablelib/int" "^1.0.1" + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/rpc-spec" "2.1.0" + "@solana/rpc-types" "2.1.0" -"@stablelib/blake2s@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@stablelib/blake2s/-/blake2s-0.10.4.tgz#8a708f28a9c78d4a1a9fbcc6ce8bacbda469f302" - integrity sha512-IasdklC7YfXXLmVbnsxqmd66+Ki+Ysbp0BtcrNxAtrGx/HRGjkUZbSTbEa7HxFhBWIstJRcE5ExgY+RCqAiULQ== +"@solana/addresses@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/addresses/-/addresses-2.0.0.tgz#d1b01a38e0b48d7e4fea223821655a0c2b903c28" + integrity sha512-8n3c/mUlH1/z+pM8e7OJ6uDSXw26Be0dgYiokiqblO66DGQ0d+7pqFUFZ5pEGjJ9PU2lDTSfY8rHf4cemOqwzQ== dependencies: - "@stablelib/binary" "^0.7.2" - "@stablelib/hash" "^0.5.0" - "@stablelib/wipe" "^0.5.0" + "@solana/assertions" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" -"@stablelib/blake2xs@0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@stablelib/blake2xs/-/blake2xs-0.10.4.tgz#b3ae9e145cbf924a7f598412b586e4af24d10cb7" - integrity sha512-1N0S4cruso/StV9TmoujPGj3RU0Cy42wlZneBWLWby7m2ssnY57l/CsYQSm03TshOoYss4hqc5kwSy5pmWAdUA== +"@solana/addresses@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/addresses/-/addresses-2.1.0.tgz#28b07b46c41c101a1c1d894b905f27b847c095a8" + integrity sha512-IgiRuju2yLz14GnrysOPSNZbZQ8F+7jhx7FYZLrbKogf6NX4wy4ijLHxRsLFqP8o8aY69BZULkM9MwrSjsZi7A== dependencies: - "@stablelib/blake2s" "^0.10.4" - "@stablelib/hash" "^0.5.0" - "@stablelib/wipe" "^0.5.0" + "@solana/assertions" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== +"@solana/assertions@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/assertions/-/assertions-2.0.0.tgz#b02fc874a890f252c4595a0e35deeb1719d5f02b" + integrity sha512-NyPPqZRNGXs/GAjfgsw7YS6vCTXWt4ibXveS+ciy5sdmp/0v3pA6DlzYjleF9Sljrew0IiON15rjaXamhDxYfQ== + dependencies: + "@solana/errors" "2.0.0" -"@stablelib/chacha20poly1305@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" - integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== +"@solana/assertions@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/assertions/-/assertions-2.1.0.tgz#ba32442e5a70ca8ddaec2d857dde1a57c5569689" + integrity sha512-KCYmxFRsg897Ec7yGdpc0rniOlqGD3NpicmIjWIV87uiXX5uFco4t+01sKyFlhsv4T4OgHxngMsxkfQ3AUkFVg== dependencies: - "@stablelib/aead" "^1.0.1" - "@stablelib/binary" "^1.0.1" - "@stablelib/chacha" "^1.0.1" - "@stablelib/constant-time" "^1.0.1" - "@stablelib/poly1305" "^1.0.1" - "@stablelib/wipe" "^1.0.1" + "@solana/errors" "2.1.0" -"@stablelib/chacha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" - integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== +"@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" + buffer "~6.0.3" -"@stablelib/constant-time@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" +"@solana/codecs-core@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0.tgz#31d4a6acce9ac49f786939c4e564adf9a68c56ef" + integrity sha512-qCG+3hDU5Pm8V6joJjR4j4Zv9md1z0RaecniNDIkEglnxmOUODnmPLWbtOjnDylfItyuZeDihK8hkewdj8cUtw== + dependencies: + "@solana/errors" "2.0.0" + +"@solana/codecs-core@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.1.0.tgz#79ac28fbcde4a09d88f4360777ceeb30ec14e3f1" + integrity sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw== + dependencies: + "@solana/errors" "2.1.0" + +"@solana/codecs-data-structures@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0.tgz#0a06b8646634dcf44a7b1d968fe8d9218c3cb745" + integrity sha512-N98Y4jsrC/XeOgqrfsGqcOFIaOoMsKdAxOmy5oqVaEN67YoGSLNC9ROnqamOAOrsZdicTWx9/YLKFmQi9DPh1A== + dependencies: + "@solana/codecs-core" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/codecs-data-structures@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.1.0.tgz#32d8be437b055c2f395dd2b8f43d9b92a39daa91" + integrity sha512-oDF5ek54kirqJ09q8k/qEpobBiWOhd3CkkGOTyfjsmTF/IGIigNbdYIakxV3+vudBeaNBw08y0XdBYI4JL/nqA== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/codecs-numbers@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0.tgz#c08250968fa1cbfab076367b650269271061c646" + integrity sha512-r66i7VzJO1MZkQWZIAI6jjJOFVpnq0+FIabo2Z2ZDtrArFus/SbSEv543yCLeD2tdR/G/p+1+P5On10qF50Y1Q== + dependencies: + "@solana/codecs-core" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/codecs-numbers@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.1.0.tgz#f6a1a9009ace56238d8d9478dd5d375b09c6342a" + integrity sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/codecs-strings@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0.tgz#46e728adee9a4737c3ee811af452948aab31cbd4" + integrity sha512-dNqeCypsvaHcjW86H0gYgAZGGkKVBeKVeh7WXlOZ9kno7PeQ2wNkpccyzDfuzaIsKv+HZUD3v/eo86GCvnKazQ== + dependencies: + "@solana/codecs-core" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/codecs-strings@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.1.0.tgz#13a92930b21e4d8e7a064f623c817f2082574f1a" + integrity sha512-O/eJFLzFrHomcCR1Y5QbIqoPo7iaJaWNnIeskB4mVhVjLyjlJS4WtBP2NBRzM9uJXaXyOxxKroqqO9zFsHOpvQ== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/codecs@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0.tgz#2a3f272932eebad5b8592e6263b068c7d0761e7f" + integrity sha512-xneIG5ppE6WIGaZCK7JTys0uLhzlnEJUdBO8nRVIyerwH6aqCfb0fGe7q5WNNYAVDRSxC0Pc1TDe1hpdx3KWmQ== + dependencies: + "@solana/codecs-core" "2.0.0" + "@solana/codecs-data-structures" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/options" "2.0.0" + +"@solana/codecs@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.1.0.tgz#0516f2c840c5173fdadc9783511e25f1c3ea0e65" + integrity sha512-C0TnfrpbTg7zoIFYfM65ofeL2AWEz80OsD6mjVdcTKpb1Uj7XuBuNLss3dMnatPQaL7RagD9VLA5/WfYayyteQ== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/codecs-data-structures" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/options" "2.1.0" + +"@solana/errors@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0.tgz#31c87baaf4b19aaa2a1d8bbc4dfa6efd449d7bbe" + integrity sha512-IHlaPFSy4lvYco1oHJ3X8DbchWwAwJaL/4wZKnF1ugwZ0g0re8wbABrqNOe/jyZ84VU9Z14PYM8W9oDAebdJbw== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@solana/errors@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.1.0.tgz#1a139965fcb8bec610cc1c6194d53d169f4b5852" + integrity sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw== + dependencies: + chalk "^5.3.0" + commander "^13.1.0" + +"@solana/fast-stable-stringify@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/fast-stable-stringify/-/fast-stable-stringify-2.0.0.tgz#ac06b304ee3e050c171bcbe885e91772e22e06fb" + integrity sha512-EsIx9z+eoxOmC+FpzhEb+H67CCYTbs/omAqXD4EdEYnCHWrI1li1oYBV+NoKzfx8fKlX+nzNB7S/9kc4u7Etpw== + +"@solana/fast-stable-stringify@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/fast-stable-stringify/-/fast-stable-stringify-2.1.0.tgz#df24390539968c2e7157c0757961b097fc7ee1fa" + integrity sha512-a8vR92qbe/VsvQ1BpN3PIEwnoHD2fTHEwCJh9GG58z3R15RIjk73gc0khjcdg4U1tZwTJqWkvk8SbDIgGdOgMA== + +"@solana/functional@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/functional/-/functional-2.0.0.tgz#6e2468cc2ec334ee3c39609130520b3a5c8f9bc0" + integrity sha512-Sj+sLiUTimnMEyGnSLGt0lbih2xPDUhxhonnrIkPwA+hjQ3ULGHAxeevHU06nqiVEgENQYUJ5rCtHs4xhUFAkQ== + +"@solana/functional@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/functional/-/functional-2.1.0.tgz#01c80d870479a8a6d14dd511fd0ae0262fc2e09d" + integrity sha512-RVij8Av4F2uUOFcEC8n9lgD72e9gQMritmGHhMh+G91Xops4I6Few+oQ++XgSTiL2t3g3Cs0QZ13onZ0FL45FQ== + +"@solana/instructions@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/instructions/-/instructions-2.0.0.tgz#4062a2211b376dc2a9cc5a25ad50f1de0ea44e5b" + integrity sha512-MiTEiNF7Pzp+Y+x4yadl2VUcNHboaW5WP52psBuhHns3GpbbruRv5efMpM9OEQNe1OsN+Eg39vjEidX55+P+DQ== + dependencies: + "@solana/errors" "2.0.0" + +"@solana/instructions@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/instructions/-/instructions-2.1.0.tgz#67ac468ff9293cf881392c8180950c4023b8dff0" + integrity sha512-wfn6e7Rgm0Sw/Th1v/pXsKTvloZvAAQI7j1yc9WcIk9ngqH5p6LhqMMkrwYPB2oTk8+MMr7SZ4E+2eK2gL6ODA== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/keys@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/keys/-/keys-2.0.0.tgz#b4b31815265a003b8840028979e83e1b723ee02c" + integrity sha512-SSLSX8BXRvfLKBqsmBghmlhMKpwHeWd5CHi5zXgTS1BRrtiU6lcrTVC9ie6B+WaNNq7oe3e6K5bdbhu3fFZ+0g== + dependencies: + "@solana/assertions" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/keys@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/keys/-/keys-2.1.0.tgz#c0f8940bfa4e2fa052aa1b955cbdb1e742e31fe8" + integrity sha512-esY1+dlZjB18hZML5p+YPec29wi3HH0SzKx7RiqF//dI2cJ6vHfq3F+7ArbNnF6R2YCLFtl7DzS/tkqR2Xkxeg== + dependencies: + "@solana/assertions" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/kit@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/kit/-/kit-2.1.0.tgz#57ed0fd74c4330e3b0e25e961ed1264e7f8a0c24" + integrity sha512-vqaHROLKp89xdIbaKVG6BQ44uMN9E6/rSTeltkvquD2qdTObssafGDbAKVFjwZhlNO+sdzHDCLekGabn5VAL6A== + dependencies: + "@solana/accounts" "2.1.0" + "@solana/addresses" "2.1.0" + "@solana/codecs" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/instructions" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/programs" "2.1.0" + "@solana/rpc" "2.1.0" + "@solana/rpc-parsed-types" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + "@solana/rpc-subscriptions" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/signers" "2.1.0" + "@solana/sysvars" "2.1.0" + "@solana/transaction-confirmation" "2.1.0" + "@solana/transaction-messages" "2.1.0" + "@solana/transactions" "2.1.0" + +"@solana/options@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0.tgz#0dbbecd8511c1e600cad8615a836c6e06c3191d5" + integrity sha512-OVc4KnYosB8oAukQ/htgrxXSxlUP6gUu5Aau6d/BgEkPQzWd/Pr+w91VWw3i3zZuu2SGpedbyh05RoJBe/hSXA== + dependencies: + "@solana/codecs-core" "2.0.0" + "@solana/codecs-data-structures" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/options@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.1.0.tgz#7ff65ea30f7f9ee481306e63b22545fea1c27552" + integrity sha512-T/vJCr8qnwK6HxriOPXCrx31IpA9ZYecxuOzQ3G74kIayED4spmpXp6PLtRYR/fo2LZ6UcgHN0qSgONnvwEweg== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/codecs-data-structures" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/programs@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/programs/-/programs-2.0.0.tgz#1c0fa1c98a8cf6fab3ac722fe768e110057eeaf9" + integrity sha512-JPIKB61pWfODnsvEAaPALc6vR5rn7kmHLpFaviWhBtfUlEVgB8yVTR0MURe4+z+fJCPRV5wWss+svA4EeGDYzQ== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/programs@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/programs/-/programs-2.1.0.tgz#3ae57734a0ab6985cc016d90d1b8bde55edeee46" + integrity sha512-9Y30/yUbTR99+QRN2ukNXQQTGY68oKmVrXnh/et6StM1JF5WHvAJqBigsHG5bt6KxTISoRuncBnH/IRnDqPxKg== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/promises@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/promises/-/promises-2.0.0.tgz#81c8ee7c706ea4c46892022666da51bb9da921ef" + integrity sha512-4teQ52HDjK16ORrZe1zl+Q9WcZdQ+YEl0M1gk59XG7D0P9WqaVEQzeXGnKSCs+Y9bnB1u5xCJccwpUhHYWq6gg== + +"@solana/promises@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/promises/-/promises-2.1.0.tgz#d740e440d85533cdf796f694e90fcb557dabdde9" + integrity sha512-eQJaQXA2kD4dVyifzhslV3wOvq27fwOJ4az89BQ4Cz83zPbR94xOeDShwcXrKBYqaUf6XqH5MzdEo14t4tKAFQ== + +"@solana/rpc-api@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-api/-/rpc-api-2.0.0.tgz#84ab27beb3ec7416bc1aa263281a582060953450" + integrity sha512-1FwitYxwADMF/6zKP2kNXg8ESxB6GhNBNW1c4f5dEmuXuBbeD/enLV3WMrpg8zJkIaaYarEFNbt7R7HyFzmURQ== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/rpc-parsed-types" "2.0.0" + "@solana/rpc-spec" "2.0.0" + "@solana/rpc-transformers" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/transaction-messages" "2.0.0" + "@solana/transactions" "2.0.0" + +"@solana/rpc-api@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-api/-/rpc-api-2.1.0.tgz#d4efc40d6e0dc42cf99c8e21344b71378a8bbb87" + integrity sha512-4yCnHYHFlz9VffivoY5q/HVeBjT59byB2gmg7UyC3ktxD28AlF9jjsE5tJKiapAKr2J3KWm0D/rH/QwW14cGeA== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/rpc-parsed-types" "2.1.0" + "@solana/rpc-spec" "2.1.0" + "@solana/rpc-transformers" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/transaction-messages" "2.1.0" + "@solana/transactions" "2.1.0" + +"@solana/rpc-parsed-types@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-parsed-types/-/rpc-parsed-types-2.0.0.tgz#b83840981ce816142681d4f091a314300d4b10ab" + integrity sha512-VCeY/oKVEtBnp8EDOc5LSSiOeIOLFIgLndcxqU0ij/cZaQ01DOoHbhluvhZtU80Z3dUeicec8TiMgkFzed+WhQ== + +"@solana/rpc-parsed-types@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-parsed-types/-/rpc-parsed-types-2.1.0.tgz#7e197942a1c2c96286d4e4df9db41796d4033d1a" + integrity sha512-mRzHemxlWDS9p1fPQNKwL+1vEOUMG8peSUJb0X/NbM12yjowDNdzM++fkOgIyCKDPddfkcoNmNrQmr2jwjdN1Q== + +"@solana/rpc-spec-types@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-spec-types/-/rpc-spec-types-2.0.0.tgz#49e46188f77aeeda0cf6f0e40117e2ba4a35cc14" + integrity sha512-G2lmhFhgtxMQd/D6B04BHGE7bm5dMZdIPQNOqVGhzNAVjrmyapD3JN2hKAbmaYPe97wLfZERw0Ux1u4Y6q7TqA== + +"@solana/rpc-spec-types@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-spec-types/-/rpc-spec-types-2.1.0.tgz#3285766dffeffb6612bb837b5f9bac9d1386d595" + integrity sha512-NxcZ8piXMyCdbNUL6d36QJfL2UAQEN33StlGku0ltTVe1nrokZ5WRNjSPohU1fODlNaZzTvUFzvUkM1yGCkyzw== + +"@solana/rpc-spec@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-spec/-/rpc-spec-2.0.0.tgz#d0cbacd1c1dcb1a98d240488afd1e63878e7b17b" + integrity sha512-1uIDzj7vocCUqfOifjv1zAuxQ53ugiup/42edVFoQLOnJresoEZLL6WjnsJq4oCTccEAvGhUBI1WWKeZTGNxFQ== + dependencies: + "@solana/errors" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + +"@solana/rpc-spec@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-spec/-/rpc-spec-2.1.0.tgz#ae28b04930a80c1f79c0fb6bb18ff9ba90f7ec1e" + integrity sha512-NPAIM5EY7Jke0mHnmoMpgCEb/nZKIo+bgVFK/u+z74gY0JnCNt0DfocStUUQtlhqSmTyoHamt3lfxp4GT2zXbA== + dependencies: + "@solana/errors" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + +"@solana/rpc-subscriptions-api@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.0.0.tgz#bd2e8ce566e9bf530d678ea4733472e1da5890af" + integrity sha512-NAJQvSFXYIIf8zxsMFBCkSbZNZgT32pzPZ1V6ZAd+U2iDEjx3L+yFwoJgfOcHp8kAV+alsF2lIsGBlG4u+ehvw== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/rpc-subscriptions-spec" "2.0.0" + "@solana/rpc-transformers" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/transaction-messages" "2.0.0" + "@solana/transactions" "2.0.0" + +"@solana/rpc-subscriptions-api@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.1.0.tgz#7b588452aec5e9c661889737ea9f2d2d03a28a81" + integrity sha512-de1dBRSE2CUwoZHMXQ/0v7iC+/pG0+iYY8jLHGGNxtKrYbTnV08mXQbaAMrmv2Rk8ZFmfJWbqbYZ9dRWdO3P5g== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/rpc-subscriptions-spec" "2.1.0" + "@solana/rpc-transformers" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/transaction-messages" "2.1.0" + "@solana/transactions" "2.1.0" + +"@solana/rpc-subscriptions-channel-websocket@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.0.0.tgz#7bff107b03cafe7ead1cf3801d9ed8078a01217c" + integrity sha512-hSQDZBmcp2t+gLZsSBqs/SqVw4RuNSC7njiP46azyzW7oGg8X2YPV36AHGsHD12KPsc0UpT1OAZ4+AN9meVKww== + dependencies: + "@solana/errors" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/rpc-subscriptions-spec" "2.0.0" + "@solana/subscribable" "2.0.0" + +"@solana/rpc-subscriptions-channel-websocket@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.1.0.tgz#17ca9df1a57e5f6cf7c6de5b777e561b3896e69f" + integrity sha512-goJe9dv0cs967HJ382vSX8yapXgQzRHCmH323LsXrrpj/s3Eb3yUwJq7AcHgoh4gKIqyAfGybq/bE5Aa8Pcm9g== + dependencies: + "@solana/errors" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/rpc-subscriptions-spec" "2.1.0" + "@solana/subscribable" "2.1.0" + +"@solana/rpc-subscriptions-spec@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.0.0.tgz#b476b449d917134476001c22c54fbeb69bfae4cb" + integrity sha512-VXMiI3fYtU1PkVVTXL87pcY48ZY8aCi1N6FqtxSP2xg/GASL01j1qbwyIL1OvoCqGyRgIxdd/YfaByW9wmWBhA== + dependencies: + "@solana/errors" "2.0.0" + "@solana/promises" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + "@solana/subscribable" "2.0.0" + +"@solana/rpc-subscriptions-spec@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.1.0.tgz#5675d65b60c9c96a633a01951edb3eac347d71b1" + integrity sha512-Uqasfd3Tlr22lC/Vy5dToF0e68dMKPdnt4ks7FwXuPdEbNRM/TDGb0GqG+bt/d3IIrNOCA5Y8vsE0nQHGrWG/w== + dependencies: + "@solana/errors" "2.1.0" + "@solana/promises" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + "@solana/subscribable" "2.1.0" + +"@solana/rpc-subscriptions@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions/-/rpc-subscriptions-2.0.0.tgz#c512b261a428f550510fe855bb751c0638547d4f" + integrity sha512-AdwMJHMrhlj7q1MPjZmVcKq3iLqMW3N0MT8kzIAP2vP+8o/d6Fn4aqGxoz2Hlfn3OYIZoYStN2VBtwzbcfEgMA== + dependencies: + "@solana/errors" "2.0.0" + "@solana/fast-stable-stringify" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/promises" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + "@solana/rpc-subscriptions-api" "2.0.0" + "@solana/rpc-subscriptions-channel-websocket" "2.0.0" + "@solana/rpc-subscriptions-spec" "2.0.0" + "@solana/rpc-transformers" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/subscribable" "2.0.0" + +"@solana/rpc-subscriptions@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-subscriptions/-/rpc-subscriptions-2.1.0.tgz#5b86072009682ea31d1f19b21426c7f04ed92411" + integrity sha512-dTyI03VlueE3s7mA/OBlA5l6yKUUKHMJd31tpzxV3AFnqE/QPS5NVrF/WY6pPBobLJiCP0UFOe7eR/MKP9SUCA== + dependencies: + "@solana/errors" "2.1.0" + "@solana/fast-stable-stringify" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/promises" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + "@solana/rpc-subscriptions-api" "2.1.0" + "@solana/rpc-subscriptions-channel-websocket" "2.1.0" + "@solana/rpc-subscriptions-spec" "2.1.0" + "@solana/rpc-transformers" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/subscribable" "2.1.0" + +"@solana/rpc-transformers@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-transformers/-/rpc-transformers-2.0.0.tgz#592f7a2cc18378bf29248d059d1142897edf497f" + integrity sha512-H6tN0qcqzUangowsLLQtYXKJsf1Roe3/qJ1Cy0gv9ojY9uEvNbJqpeEj+7blv0MUZfEe+rECAwBhxxRKPMhYGw== + dependencies: + "@solana/errors" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + "@solana/rpc-types" "2.0.0" + +"@solana/rpc-transformers@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-transformers/-/rpc-transformers-2.1.0.tgz#216be58f9369794f74a77a17ea51e6f531d4ef83" + integrity sha512-E2xPlaCu6tNO00v4HIJxJCYkoNwgVJYad5sxbIUZOQBWwXnWIcll2jUT4bWKpBGq5vFDYfkzRBr8Rco3DhfXqg== + dependencies: + "@solana/errors" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + "@solana/rpc-types" "2.1.0" + +"@solana/rpc-transport-http@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-transport-http/-/rpc-transport-http-2.0.0.tgz#87aecad790dfefe723262778b3c3be73d9a35426" + integrity sha512-UJLhKhhxDd1OPi8hb2AenHsDm1mofCBbhWn4bDCnH2Q3ulwYadUhcNqNbxjJPQ774VNhAf53SSI5A6PQo8IZSQ== + dependencies: + "@solana/errors" "2.0.0" + "@solana/rpc-spec" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + undici-types "^6.20.0" + +"@solana/rpc-transport-http@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-transport-http/-/rpc-transport-http-2.1.0.tgz#397e0a0747d01153524e030cb6cb41a2f2cc2c04" + integrity sha512-E3UovTBid4/S8QDd9FkADVKfyG+v7CW5IqI4c27ZDKfazCsnDLLkqh98C6BvNCqi278HKBui4lI2GoFpCq89Pw== + dependencies: + "@solana/errors" "2.1.0" + "@solana/rpc-spec" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + undici-types "^7.3.0" + +"@solana/rpc-types@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-types/-/rpc-types-2.0.0.tgz#332989671606914f9ab0d196cb94e83f626bef34" + integrity sha512-o1ApB9PYR0A3XjVSOh//SOVWgjDcqMlR3UNmtqciuREIBmWqnvPirdOa5EJxD3iPhfA4gnNnhGzT+tMDeDW/Kw== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + +"@solana/rpc-types@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc-types/-/rpc-types-2.1.0.tgz#3b4b515a1da36ffff7386f8ba831fddcebf3dde3" + integrity sha512-1ODnhmpR1X/GjB7hs4gVR3mcCagfPQV0dzq/2DNuCiMjx2snn64KP5WoAHfBEyoC9/Rb36+JpNj/hLAOikipKA== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/rpc@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/rpc/-/rpc-2.0.0.tgz#afc43a9be80f9c9b254da30bb31c2b3f34025c66" + integrity sha512-TumQ9DFRpib/RyaIqLVfr7UjqSo7ldfzpae0tgjM93YjbItB4Z0VcUXc3uAFvkeYw2/HIMb46Zg43mkUwozjDg== + dependencies: + "@solana/errors" "2.0.0" + "@solana/fast-stable-stringify" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/rpc-api" "2.0.0" + "@solana/rpc-spec" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + "@solana/rpc-transformers" "2.0.0" + "@solana/rpc-transport-http" "2.0.0" + "@solana/rpc-types" "2.0.0" + +"@solana/rpc@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/rpc/-/rpc-2.1.0.tgz#9320f562537da880e76843cc5c7d815fa030e7c3" + integrity sha512-myg9qAo6b2WKyHSMXURQykb+ZRnNEXBPLEcwRwkos8STzPPyRFg6ady2s0FCQQTtL/pVjanIU2bObZIzbMGugA== + dependencies: + "@solana/errors" "2.1.0" + "@solana/fast-stable-stringify" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/rpc-api" "2.1.0" + "@solana/rpc-spec" "2.1.0" + "@solana/rpc-spec-types" "2.1.0" + "@solana/rpc-transformers" "2.1.0" + "@solana/rpc-transport-http" "2.1.0" + "@solana/rpc-types" "2.1.0" + +"@solana/signers@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/signers/-/signers-2.0.0.tgz#896f5e0fc17ea8e47042cfcb1c24b225cb8def3d" + integrity sha512-JEYJS3x/iKkqPV/3b1nLpX9lHib21wQKV3fOuu1aDLQqmX9OYKrnIIITYdnFDhmvGhpEpkkbPnqu7yVaFIBYsQ== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/instructions" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/transaction-messages" "2.0.0" + "@solana/transactions" "2.0.0" + +"@solana/signers@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/signers/-/signers-2.1.0.tgz#3bdf5ec358c5243cdf49702e5d6dc260e531da34" + integrity sha512-Yq0JdJnCecRsSBshNWy+OIRmAGeVfjwIh9Z+H1jv8u8p+dJCOreKakTWuxMt5tnj3q5K1mPcak9O2PqVPZ0teA== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/instructions" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/transaction-messages" "2.1.0" + "@solana/transactions" "2.1.0" + +"@solana/subscribable@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/subscribable/-/subscribable-2.0.0.tgz#6476bf253395c077f9fdbd4a9b83011734a86b06" + integrity sha512-Ex7d2GnTSNVMZDU3z6nKN4agRDDgCgBDiLnmn1hmt0iFo3alr3gRAqiqa7qGouAtYh9/29pyc8tVJCijHWJPQQ== + dependencies: + "@solana/errors" "2.0.0" + +"@solana/subscribable@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/subscribable/-/subscribable-2.1.0.tgz#690880897ff4953dc79230d7fb8ed7f3fa8fd527" + integrity sha512-xi12Cm889+uT5sRKnIzr7nLnHAp3hiR3dqIzrT1P7z7iEGp8OnqUQIQCHlgozFHM2cPW+6685NQXk1l1ImuJIw== + dependencies: + "@solana/errors" "2.1.0" + +"@solana/sysvars@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/sysvars/-/sysvars-2.0.0.tgz#60f1e3b918bfdd34420f1ca2d6458cc2538d16b7" + integrity sha512-8D4ajKcCYQsTG1p4k30lre2vjxLR6S5MftUGJnIaQObDCzGmaeA9GRti4Kk4gSPWVYFTBoj1ASx8EcEXaB3eIQ== + dependencies: + "@solana/accounts" "2.0.0" + "@solana/codecs" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/rpc-types" "2.0.0" + +"@solana/sysvars@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/sysvars/-/sysvars-2.1.0.tgz#4e2c6df16e84e3ce43d9d33b68583c9eded1ee00" + integrity sha512-GXu9yS0zIebmM1Unqw/XFpYuvug03m42w98ioOPV/yiHzECggGRGpHGD9RLVYnkyz0eL4NRbnJ5dAEu/fvGe0A== + dependencies: + "@solana/accounts" "2.1.0" + "@solana/codecs" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/rpc-types" "2.1.0" + +"@solana/transaction-confirmation@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/transaction-confirmation/-/transaction-confirmation-2.0.0.tgz#53385e31f94ab6b1f35c25576cb478f383476c81" + integrity sha512-JkTw5gXLiqQjf6xK0fpVcoJ/aMp2kagtFSD/BAOazdJ3UYzOzbzqvECt6uWa3ConcMswQ2vXalVtI7ZjmYuIeg== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/promises" "2.0.0" + "@solana/rpc" "2.0.0" + "@solana/rpc-subscriptions" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/transaction-messages" "2.0.0" + "@solana/transactions" "2.0.0" + +"@solana/transaction-confirmation@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/transaction-confirmation/-/transaction-confirmation-2.1.0.tgz#a0e8f911c84cc2503ae20307bdc479b1adfa23a9" + integrity sha512-VxOvtvs2e9h5u73PHyE2TptLAMO5x6dOXlOgvq1Nk6l3rKM2HAsd+KDpN7gjOo8/EgItMMmyEilXygWWRgpSIA== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/promises" "2.1.0" + "@solana/rpc" "2.1.0" + "@solana/rpc-subscriptions" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/transaction-messages" "2.1.0" + "@solana/transactions" "2.1.0" + +"@solana/transaction-messages@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/transaction-messages/-/transaction-messages-2.0.0.tgz#ad362eb7f4a14efab31e5dfaa65f24959030d8f8" + integrity sha512-Uc6Fw1EJLBrmgS1lH2ZfLAAKFvprWPQQzOVwZS78Pv8Whsk7tweYTK6S0Upv0nHr50rGpnORJfmdBrXE6OfNGg== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-data-structures" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/instructions" "2.0.0" + "@solana/rpc-types" "2.0.0" + +"@solana/transaction-messages@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/transaction-messages/-/transaction-messages-2.1.0.tgz#2a38e44cc036875409da99b2ecef4a1e8eedb010" + integrity sha512-+GPzZHLYNFbqHKoiL8mYALp7eAXtAbI6zLViZpIM3zUbVNU3q5+FCKGv6jCBnxs+3QCbeapu+W1OyfDa6BUtTQ== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-data-structures" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/instructions" "2.1.0" + "@solana/rpc-types" "2.1.0" + +"@solana/transactions@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/transactions/-/transactions-2.0.0.tgz#c27cb998e2c701fc49bda2cc5ca896e6067840dc" + integrity sha512-VfdTE+59WKvuBG//6iE9RPjAB+ZT2kLgY2CDHabaz6RkH6OjOkMez9fWPVa3Xtcus+YQWN1SnQoryjF/xSx04w== + dependencies: + "@solana/addresses" "2.0.0" + "@solana/codecs-core" "2.0.0" + "@solana/codecs-data-structures" "2.0.0" + "@solana/codecs-numbers" "2.0.0" + "@solana/codecs-strings" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/instructions" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/transaction-messages" "2.0.0" + +"@solana/transactions@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/transactions/-/transactions-2.1.0.tgz#d51d8ede0cc218cc03ba822929f567b4475a3508" + integrity sha512-QeM4sCItReeIy5LU7LhGkz7RPfMPTg/Qo8h0LSfhiJiPTOHOhElmh42vkLJmwPl83+MsKtisyPQNK6penM2nAw== + dependencies: + "@solana/addresses" "2.1.0" + "@solana/codecs-core" "2.1.0" + "@solana/codecs-data-structures" "2.1.0" + "@solana/codecs-numbers" "2.1.0" + "@solana/codecs-strings" "2.1.0" + "@solana/errors" "2.1.0" + "@solana/functional" "2.1.0" + "@solana/instructions" "2.1.0" + "@solana/keys" "2.1.0" + "@solana/rpc-types" "2.1.0" + "@solana/transaction-messages" "2.1.0" + +"@solana/wallet-adapter-alpha@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-alpha/-/wallet-adapter-alpha-0.1.11.tgz#db0110c1a8dba58ae127641806cb62f80d1216a7" + integrity sha512-1aXYFLmwP8wSYYJa1adBnrp/utzJW/XFQxM4B1cQ4xgUxpHYJuQCgkaoTajbiCxjkOnFuhgiMNfZNRzk7gwC4w== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-avana@^0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-avana/-/wallet-adapter-avana-0.1.14.tgz#1cca8f1a0e338c7422bcf9bc8129ba23a83ac233" + integrity sha512-sAa9NyipCOdoc5ewG2RwBM+/inu7rwR5YL0n5XghjDjgrNOSgBLkjh7kdW7uxRuu8fzXREDpDXFRldbvGf6qhQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-base-ui@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base-ui/-/wallet-adapter-base-ui-0.1.3.tgz#c30bf296b9ba7933ed6cb8cc9f218dc0d99af993" + integrity sha512-me3iyLGRS+0NevvL1ixzmTGro0fuJlSWSSmNVjMbfqSx+6ooqY2A5SyuTur27F+Qa2L/b7tzH3L0ojLkHC2rmw== + dependencies: + "@solana/wallet-adapter-react" "^0.15.36" + +"@solana/wallet-adapter-base@^0.9.17", "@solana/wallet-adapter-base@^0.9.23", "@solana/wallet-adapter-base@^0.9.24": + version "0.9.24" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.24.tgz#648164f2f90a5ea3bbb5760b05f960b7fb1f4d6b" + integrity sha512-f3kwHF/2Lx3YgcO37B45MM46YLFy4QkdLemZ+N/0SwLAnSfhq3+Vb9bC5vuoupMJ/onos09TIDeIxRdg/+51kw== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + eventemitter3 "^4.0.7" + +"@solana/wallet-adapter-bitkeep@^0.3.21": + version "0.3.21" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.21.tgz#15353eca7a4b8ffecee59cf30ba2f2a7b957af35" + integrity sha512-KjLxT6zcE0HVMJYlWi9//yeMvS6B1v4DsJn6H3kZETZ2igbfRBZUR5J3uBm4jvedexy7iTGGOh5N4lWqxxgBsA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-bitpie@^0.5.19": + version "0.5.19" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-bitpie/-/wallet-adapter-bitpie-0.5.19.tgz#7ad73a4325b6fd1beca00c5cd58f60fac30ab55f" + integrity sha512-y4mcRxGnGA8yrV9sZ5+m1VzrvFxvYckFEbAzN/XFkS9sdZVYXWdymlMIHNol1vVz8fYdjRkGoAXVOvsyZWCYtw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-clover@^0.4.20": + version "0.4.20" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-clover/-/wallet-adapter-clover-0.4.20.tgz#5f7c27685a536f5f04876f3460c5fe0ec9ba9a94" + integrity sha512-PZQPvUB1QRwBHx07KUoLOja1ogm2KFrr5mXYwSPWm0i2TSxVEu2JgoJRE/5TQJLyKFyFU6pMVO6scfIgxahwuA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-coin98@^0.5.21": + version "0.5.21" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-coin98/-/wallet-adapter-coin98-0.5.21.tgz#ee42787df586d49cc0f771e4ad492a546fde12ed" + integrity sha512-M5T4/oEEVih+QTLQtoe51btgFBcnpukxaM8E98CzNTXHjUM3tBSkAEYzwHsgy713sBOmNeSphly/5ovtWnhYvQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + bs58 "^4.0.1" + +"@solana/wallet-adapter-coinbase@^0.1.20": + version "0.1.20" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-coinbase/-/wallet-adapter-coinbase-0.1.20.tgz#21781b653285482157bb83833c2a1c6b43f6f165" + integrity sha512-NFvEp/cXuXxyJ890W+X4j6qS0mMVrRb8R2C838tSkMvNHznXo2KwxsaWzCjE8MOdDK0tnbjxF9fBtbUGG8+HsQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-coinhub@^0.3.19": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-coinhub/-/wallet-adapter-coinhub-0.3.19.tgz#23588f1096210bee422a53bb1ce6ff1ac30d1035" + integrity sha512-ilDnvoZyB9Ob/V65psduhmlsox70L28hDmp/uN/27BeqZTSWVGhKuNUyqtXrnq76Bht4cZxIwzCDN1w4T6+IHw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-fractal@^0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-fractal/-/wallet-adapter-fractal-0.1.9.tgz#28fc078e7dc0ed3f58314241039a87d4e5bafec9" + integrity sha512-8Oku2FcGV69SO0eV0Je5vRg/rLUglotfwbzpE1Tdfxo4/5Ok3bh1G6K5njQsvdnNjagf1fywNBP7dBoenYgvvQ== + dependencies: + "@fractalwagmi/solana-wallet-adapter" "^0.1.1" + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-huobi@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-huobi/-/wallet-adapter-huobi-0.1.16.tgz#830f08ccd1dcfb4d3fb1a5908bd85054653d7e46" + integrity sha512-wu59OR7JVaZtKncdVvXmqA+6FJAlFE7po3jMJsKRUQmBhF3ZJ8gMuJvcPyZ8M8GXI1QCjuF4K/leJO0KUiW3kg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-hyperpay@^0.1.15": + version "0.1.15" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-hyperpay/-/wallet-adapter-hyperpay-0.1.15.tgz#6d67a492034b794672d0b77a708515c34dd7bb5a" + integrity sha512-wfVo6hsehZp2akkJyiAYsx8Dbe5mzF3fgx1/sFjEyFm9cWh+pADp6QX/GKnSh04EbSatXaN1w2l2WMLdbiqNog== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-keystone@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-keystone/-/wallet-adapter-keystone-0.1.16.tgz#f72c816422f94900891cf12909007bac54094a3c" + integrity sha512-3kXLa1uRlyS22/nhUEARiL8edfHmKd6amzjAOM8QXoHER1T0wx+RJFZZp78DkM0sWPQy30KOcgOZbiNX+cz1Lw== + dependencies: + "@keystonehq/sol-keyring" "^0.20.0" + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-krystal@^0.1.13": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-krystal/-/wallet-adapter-krystal-0.1.13.tgz#7cf283231fe1af09f0427fae31a47e79a2ecbe7d" + integrity sha512-Z66cny0jtDp8QrYnPieSTAY3WTs/qU+4q0+/F1eGXGTvtFH5qyiHmWH9ucdSDbgvlgbon+ul0tBSNGhMJRlq0g== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-ledger@^0.9.26": + version "0.9.26" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.26.tgz#6cd102636c19d76a2e2b18868ab900ce4724fdbc" + integrity sha512-sXECjgK+lIThz9RIKJqHqaMdzuoy8Fr5eUyAAlE/N5QUU2izJ7t55jIQFB09+zaos79Vd5J09KPn5AMx4a2l2A== + dependencies: + "@ledgerhq/devices" "6.27.1" + "@ledgerhq/hw-transport" "6.27.1" + "@ledgerhq/hw-transport-webhid" "6.27.1" + "@solana/wallet-adapter-base" "^0.9.24" + buffer "^6.0.3" + +"@solana/wallet-adapter-mathwallet@^0.9.19": + version "0.9.19" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.9.19.tgz#c1b0bf973dbb8488261302094a7202d8e85dad53" + integrity sha512-9Nk9OdEib6BbJcqV2skBexw2QdT+XfvumqmKili00U6EvPFofAMbi2JdhY6bejeCqLRFHM7x30HBQgysL5GZaQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-neko@^0.2.13": + version "0.2.13" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-neko/-/wallet-adapter-neko-0.2.13.tgz#893c9b7a6e33ba397565065c8662e09a25a7790c" + integrity sha512-eoj2BbxEavgZLczjy9bWQ76uMYH6al9UqYWNY7WoN9UOo1O7WnblmpvJzhy3VlpXZHR926tKq16cgSFyYcvAfA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-nightly@^0.1.17": + version "0.1.17" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-nightly/-/wallet-adapter-nightly-0.1.17.tgz#03daa04b71a1b7f5e95755134d8febe7d3211619" + integrity sha512-QU/H2wwG4PBH8oE8nAaJWKHdpXSuCjp7HkLmn5lhe+DpM/R2z8TbV47Y6WAJjJ6yqTt+S0dVANxBMK1mB9eD6g== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-nufi@^0.1.18": + version "0.1.18" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-nufi/-/wallet-adapter-nufi-0.1.18.tgz#63f14c1afe64b909b24313455ef9feec743da039" + integrity sha512-NtzLszphGL00cZuNMAUIY2ut+qsVwtTWYQFybtzbASBQfhRDOkVyOMzIujo13h5Aj8BNkLQPIBcYzl6HRrsbZg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-onto@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-onto/-/wallet-adapter-onto-0.1.8.tgz#17de483f76ef04084817726b8df0de5ce2017ab7" + integrity sha512-EX7iV50F5Iyqar6hzPMEohiQAJYKgAlMwcf9VfAq1ZZzEqwXSbACFxgQ39lVvIhNc0QUKEu12wDbicFZS91VjA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-particle@^0.1.13": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-particle/-/wallet-adapter-particle-0.1.13.tgz#aa1d8a60a9433deeba2d5f30cfda39aff76d040f" + integrity sha512-T8QtyrVoLwe82H4Yq60rUmOvKLc4sHR1gdfJ36jzzN1Go/vSUk1DxPAsFm/XOU6WCVkfad45TpSN38uEJGNRUA== + dependencies: + "@particle-network/solana-wallet" "^1.3.2" + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-phantom@^0.9.25": + version "0.9.25" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.25.tgz#aed549d31196f651812cf1a3d4692826475a0e1e" + integrity sha512-L6mOFfOzOyX4fpkhB2ArnzFLUn60OBeyymvqZxOATFuoYysE7ySjE9FelBGGESzUd7erlr0z3Ml6x91JfJ6qNw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-react-ui@^0.9.36": + version "0.9.36" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react-ui/-/wallet-adapter-react-ui-0.9.36.tgz#82c79315564fc7c17f72186b784bfb71dd2fd2fd" + integrity sha512-MotBe0KTdh2Dk37OkJ5IHwJjVKqy1paDn5My9sGALRcgA39T8dJ6OjY8dJNe+9bjRWDRDDdGZ8CBLdUa1rWDAg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + "@solana/wallet-adapter-base-ui" "^0.1.3" + "@solana/wallet-adapter-react" "^0.15.36" + +"@solana/wallet-adapter-react@^0.15.36": + version "0.15.36" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.15.36.tgz#97b9e140a91ecc4fbd5c87f61703b1d6358b4c0f" + integrity sha512-v8iERw9LY2EZQFrBZDDuXMVCsq08/IQ25bwAg9GpinsHMEcnGBvIw0xK7NrrW8rRww0TLWN66vYc0AdBC69YiQ== + dependencies: + "@solana-mobile/wallet-adapter-mobile" "^2.0.0" + "@solana/wallet-adapter-base" "^0.9.24" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.0" + +"@solana/wallet-adapter-safepal@^0.5.19": + version "0.5.19" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-safepal/-/wallet-adapter-safepal-0.5.19.tgz#c61411e83bea8e90872be767e73af1e046cb769b" + integrity sha512-S3ivjUXB+yx5OmAm5zK/waMXWi00I4B18SKm+WEpUzJgDifYbAXMHNflt9tpWeFLGuEZdGaknGGt5xIo4BA36g== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-saifu@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-saifu/-/wallet-adapter-saifu-0.1.16.tgz#65c16d1d054f81436a20292e4c9cc5beab8923eb" + integrity sha512-zpeL8OCMkanpEmBo/dTBoZoPjFIOpZyCnSBQGfC8589PgiLvMB+7FQ4q+SUbktrKgAqgsXUaSob0UQA1ugiWfA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-salmon@^0.1.15": + version "0.1.15" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-salmon/-/wallet-adapter-salmon-0.1.15.tgz#62f8656dd9d5ff86fcbc9a659a05ba33adbf9297" + integrity sha512-ssFZ5ABFACV9bXt0Ovi+pwzsDvZMEMLc71OgVZOBqVpHawcRaxFhZ5znbIo7mIGO/JriRZTmDOD5DgmbPg4G1Q== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + salmon-adapter-sdk "^1.1.1" + +"@solana/wallet-adapter-sky@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-sky/-/wallet-adapter-sky-0.1.16.tgz#913acdffb0cdd69d3104f8d29ef8734d98d07553" + integrity sha512-NI+rYryypG+d1s0Pt6qztTgGOFMSihiQNABYzFPtIMw65GsYBhj/ekcmLcDb9Ikkpkk+iG5JaHXRWbQtcJLRhg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-solflare@^0.6.29": + version "0.6.29" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.29.tgz#78a61e4829e5e1fb0c4c219853746e3199a17f10" + integrity sha512-RNB6nR6UBdPyeB69K4mwjx6VGLCNyLYTnDQaxNJvmm3oS6hae650Q0g+c7j5VPxmCz1fa1V3zrl2WBan01qKEA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + "@solana/wallet-standard-chains" "^1.1.0" + "@solflare-wallet/metamask-sdk" "^1.0.2" + "@solflare-wallet/sdk" "^1.3.0" + "@wallet-standard/wallet" "^1.0.1" + +"@solana/wallet-adapter-solong@^0.9.19": + version "0.9.19" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.9.19.tgz#62aa56d789923b2df3c85b70d7510f3040d194a1" + integrity sha512-3ImzBbuzBIRxDyUDijzrgAC3sZQqPMbFF/BwLFPkSJw6L1zKwsCIFilxXO0PDE11e4Fh+NbfLVVn52tayaJxnA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-spot@^0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-spot/-/wallet-adapter-spot-0.1.16.tgz#139852456fd3cfcaaf4336c8589d1e713598f372" + integrity sha512-2Wa/v8iMDAY93RWTXtdMqAd5DvGDak8T35JYghR1cTL3Umxn6kD4gj0MOBOPOr6wOuNwiHf1Bz2hpLtdLY+jnQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-tokenary@^0.1.13": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-tokenary/-/wallet-adapter-tokenary-0.1.13.tgz#84313a399b2487693384d6be9307e7951f17218f" + integrity sha512-QkteryYE5zoObfHtRh7ekXFvk657n2E1UJ6GggPCEgHSN8ow9Km1+8bmCYt0JPS7Llj6EX8zUmnCATaqn9WFBQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-tokenpocket@^0.4.20": + version "0.4.20" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-tokenpocket/-/wallet-adapter-tokenpocket-0.4.20.tgz#080cfad7a1f2aa9532dd84be48066aa176576395" + integrity sha512-KN0/4XHHjpKcci5OZTezwWf/EL2OeCo99/un32dXnNfjaj0qu6GmytvzDp4IEDyyVXvX9EVm/xyU8J2/cGgfhw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-torus@^0.11.29": + version "0.11.29" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.11.29.tgz#acb2609d7db1f1cf30c08068f27ae7f7d82b5fdd" + integrity sha512-Uw1hWs2ys7VtQi3GZ20QrIMz9LNNPmn7pKgbgb0FNtQbAQZ8OrshIhWQRzSISpKX8Cqdm0izwZtmNKHOsqc4lg== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + "@toruslabs/solana-embed" "^0.3.4" + assert "^2.0.0" + crypto-browserify "^3.12.0" + process "^0.11.10" + stream-browserify "^3.0.0" + +"@solana/wallet-adapter-trezor@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-trezor/-/wallet-adapter-trezor-0.1.3.tgz#adb6561cd35525b1ad85316bafd79db60d2fa136" + integrity sha512-WR95uVD12YQnwIvBGuH09bW0i2ZsSaUiaYTkbpr8pbzSM8bOYjf+/Nyp+78b9DHbRemL3R6fbkLPVq08KbU+1g== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + "@trezor/connect-web" "^9.5.2" + buffer "^6.0.3" + +"@solana/wallet-adapter-trust@^0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-trust/-/wallet-adapter-trust-0.1.14.tgz#b0c6b31088c3808fc09afccc16739730a5bfe20f" + integrity sha512-YW+ctyZ6zizeyxHbgqtV3+rIZduqJCiG+QACBHHle/HXSCznDIcptrnso/sisjFNIkiYenA5aXWk5wbcYmqS/g== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-unsafe-burner@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-unsafe-burner/-/wallet-adapter-unsafe-burner-0.1.8.tgz#caea265449172de68c89bb2e950fc85bfa4ba6f0" + integrity sha512-ZLMVL+aG03XNR2kQwgupLzbOXqJaE9+aaiKldhTp8b8FtatUb3rudH8tV22/Nni7wn+k3yqkiKVYLqd4Jp4sNQ== + dependencies: + "@noble/curves" "^1.1.0" + "@solana/wallet-adapter-base" "^0.9.24" + "@solana/wallet-standard-features" "^1.1.0" + "@solana/wallet-standard-util" "^1.1.0" + +"@solana/wallet-adapter-walletconnect@^0.1.17": + version "0.1.17" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-walletconnect/-/wallet-adapter-walletconnect-0.1.17.tgz#f57c6d6e327322cfb3977b13d60d1489fbf35a52" + integrity sha512-p6Jz4RrfEmCHsiDFukMdhDaeZdXDRT5QfRolVlbVbWpCU1Hop0iFMcKTeqvvLAjjDCliuYq6+N5MgKN8G0rjbg== + dependencies: + "@jnwng/walletconnect-solana" "^0.2.0" + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-adapter-wallets@^0.19.33": + version "0.19.33" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.19.33.tgz#26fc2a97251f8db015954b0544dc3eef48de9c5c" + integrity sha512-O/w1fV2eX8gqyx97+/yu8MMmCNKAFOUwEHYe8oHBGmhHXtWvHQY4i3lJ7LnbWs5pxMJIcg0vsCP9xctjtbPlaA== + dependencies: + "@solana/wallet-adapter-alpha" "^0.1.11" + "@solana/wallet-adapter-avana" "^0.1.14" + "@solana/wallet-adapter-bitkeep" "^0.3.21" + "@solana/wallet-adapter-bitpie" "^0.5.19" + "@solana/wallet-adapter-clover" "^0.4.20" + "@solana/wallet-adapter-coin98" "^0.5.21" + "@solana/wallet-adapter-coinbase" "^0.1.20" + "@solana/wallet-adapter-coinhub" "^0.3.19" + "@solana/wallet-adapter-fractal" "^0.1.9" + "@solana/wallet-adapter-huobi" "^0.1.16" + "@solana/wallet-adapter-hyperpay" "^0.1.15" + "@solana/wallet-adapter-keystone" "^0.1.16" + "@solana/wallet-adapter-krystal" "^0.1.13" + "@solana/wallet-adapter-ledger" "^0.9.26" + "@solana/wallet-adapter-mathwallet" "^0.9.19" + "@solana/wallet-adapter-neko" "^0.2.13" + "@solana/wallet-adapter-nightly" "^0.1.17" + "@solana/wallet-adapter-nufi" "^0.1.18" + "@solana/wallet-adapter-onto" "^0.1.8" + "@solana/wallet-adapter-particle" "^0.1.13" + "@solana/wallet-adapter-phantom" "^0.9.25" + "@solana/wallet-adapter-safepal" "^0.5.19" + "@solana/wallet-adapter-saifu" "^0.1.16" + "@solana/wallet-adapter-salmon" "^0.1.15" + "@solana/wallet-adapter-sky" "^0.1.16" + "@solana/wallet-adapter-solflare" "^0.6.29" + "@solana/wallet-adapter-solong" "^0.9.19" + "@solana/wallet-adapter-spot" "^0.1.16" + "@solana/wallet-adapter-tokenary" "^0.1.13" + "@solana/wallet-adapter-tokenpocket" "^0.4.20" + "@solana/wallet-adapter-torus" "^0.11.29" + "@solana/wallet-adapter-trezor" "^0.1.3" + "@solana/wallet-adapter-trust" "^0.1.14" + "@solana/wallet-adapter-unsafe-burner" "^0.1.8" + "@solana/wallet-adapter-walletconnect" "^0.1.17" + "@solana/wallet-adapter-xdefi" "^0.1.8" + +"@solana/wallet-adapter-xdefi@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-xdefi/-/wallet-adapter-xdefi-0.1.8.tgz#33e7ff0a37d792547bf28402fe79aeff8a92e564" + integrity sha512-zWpXs/i8J+ErVTJFA8jIj6EehA3YcyYzpOmjbThITh/pH4tExZuvUZAfWbORHt4hW6qyLEjKqxrI6N0VJttynA== + dependencies: + "@solana/wallet-adapter-base" "^0.9.24" + +"@solana/wallet-standard-chains@^1.1.0", "@solana/wallet-standard-chains@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-chains/-/wallet-standard-chains-1.1.1.tgz#bbab9f3836006e9e4722afc408ca323df9623657" + integrity sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@solana/wallet-standard-core@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-core/-/wallet-standard-core-1.1.2.tgz#86512ae188450d70ff5d1ee0f58b5c29b83226c6" + integrity sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA== + dependencies: + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + "@solana/wallet-standard-util" "^1.1.2" + +"@solana/wallet-standard-features@^1.1.0", "@solana/wallet-standard-features@^1.2.0", "@solana/wallet-standard-features@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.3.0.tgz#c489eca9d0c78f97084b4af6ca8ad8c1ca197de5" + integrity sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg== + dependencies: + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/features" "^1.1.0" + +"@solana/wallet-standard-util@^1.1.0", "@solana/wallet-standard-util@^1.1.1", "@solana/wallet-standard-util@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-util/-/wallet-standard-util-1.1.2.tgz#1e281178c04b52923ea530799c589ed64e5526bc" + integrity sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA== + dependencies: + "@noble/curves" "^1.8.0" + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + +"@solana/wallet-standard-wallet-adapter-base@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-base/-/wallet-standard-wallet-adapter-base-1.1.4.tgz#fc05b153674e29839eee49b30d05106bd42dd789" + integrity sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw== + dependencies: + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-chains" "^1.1.1" + "@solana/wallet-standard-features" "^1.3.0" + "@solana/wallet-standard-util" "^1.1.2" + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/features" "^1.1.0" + "@wallet-standard/wallet" "^1.1.0" + +"@solana/wallet-standard-wallet-adapter-react@^1.1.0", "@solana/wallet-standard-wallet-adapter-react@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-react/-/wallet-standard-wallet-adapter-react-1.1.4.tgz#5f48a68bea19fe570e1741d0e26f98c6d8ad0628" + integrity sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.4" + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + +"@solana/wallet-standard-wallet-adapter@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter/-/wallet-standard-wallet-adapter-1.1.4.tgz#fd4f9d1b61e85daa6d940618854528945cacdfa7" + integrity sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.4" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.4" + +"@solana/wallet-standard@^1.1.2": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard/-/wallet-standard-1.1.4.tgz#afe6d8a6d6ea04acd9bb4a92bef6bb93e08c81f3" + integrity sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw== + dependencies: + "@solana/wallet-standard-core" "^1.1.2" + "@solana/wallet-standard-wallet-adapter" "^1.1.4" + +"@solana/web3.js@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-2.0.0.tgz#192918343982e1964269b3adb2567532c1e12c89" + integrity sha512-x+ZRB2/r5tVK/xw8QRbAfgPcX51G9f2ifEyAQ/J5npOO+6+MPeeCjtr5UxHNDAYs9Ypo0PN+YJATCO4vhzQJGg== + dependencies: + "@solana/accounts" "2.0.0" + "@solana/addresses" "2.0.0" + "@solana/codecs" "2.0.0" + "@solana/errors" "2.0.0" + "@solana/functional" "2.0.0" + "@solana/instructions" "2.0.0" + "@solana/keys" "2.0.0" + "@solana/programs" "2.0.0" + "@solana/rpc" "2.0.0" + "@solana/rpc-parsed-types" "2.0.0" + "@solana/rpc-spec-types" "2.0.0" + "@solana/rpc-subscriptions" "2.0.0" + "@solana/rpc-types" "2.0.0" + "@solana/signers" "2.0.0" + "@solana/sysvars" "2.0.0" + "@solana/transaction-confirmation" "2.0.0" + "@solana/transaction-messages" "2.0.0" + "@solana/transactions" "2.0.0" + +"@solana/web3.js@^1.36.0", "@solana/web3.js@^1.63.1", "@solana/web3.js@^1.69.0", "@solana/web3.js@^1.98.0": + version "1.98.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.0.tgz#21ecfe8198c10831df6f0cfde7f68370d0405917" + integrity sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + +"@solflare-wallet/metamask-sdk@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@solflare-wallet/metamask-sdk/-/metamask-sdk-1.0.3.tgz#3baaa22de2c86515e6ba6025285cd1f5d74b04e5" + integrity sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" + +"@solflare-wallet/sdk@^1.3.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@solflare-wallet/sdk/-/sdk-1.4.2.tgz#630b9a26f7bca255ee4a7088f287ae8c8335e345" + integrity sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ== + dependencies: + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" + +"@solidity-parser/parser@^0.14.1": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@stablelib/aead@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" + integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== + +"@stablelib/binary@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-0.7.2.tgz#1b3392170c8a8741c8b8f843ea294de71aeb2cf7" + integrity sha512-J7iGppeKR112ICTZTAoALcT3yBpTrd2Z/F0wwiOUZPVPTDFTQFWHZZdYzfal9+mY1uMUPRSEnNmDuXRZbtE8Xg== + dependencies: + "@stablelib/int" "^0.5.0" + +"@stablelib/binary@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== + dependencies: + "@stablelib/int" "^1.0.1" + +"@stablelib/blake2s@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@stablelib/blake2s/-/blake2s-0.10.4.tgz#8a708f28a9c78d4a1a9fbcc6ce8bacbda469f302" + integrity sha512-IasdklC7YfXXLmVbnsxqmd66+Ki+Ysbp0BtcrNxAtrGx/HRGjkUZbSTbEa7HxFhBWIstJRcE5ExgY+RCqAiULQ== + dependencies: + "@stablelib/binary" "^0.7.2" + "@stablelib/hash" "^0.5.0" + "@stablelib/wipe" "^0.5.0" + +"@stablelib/blake2xs@0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@stablelib/blake2xs/-/blake2xs-0.10.4.tgz#b3ae9e145cbf924a7f598412b586e4af24d10cb7" + integrity sha512-1N0S4cruso/StV9TmoujPGj3RU0Cy42wlZneBWLWby7m2ssnY57l/CsYQSm03TshOoYss4hqc5kwSy5pmWAdUA== + dependencies: + "@stablelib/blake2s" "^0.10.4" + "@stablelib/hash" "^0.5.0" + "@stablelib/wipe" "^0.5.0" + +"@stablelib/bytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" + integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== + +"@stablelib/chacha20poly1305@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" + integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== + dependencies: + "@stablelib/aead" "^1.0.1" + "@stablelib/binary" "^1.0.1" + "@stablelib/chacha" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/poly1305" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/chacha@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" + integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/constant-time@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== "@stablelib/ed25519@^1.0.2": @@ -4329,6 +6109,13 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" +"@swc/helpers@^0.5.11": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -4453,6 +6240,320 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@toruslabs/base-controllers@^2.8.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@toruslabs/base-controllers/-/base-controllers-2.9.0.tgz#e23f4228b5a90bf94ba9b0b27451f3024bd1acc4" + integrity sha512-rKc+bR4QB/wdbH0CxLZC5e2PUZcIgkr9yY7TMd3oIffDklaYBnsuC5ES2/rgK1aRUDRWz+qWbTwLqsY6PlT37Q== + dependencies: + "@ethereumjs/util" "^8.0.6" + "@toruslabs/broadcast-channel" "^6.2.0" + "@toruslabs/http-helpers" "^3.3.0" + "@toruslabs/openlogin-jrpc" "^4.0.0" + async-mutex "^0.4.0" + bignumber.js "^9.1.1" + bowser "^2.11.0" + eth-rpc-errors "^4.0.3" + json-rpc-random-id "^1.0.1" + lodash "^4.17.21" + loglevel "^1.8.1" + +"@toruslabs/broadcast-channel@^6.2.0": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@toruslabs/broadcast-channel/-/broadcast-channel-6.3.1.tgz#d4b0a08c3a0fa88d42d7f33387ce9be928c2d4b2" + integrity sha512-BEtJQ+9bMfFoGuCsp5NmxyY+C980Ho+3BZIKSiYwRtl5qymJ+jMX5lsoCppoQblcb34dP6FwEjeFw80Y9QC/rw== + dependencies: + "@babel/runtime" "^7.21.0" + "@toruslabs/eccrypto" "^2.1.1" + "@toruslabs/metadata-helpers" "^3.2.0" + bowser "^2.11.0" + loglevel "^1.8.1" + oblivious-set "1.1.1" + socket.io-client "^4.6.1" + unload "^2.4.1" + +"@toruslabs/eccrypto@^2.1.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-2.2.1.tgz#19012cc4e774e8c3df7ceebb2c1a07ecfd784917" + integrity sha512-7sviL0wLYsfA5ogEAOIdb0tu/QAOFXfHc9B8ONYtF04x4Mg3Nr89LL35FhjaEm055q8Ru7cUQhEFSiqJqm9GCw== + dependencies: + elliptic "^6.5.4" + +"@toruslabs/http-helpers@^3.3.0", "@toruslabs/http-helpers@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-3.4.0.tgz#6d1da9e6aba094af62e73cf639a69844c82202f3" + integrity sha512-CoeJSL32mpp0gmYjxv48odu6pfjHk/rbJHDwCtYPcMHAl+qUQ/DTpVOOn9U0fGkD+fYZrQmZbRkXFgLhiT0ajQ== + dependencies: + lodash.merge "^4.6.2" + loglevel "^1.8.1" + +"@toruslabs/metadata-helpers@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@toruslabs/metadata-helpers/-/metadata-helpers-3.2.0.tgz#b297933ac37481a9c86a125ac6a4e5c2f109fb78" + integrity sha512-2bCc6PNKd9y+aWfZQ1FXd47QmfyT4NmmqPGfsqk+sQS2o+MlxIyLuh9uh7deMgXo4b4qBDX+RQGbIKM1zVk56w== + dependencies: + "@toruslabs/eccrypto" "^2.1.1" + "@toruslabs/http-helpers" "^3.4.0" + elliptic "^6.5.4" + ethereum-cryptography "^2.0.0" + json-stable-stringify "^1.0.2" + +"@toruslabs/openlogin-jrpc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-3.2.0.tgz#fff051d05b6c01b6329e2da9b134fae99305d1e0" + integrity sha512-G+K0EHyVUaAEyeD4xGsnAZRpn/ner8lQ2HC2+pGKg6oGmzKI2wGMDcw2KMH6+HKlfBGVJ5/VR9AQfC/tZlLDmQ== + dependencies: + "@toruslabs/openlogin-utils" "^3.0.0" + end-of-stream "^1.4.4" + eth-rpc-errors "^4.0.3" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^3.6.2" + +"@toruslabs/openlogin-jrpc@^4.0.0": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-4.7.2.tgz#e04dd6945da92d790f713a58aaa1657c57b330c8" + integrity sha512-9Eb0cPc0lPuS6v2YkQlgzfbRnZ6fLez9Ike5wznoHSFA2/JVu1onwuI56EV1HwswdDrOWPPQEyzI1j9NriZ0ew== + dependencies: + "@metamask/rpc-errors" "^5.1.1" + "@toruslabs/openlogin-utils" "^4.7.0" + end-of-stream "^1.4.4" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^4.4.2" + +"@toruslabs/openlogin-utils@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-3.0.0.tgz#2c264fa9a2787a1d2b8c703a38740c7c27967fa7" + integrity sha512-T5t29/AIFqXc84x4OoAkZWjd0uoP2Lk6iaFndnIIMzCPu+BwwV0spX/jd/3YYNjZ8Po8D+faEnwAhiqemYeK2w== + dependencies: + base64url "^3.0.1" + keccak "^3.0.3" + randombytes "^2.1.0" + +"@toruslabs/openlogin-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-4.7.0.tgz#741d6ba1c0754b59a182b1c6dd8d0263695ed980" + integrity sha512-w6XkHs4WKuufsf/zzteBzs4EJuOknrUmJ+iv5FZ8HzIpMQeL/984CP8HYaFSEYkbGCP4ydAnhY4Uh0QAhpDbPg== + dependencies: + base64url "^3.0.1" + +"@toruslabs/solana-embed@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@toruslabs/solana-embed/-/solana-embed-0.3.4.tgz#547727e6d202f734d1e97a6658bdb3cf54599938" + integrity sha512-yj+aBJoBAneap7Jlu9/OOp7irWNuC5CqAhyhVcmb0IjWrCUFnioLdL0U7UfGaqVm/5O0leJh7/Z5Ll+3toWJBg== + dependencies: + "@solana/web3.js" "^1.63.1" + "@toruslabs/base-controllers" "^2.8.0" + "@toruslabs/http-helpers" "^3.3.0" + "@toruslabs/openlogin-jrpc" "^3.2.0" + eth-rpc-errors "^4.0.3" + fast-deep-equal "^3.1.3" + is-stream "^2.0.1" + lodash-es "^4.17.21" + loglevel "^1.8.1" + pump "^3.0.0" + +"@trezor/analytics@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@trezor/analytics/-/analytics-1.3.3.tgz#d11559eaa5d9dd61e48efb207fc65b6299088bd5" + integrity sha512-tbSPXDr9hJR3Id8L/vRIT5bsBkIrSvlMZvpJujMQ2NiV9QJ76ksQIimW4xJS76PXfuP2jVRzAudHL6/+RVuZzw== + dependencies: + "@trezor/env-utils" "1.3.2" + "@trezor/utils" "9.3.3" + +"@trezor/blockchain-link-types@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-types/-/blockchain-link-types-1.3.3.tgz#28a3151a3d48c70564e6e1fafba6dd16569387b4" + integrity sha512-9if1yNBYWkqHWW+QrwQaHAom78mcnxR2FwL8PZMXpJnlcY4vV/H7Z0UkvzH6swHAmbAtKjqfqPBMA7P5MpGY4Q== + dependencies: + "@solana/kit" "^2.0.0" + "@trezor/type-utils" "1.1.5" + "@trezor/utxo-lib" "2.3.3" + +"@trezor/blockchain-link-utils@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.3.3.tgz#56028ce1cafdb1b55ec5321a44aaee5d591ab15d" + integrity sha512-E1DeB6VmtiUrY54YaC8sshWKziXBOtr/kUNLMhfNaybyu4CTGnYR/7Nvmp0c88U4zFw1YY7RP4q3kWzNbQ3haw== + dependencies: + "@mobily/ts-belt" "^3.13.1" + "@trezor/env-utils" "1.3.2" + "@trezor/utils" "9.3.3" + +"@trezor/blockchain-link@2.4.3": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-2.4.3.tgz#3fc6d1c9d13d749d46a0dbafd60696a3184c93d1" + integrity sha512-WoU0Oh30fFo9NgRhOZ+iTX0DuzDguxKcJbGDxAKOjsPBjyUYTNbw314bodOJ/iU9EXq3VDDINNH2RdfynLfk/A== + dependencies: + "@everstake/wallet-sdk-solana" "2.0.9" + "@solana-program/token" "^0.5.1" + "@solana-program/token-2022" "^0.4.0" + "@solana/kit" "^2.0.0" + "@trezor/blockchain-link-types" "1.3.3" + "@trezor/blockchain-link-utils" "1.3.3" + "@trezor/env-utils" "1.3.2" + "@trezor/utils" "9.3.3" + "@trezor/utxo-lib" "2.3.3" + "@trezor/websocket-client" "1.1.3" + "@types/web" "^0.0.197" + events "^3.3.0" + ripple-lib "^1.10.1" + socks-proxy-agent "8.0.5" + +"@trezor/connect-analytics@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@trezor/connect-analytics/-/connect-analytics-1.3.2.tgz#5c4af5de02384a550d12d11d14bb3c31c7b26a8e" + integrity sha512-1a1fBKiNitF6i0fnyoVvE+1NDJanRbk1osl9ZDviip2Ew2erBc32Gqm10ssysRBUjemrF0NHmHEYgSLHqyW0Iw== + dependencies: + "@trezor/analytics" "1.3.3" + +"@trezor/connect-common@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@trezor/connect-common/-/connect-common-0.3.3.tgz#da32f9f7fa2cd0a0bac0b0c4c0b1d0dcb844f7f7" + integrity sha512-Eh8QoSM8qorDQpFk4AVnTlO7teK+8hRgW5XMrK+4rZL0F4Ft4AXMuMqdVK0U+ZbNhT1io2WzdXlzNhr9uFdXGw== + dependencies: + "@trezor/env-utils" "1.3.2" + "@trezor/utils" "9.3.3" + +"@trezor/connect-web@^9.5.2": + version "9.5.3" + resolved "https://registry.yarnpkg.com/@trezor/connect-web/-/connect-web-9.5.3.tgz#8bed72b148fa05b9c8d53a4525f2694c133aa673" + integrity sha512-Vttf5N8hpMSUohqMR0OjAs7ZlaekWM47kymRfhH2CdD6pHqoF1fGSfZE3cId+Ti+hIeEmE+yHKYbx5ifiuBxDw== + dependencies: + "@trezor/connect" "9.5.3" + "@trezor/connect-common" "0.3.3" + "@trezor/utils" "9.3.3" + +"@trezor/connect@9.5.3": + version "9.5.3" + resolved "https://registry.yarnpkg.com/@trezor/connect/-/connect-9.5.3.tgz#f9a1cc38b658afeef7c234eb755e85d220f8c398" + integrity sha512-no/t03l2qE6opyVj5saXR31tx8NtUvO5qPJIkO1mDR8jy4ZIvtRcwVuAnRe35xqwqfP+FaJIAE+a7c9JI0yxKw== + dependencies: + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/tx" "^5.4.0" + "@fivebinaries/coin-selection" "3.0.0" + "@mobily/ts-belt" "^3.13.1" + "@noble/hashes" "^1.6.1" + "@scure/bip39" "^1.5.1" + "@solana-program/compute-budget" "^0.7.0" + "@solana-program/system" "^0.7.0" + "@solana-program/token" "^0.5.1" + "@solana-program/token-2022" "^0.4.0" + "@solana/kit" "^2.0.0" + "@trezor/blockchain-link" "2.4.3" + "@trezor/blockchain-link-types" "1.3.3" + "@trezor/blockchain-link-utils" "1.3.3" + "@trezor/connect-analytics" "1.3.2" + "@trezor/connect-common" "0.3.3" + "@trezor/crypto-utils" "1.1.2" + "@trezor/device-utils" "1.0.2" + "@trezor/protobuf" "1.3.3" + "@trezor/protocol" "1.2.5" + "@trezor/schema-utils" "1.3.2" + "@trezor/transport" "1.4.3" + "@trezor/utils" "9.3.3" + "@trezor/utxo-lib" "2.3.3" + blakejs "^1.2.1" + bs58 "^6.0.0" + bs58check "^4.0.0" + cross-fetch "^4.0.0" + +"@trezor/crypto-utils@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@trezor/crypto-utils/-/crypto-utils-1.1.2.tgz#737fe81d3a374fe71f33e5a8c4a63a8076663230" + integrity sha512-fRBXpxP+0nijUJBTbM6s/vCFN/TmNS44tdYg1tQsF4dvzmQ/a8cvhTXZF1zlnS3iKT5oESzveXvXT7NrCtrpxg== + +"@trezor/device-utils@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@trezor/device-utils/-/device-utils-1.0.2.tgz#68dfa8ccb59defe59a44bd96bec7b8e997ca34c4" + integrity sha512-NeY0m81s5r3RhhCrbbozpnoa7nHdsG6ND35aG0nOzQIV0czM32S8htWiOEQioQjJT5a9NQqZ4w3D1097VlYB2A== + +"@trezor/env-utils@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@trezor/env-utils/-/env-utils-1.3.2.tgz#b7f70e4164981740e91f2413be6b550e68286e97" + integrity sha512-4X7pAfjakNEJUqlPJDew5sP8qyXh0lCcRQpsi9yK/u77sQiXNS3hr5h+fH/gWH20ySDSN7kMruYLdyJol8beBw== + dependencies: + ua-parser-js "^1.0.37" + +"@trezor/protobuf@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@trezor/protobuf/-/protobuf-1.3.3.tgz#cf4c9ca8559cb33e6c18e99645258151018d9051" + integrity sha512-V0wScF+RwuMzVeCTNQf9rf5uEYDOydXrD4gUJMPgxrQxXQY+YoEChJZqvCkNIe4aGcau3wspTjAf8blfA/az5w== + dependencies: + "@trezor/schema-utils" "1.3.2" + long "5.2.5" + protobufjs "7.4.0" + +"@trezor/protocol@1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@trezor/protocol/-/protocol-1.2.5.tgz#73ae8aa291d3fbf75f6ea7443e5dbd9d213905b2" + integrity sha512-UYmyEyUSpdNwnwmKGf4NCPdHkWb5HwNCasMC/9X48F8uMJlIgnaFjnHjIMGXAn1rC2ofymA10ABiztp/1eQHNg== + +"@trezor/schema-utils@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@trezor/schema-utils/-/schema-utils-1.3.2.tgz#ad96863670b7cd512032de5c06401a44db06f3f6" + integrity sha512-S9CoIoF890da/IP6DeOfNgk6oJtRILAbgqd3ps08k8CHzcSvUoKFEwKPoGRqnAm6LQbWO4WflqdYMIw3ZpzjOw== + dependencies: + "@sinclair/typebox" "^0.33.7" + ts-mixer "^6.0.3" + +"@trezor/transport@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@trezor/transport/-/transport-1.4.3.tgz#e6b05dd8ed30b4434f56ca67f80a2a49690779cd" + integrity sha512-WRUPiqu3rweTdX9As+7fGN6EU4Ym4wvrwvy+mjnSzC02855zbEANw2rCwAWEwcd0DnllukoYBEVkHnUTHG2OKA== + dependencies: + "@trezor/protobuf" "1.3.3" + "@trezor/protocol" "1.2.5" + "@trezor/utils" "9.3.3" + cross-fetch "^4.0.0" + usb "^2.14.0" + +"@trezor/type-utils@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@trezor/type-utils/-/type-utils-1.1.5.tgz#ca6397c71e5a146a5cbe60b99932d6ceb97f54c1" + integrity sha512-gmN1dHcgquBIbg81FXsIrQ+ucj144X9odYkxw3ljRjlryHY5m2iWn9QmUqbRLzXQ2QUrQcg6knUyd0yZ39uW7A== + +"@trezor/utils@9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.3.3.tgz#bae2a4939c9c64e8251df06de7709f4b08afb6b3" + integrity sha512-PCgButdIIl+7XaMp2jyvOOR167YLRWTqPHeODwHZSMjYQOh0RHWC0Thyb3Q/tpWw5/SHle3lk8+P/ZZrnmITDw== + dependencies: + bignumber.js "^9.1.2" + +"@trezor/utxo-lib@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-2.3.3.tgz#ff05ec286f527eda2ef9e371bfa2cd6bb2a2a8b2" + integrity sha512-4gVpeF1STJpNVCTUWgR8sNe765fiKXY52c+pjNBHAf9X8RC33uEH88vqx58plolHTjuvCsHRigPk2nx+iIMARA== + dependencies: + "@trezor/utils" "9.3.3" + bchaddrjs "^0.5.2" + bech32 "^2.0.0" + bip66 "^2.0.0" + bitcoin-ops "^1.4.1" + blake-hash "^2.0.0" + blakejs "^1.2.1" + bn.js "^5.2.1" + bs58 "^6.0.0" + bs58check "^4.0.0" + create-hmac "^1.1.7" + int64-buffer "^1.1.0" + pushdata-bitcoin "^1.0.1" + tiny-secp256k1 "^1.1.6" + typeforce "^1.18.0" + varuint-bitcoin "2.0.0" + wif "^5.0.0" + +"@trezor/websocket-client@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@trezor/websocket-client/-/websocket-client-1.1.3.tgz#f4da11f243384834e0cb4924ee6b924e88b6ace1" + integrity sha512-mOK6i6mM5St8sbhbnNXO9BfgIqYj1Bm28KyGE6GoD8DzdFgiSkWidxKiej959hHrDRhIgAomEpIr5BlMhuPGQg== + dependencies: + "@trezor/utils" "9.3.3" + ws "^8.18.0" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -4549,6 +6650,13 @@ dependencies: "@types/node" "*" +"@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + "@types/country-data@^0.0.0": version "0.0.0" resolved "https://registry.yarnpkg.com/@types/country-data/-/country-data-0.0.0.tgz#6f5563cae3d148780c5b6539803a29bd93f8f1a1" @@ -4561,6 +6669,13 @@ dependencies: "@types/ms" "*" +"@types/debug@^4.1.7": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/elliptic@^6.4.9": version "6.4.14" resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.14.tgz#7bbaad60567a588c1f08b10893453e6b9b4de48e" @@ -4701,6 +6816,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== +"@types/lodash@^4.14.136": + version "4.17.16" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.16.tgz#94ae78fab4a38d73086e962d0b65c30d816bfb0a" + integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== + "@types/lodash@^4.14.170": version "4.14.191" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" @@ -4731,12 +6851,19 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== +"@types/node@>=13.7.0": + version "22.13.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.17.tgz#9ca6a81a0180cdcfd3719b9cf6c09186756e1754" + integrity sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g== + dependencies: + undici-types "~6.20.0" + "@types/node@^10.12.18", "@types/node@^10.3.2": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^12.11.7", "@types/node@^12.12.6", "@types/node@^12.6.1": +"@types/node@^12.11.7", "@types/node@^12.12.54", "@types/node@^12.12.6", "@types/node@^12.6.1": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== @@ -4936,11 +7063,26 @@ resolved "https://registry.yarnpkg.com/@types/utf8/-/utf8-2.1.6.tgz#430cabb71a42d0a3613cce5621324fe4f5a25753" integrity sha512-pRs2gYF5yoKYrgSaira0DJqVg2tFuF+Qjp838xS7K+mJyY2jJzjsrl6y17GbIa4uMRogMbxs+ghNCvKg6XyNrA== +"@types/uuid@8.3.4", "@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/w3c-web-usb@^1.0.6": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz#cf89cccd2d93b6245e784c19afe0a9f5038d4528" + integrity sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ== + "@types/warning@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== +"@types/web@^0.0.197": + version "0.0.197" + resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.197.tgz#624cf02b57e79ec9d90b61b24b95fe1732713e45" + integrity sha512-V4sOroWDADFx9dLodWpKm298NOJ1VJ6zoDVgaP+WBb/utWxqQ6gnMzd9lvVDAr/F3ibiKaxH9i45eS0gQPSTaQ== + "@types/webpack-env@^1.17.0": version "1.17.0" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.17.0.tgz#f99ce359f1bfd87da90cc4a57cab0a18f34a48d0" @@ -4967,6 +7109,20 @@ anymatch "^3.0.0" source-map "^0.6.0" +"@types/ws@^7.2.0", "@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -5097,6 +7253,62 @@ version "1.0.0" resolved "git://github.com/umpirsky/country-list#05fda51cd97b3294e8175ffed06104c44b3c71d7" +"@wallet-standard/app@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/app/-/app-1.1.0.tgz#2ca32e4675536224ebe55a00ad533b7923d7380a" + integrity sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/base@^1.0.1", "@wallet-standard/base@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.1.0.tgz#214093c0597a1e724ee6dbacd84191dfec62bb33" + integrity sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ== + +"@wallet-standard/core@^1.0.3": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/core/-/core-1.1.0.tgz#06a2193afe9cda41e626a8e990996e568138da91" + integrity sha512-v2W5q/NlX1qkn2q/JOXQT//pOAdrhz7+nOcO2uiH9+a0uvreL+sdWWqkhFmMcX+HEBjaibdOQMUoIfDhOGX4XA== + dependencies: + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/errors" "^0.1.0" + "@wallet-standard/features" "^1.1.0" + "@wallet-standard/wallet" "^1.1.0" + +"@wallet-standard/errors@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/errors/-/errors-0.1.0.tgz#fb8ae75b365eb5d3c167ec6b88d3c9cb3039b928" + integrity sha512-ag0eq5ixy7rz8M5YUWGi/EoIJ69KJ+KILFNunoufgmXVkiISC7+NIZXJYTJrapni4f9twE1hfT+8+IV2CYCvmg== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@wallet-standard/features@^1.0.3", "@wallet-standard/features@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.1.0.tgz#f256d7b18940c8d134f66164330db358a8f5200e" + integrity sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/wallet@^1.0.1", "@wallet-standard/wallet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/wallet/-/wallet-1.1.0.tgz#a1e46a3f1b2d06a0206058562169b1f0e9652d0f" + integrity sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@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" + integrity sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A== + dependencies: + "@walletconnect/safe-json" "1.0.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/window-getters" "1.0.0" + "@walletconnect/window-metadata" "1.0.0" + detect-browser "5.2.0" + "@walletconnect/core@2.10.0": version "2.10.0" resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.10.0.tgz#b659de4dfb374becd938964abd4f2150d410e617" @@ -5119,6 +7331,29 @@ lodash.isequal "4.5.0" uint8arrays "^3.1.0" +"@walletconnect/core@2.19.2": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.19.2.tgz#4bf3918dd8041843a1b796e2c4e1f101363d72a4" + integrity sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA== + dependencies: + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/jsonrpc-ws-connection" "1.0.16" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.1.0" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.19.2" + "@walletconnect/utils" "2.19.2" + "@walletconnect/window-getters" "1.0.1" + es-toolkit "1.33.0" + events "3.3.0" + uint8arrays "3.1.0" + "@walletconnect/environment@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" @@ -5141,7 +7376,7 @@ "@walletconnect/utils" "2.10.0" events "^3.3.0" -"@walletconnect/events@^1.0.1": +"@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== @@ -5158,6 +7393,15 @@ "@walletconnect/time" "^1.0.2" tslib "1.14.1" +"@walletconnect/heartbeat@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz#e8dc5179db7769950c6f9cf59b23516d9b95227d" + integrity sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + events "^3.3.0" + "@walletconnect/jsonrpc-http-connection@^1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" @@ -5177,6 +7421,15 @@ "@walletconnect/safe-json" "^1.0.2" tslib "1.14.1" +"@walletconnect/jsonrpc-provider@1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + "@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" @@ -5185,6 +7438,14 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" +"@walletconnect/jsonrpc-types@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" + "@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" @@ -5205,6 +7466,25 @@ tslib "1.14.1" ws "^7.5.1" +"@walletconnect/jsonrpc-ws-connection@1.0.16": + version "1.0.16" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz#666bb13fbf32a2d4f7912d5b4d0bdef26a1d057b" + integrity sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + ws "^7.5.1" + +"@walletconnect/keyvaluestorage@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" + integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== + dependencies: + "@walletconnect/safe-json" "^1.0.1" + idb-keyval "^6.2.1" + unstorage "^1.9.0" + "@walletconnect/keyvaluestorage@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8" @@ -5213,6 +7493,14 @@ safe-json-utils "^1.1.1" tslib "1.14.1" +"@walletconnect/logger@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" + integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== + dependencies: + "@walletconnect/safe-json" "^1.0.2" + pino "7.11.0" + "@walletconnect/logger@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" @@ -5221,6 +7509,11 @@ pino "7.11.0" tslib "1.14.1" +"@walletconnect/mobile-registry@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" + integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== + "@walletconnect/modal-core@2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" @@ -5246,6 +7539,25 @@ "@walletconnect/modal-core" "2.6.2" "@walletconnect/modal-ui" "2.6.2" +"@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== + dependencies: + "@walletconnect/browser-utils" "^1.8.0" + "@walletconnect/mobile-registry" "^1.4.0" + "@walletconnect/types" "^1.8.0" + copy-to-clipboard "^3.3.1" + preact "10.4.1" + qrcode "1.4.4" + +"@walletconnect/relay-api@1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.11.tgz#80ab7ef2e83c6c173be1a59756f95e515fb63224" + integrity sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/relay-api@^1.0.9": version "1.0.9" resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" @@ -5254,6 +7566,17 @@ "@walletconnect/jsonrpc-types" "^1.0.2" tslib "1.14.1" +"@walletconnect/relay-auth@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz#c3c5f54abd44a5138ea7d4fe77970597ba66c077" + integrity sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ== + dependencies: + "@noble/curves" "1.8.0" + "@noble/hashes" "1.7.0" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + uint8arrays "^3.0.0" + "@walletconnect/relay-auth@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" @@ -5266,7 +7589,12 @@ tslib "1.14.1" uint8arrays "^3.0.0" -"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": +"@walletconnect/safe-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" + integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== + +"@walletconnect/safe-json@1.0.2", "@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== @@ -5288,7 +7616,22 @@ "@walletconnect/utils" "2.10.0" events "^3.3.0" -"@walletconnect/time@^1.0.2": +"@walletconnect/sign-client@^2.7.2": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.19.2.tgz#6b728fd8b1ebf8f47b231bedf56b725de660633d" + integrity sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg== + dependencies: + "@walletconnect/core" "2.19.2" + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "2.1.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.19.2" + "@walletconnect/utils" "2.19.2" + events "3.3.0" + +"@walletconnect/time@1.0.2", "@walletconnect/time@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== @@ -5307,6 +7650,23 @@ "@walletconnect/logger" "^2.0.1" events "^3.3.0" +"@walletconnect/types@2.19.2": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.19.2.tgz#3518cffdd74a7d07a110c9da5da939c1b185e837" + integrity sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g== + dependencies: + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + events "3.3.0" + +"@walletconnect/types@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.8.0.tgz#3f5e85b2d6b149337f727ab8a71b8471d8d9a195" + integrity sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg== + "@walletconnect/universal-provider@2.10.0": version "2.10.0" resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.10.0.tgz#565d6478dcb5cc66955e5f03d6a00f51c9bcac14" @@ -5342,14 +7702,49 @@ query-string "7.1.3" uint8arrays "^3.1.0" -"@walletconnect/window-getters@^1.0.1": +"@walletconnect/utils@2.19.2", "@walletconnect/utils@^2.4.5": + version "2.19.2" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.19.2.tgz#90259b69367e30ccd13cf8252547a6850ca5fb2e" + integrity sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA== + dependencies: + "@noble/ciphers" "1.2.1" + "@noble/curves" "1.8.1" + "@noble/hashes" "1.7.1" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/relay-api" "1.0.11" + "@walletconnect/relay-auth" "1.1.0" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.19.2" + "@walletconnect/window-getters" "1.0.1" + "@walletconnect/window-metadata" "1.0.1" + bs58 "6.0.0" + detect-browser "5.3.0" + query-string "7.1.3" + uint8arrays "3.1.0" + viem "2.23.2" + +"@walletconnect/window-getters@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" + integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== + +"@walletconnect/window-getters@1.0.1", "@walletconnect/window-getters@^1.0.0", "@walletconnect/window-getters@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== dependencies: tslib "1.14.1" -"@walletconnect/window-metadata@^1.0.1": +"@walletconnect/window-metadata@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" + integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== + dependencies: + "@walletconnect/window-getters" "^1.0.0" + +"@walletconnect/window-metadata@1.0.1", "@walletconnect/window-metadata@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== @@ -5572,11 +7967,31 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^2.0.3, abab@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abitype@1.0.8, abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -5653,6 +8068,18 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + +agentkeepalive@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5798,7 +8225,7 @@ anymatch@^3.0.0, anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@~3.1.2: +anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -5952,6 +8379,15 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -5982,6 +8418,17 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -6019,6 +8466,13 @@ async-mutex@^0.2.6: dependencies: tslib "^2.0.0" +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + async@^2.6.2: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" @@ -6321,11 +8775,23 @@ base-x@^3.0.2, base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" +base-x@^3.0.9: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + base-x@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== +base-x@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.1.tgz#16bf35254be1df8aca15e36b7c1dda74b2aa6b03" + integrity sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg== + base58-js@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/base58-js/-/base58-js-1.0.4.tgz#abf0357edac3d3994cd7ee51df79c031ce3aca3f" @@ -6336,6 +8802,11 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -6354,6 +8825,16 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +bchaddrjs@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0" + integrity sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ== + dependencies: + bs58check "2.1.2" + buffer "^6.0.3" + cashaddrjs "0.4.4" + stream-browserify "^3.0.0" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -6381,11 +8862,21 @@ bfj@^7.0.2: hoopy "^0.1.4" tryer "^1.0.1" +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + big-integer@^1.6.44: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== +big-integer@^1.6.48: + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -6396,6 +8887,13 @@ bigi@^1.1.0: resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825" integrity sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw== +bigint-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" + integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== + dependencies: + bindings "^1.3.0" + bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" @@ -6406,7 +8904,7 @@ bignumber.js@^7.2.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== -bignumber.js@^9.1.2: +bignumber.js@^9.1.1, bignumber.js@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== @@ -6470,6 +8968,11 @@ bip39@3.0.2: pbkdf2 "^3.0.9" randombytes "^2.0.1" +bip66@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-2.0.0.tgz#96b5cca18ad10a009f7c8ea4eb24079e37ec9c79" + integrity sha512-kBG+hSpgvZBrkIm9dt5T1Hd/7xGCPEX2npoxAWZfsK1FvjgaxySEh2WizjyIstWXriKo9K9uJ4u0OnsyLDUPXQ== + bitcoin-address-validation@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/bitcoin-address-validation/-/bitcoin-address-validation-2.2.1.tgz#049b5bc54687e4a28a5b7f599968986c5a9f98cb" @@ -6479,6 +8982,11 @@ bitcoin-address-validation@^2.2.1: bech32 "^2.0.0" sha256-uint8array "^0.10.3" +bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz#e45de620398e22fd4ca6023de43974ff42240278" + integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow== + bitcoinjs-lib@^6.1.5: version "6.1.5" resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz#3b03509ae7ddd80a440f10fc38c4a97f0a028d8c" @@ -6499,7 +9007,16 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -blakejs@^1.1.0: +blake-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/blake-hash/-/blake-hash-2.0.0.tgz#af184dce641951126d05b7d1c3de3224f538d66e" + integrity sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w== + dependencies: + node-addon-api "^3.0.0" + node-gyp-build "^4.2.2" + readable-stream "^3.6.0" + +blakejs@^1.1.0, blakejs@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== @@ -6553,7 +9070,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -6611,6 +9128,20 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +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== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -6642,7 +9173,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== @@ -6669,7 +9200,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: +browserify-cipher@^1.0.0, browserify-cipher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== @@ -6696,6 +9227,15 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: bn.js "^5.0.0" randombytes "^2.0.1" +browserify-rsa@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" + integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== + dependencies: + bn.js "^5.2.1" + randombytes "^2.1.0" + safe-buffer "^5.2.1" + browserify-sign@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" @@ -6711,6 +9251,22 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +browserify-sign@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== + dependencies: + bn.js "^5.2.1" + browserify-rsa "^4.1.0" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.5" + hash-base "~3.0" + inherits "^2.0.4" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" @@ -6738,7 +9294,14 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4 node-releases "^2.0.5" update-browserslist-db "^1.0.4" -bs58@^4.0.0: +bs58@6.0.0, bs58@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" + integrity sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw== + dependencies: + base-x "^5.0.0" + +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== @@ -6752,7 +9315,7 @@ bs58@^5.0.0: dependencies: base-x "^4.0.0" -bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: +bs58check@2.1.2, bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -6769,6 +9332,14 @@ bs58check@^3.0.1: "@noble/hashes" "^1.2.0" bs58 "^5.0.0" +bs58check@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-4.0.0.tgz#46cda52a5713b7542dcb78ec2efdf78f5bf1d23c" + integrity sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g== + dependencies: + "@noble/hashes" "^1.2.0" + bs58 "^6.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -6804,7 +9375,7 @@ buffer-fill@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== -buffer-from@^1.0.0: +buffer-from@^1.0.0, buffer-from@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== @@ -6814,6 +9385,11 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer-layout@^1.2.0, buffer-layout@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" + integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== + buffer-reverse@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" @@ -6829,6 +9405,14 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer@^4.3.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -6838,7 +9422,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.1.0, buffer@^5.2.1, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -6846,14 +9430,6 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bufferutil@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" @@ -6982,6 +9558,14 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -6990,6 +9574,24 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -7027,7 +9629,7 @@ camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0, camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -7064,6 +9666,18 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +cashaddrjs@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.4.4.tgz#169f1ae620d325db77700273d972282adeeee331" + integrity sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA== + dependencies: + big-integer "1.6.36" + +cbor-sync@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cbor-sync/-/cbor-sync-1.0.4.tgz#5a11a1ab75c2a14d1af1b237fd84aa8c1593662f" + integrity sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA== + cbor@^4.1.5: version "4.3.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-4.3.0.tgz#0217c1cadd067d9112f44336dca07e72020bb804" @@ -7112,6 +9726,11 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -7166,6 +9785,13 @@ chokidar@^3.4.1, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -7432,7 +10058,17 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.20.0, commander@^2.8.1: +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + +commander@^2.20.0, commander@^2.20.3, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -7579,6 +10215,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -7618,6 +10259,13 @@ copy-to-clipboard@3.3.1: dependencies: toggle-selection "^1.0.6" +copy-to-clipboard@^3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.23.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" @@ -7718,7 +10366,19 @@ country-data@^0.0.31: currency-symbol-map "~2" underscore ">1.4.4" -create-ecdh@^4.0.0: +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-ecdh@^4.0.0, create-ecdh@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== @@ -7769,6 +10429,20 @@ cross-fetch@^3.0.6, cross-fetch@^3.1.4: dependencies: node-fetch "2.6.7" +cross-fetch@^3.1.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + +cross-fetch@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" + integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== + dependencies: + node-fetch "^2.7.0" + cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -7789,6 +10463,13 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +crossws@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.4.tgz#06164c6495ea99152ea7557c99310b52d9be9b29" + integrity sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw== + dependencies: + uncrypto "^0.1.3" + crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -7806,6 +10487,24 @@ crypto-browserify@3.12.0, crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-browserify@^3.12.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" + integrity sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ== + dependencies: + browserify-cipher "^1.0.1" + browserify-sign "^4.2.3" + create-ecdh "^4.0.4" + create-hash "^1.2.0" + create-hmac "^1.1.7" + diffie-hellman "^5.0.3" + hash-base "~3.0.4" + inherits "^2.0.4" + pbkdf2 "^3.1.2" + public-encrypt "^4.0.3" + randombytes "^2.1.0" + randomfill "^1.0.4" + crypto-js@^3.1.9-1: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" @@ -8201,11 +10900,23 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@~4.3.1, debug@~4.3.2: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decimal.js@^10.2.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" + integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== + decimal.js@^10.2.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" @@ -8340,6 +11051,15 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -8348,6 +11068,15 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -8370,6 +11099,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -8383,6 +11117,11 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8411,11 +11150,21 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destr@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-browser@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" + integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA== + detect-browser@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" @@ -8469,7 +11218,7 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diffie-hellman@^5.0.0: +diffie-hellman@^5.0.0, diffie-hellman@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== @@ -8634,6 +11383,23 @@ dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== +draggabilly@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" + integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== + dependencies: + get-size "^3.0.0" + unidragger "^3.0.0" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" @@ -8730,6 +11496,19 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.2, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@^6.5.5: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" @@ -8770,13 +11549,29 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +engine.io-client@~6.6.1: + version "6.6.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.6.3.tgz#815393fa24f30b8e6afa8f77ccca2f28146be6de" + integrity sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + xmlhttprequest-ssl "~2.1.1" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + enhanced-resolve@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" @@ -8923,6 +11718,23 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -8948,6 +11760,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-toolkit@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.33.0.tgz#bcc9d92ef2e1ed4618c00dd30dfda9faddf4a0b7" + integrity sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg== + es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.62" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" @@ -8966,6 +11783,18 @@ es6-iterator@2.0.3, es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.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" @@ -9443,7 +12272,7 @@ eth-rpc-errors@^3.0.0: dependencies: fast-safe-stringify "^2.0.6" -eth-rpc-errors@^4.0.2: +eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== @@ -9493,6 +12322,16 @@ ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" @@ -9658,6 +12497,16 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +ev-emitter@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" + integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter2@^6.4.3: version "6.4.6" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.6.tgz#92d56569cc147a4d9b9da9e942e89b20ce236b0a" @@ -9673,12 +12522,17 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0: +eventemitter3@5.0.1, eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +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== -events@^3.0.0, events@^3.3.0: +events@3.3.0, events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -9751,6 +12605,11 @@ executable@^4.1.1: dependencies: pify "^2.2.0" +exenv@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -9917,6 +12776,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -9953,11 +12817,16 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.2.0.tgz#b1e2d39bc731376d28bde844454fa23e26919987" integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== -fast-safe-stringify@^2.0.6: +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -10385,6 +13254,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -10434,6 +13308,22 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -10449,6 +13339,19 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" + integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -10649,6 +13552,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -10726,6 +13634,21 @@ gzip-size@5.1.1: duplexer "^0.1.1" pify "^4.0.1" +h3@^1.15.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.1.tgz#59d6f70d7ef619fad74ecdf465a08fff898033bb" + integrity sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA== + dependencies: + cookie-es "^1.2.2" + crossws "^0.3.3" + defu "^6.1.4" + destr "^2.0.3" + iron-webcrypto "^1.2.1" + node-mock-http "^1.0.0" + radix3 "^1.1.2" + ufo "^1.5.4" + uncrypto "^0.1.3" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -10771,6 +13694,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -10786,6 +13716,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -10847,6 +13782,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@~3.0, hash-base@~3.0.4: + version "3.0.5" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.5.tgz#52480e285395cf7fba17dc4c9e47acdc7f248a8a" + integrity sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + hash.js@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" @@ -10863,6 +13806,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -11104,6 +14054,13 @@ human-signals@^3.0.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + husky@>=6: version "8.0.1" resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" @@ -11123,6 +14080,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" +idb-keyval@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -11266,6 +14228,11 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +int64-buffer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.1.0.tgz#7ebe9822196a93bbedf93ec6b73b569561b5ae3a" + integrity sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw== + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -11295,6 +14262,14 @@ io-ts@2.0.1: resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.0.1.tgz#1261c12f915c2f48d16393a36966636b48a45aa1" integrity sha512-RezD+WcCfW4VkMkEcQWL/Nmy/nqsWTvTYg7oUmTGzglvSSV2P9h2z1PVeREPFf0GWNzruYleAt1XCMQZSg1xxQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -11310,6 +14285,11 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -11568,6 +14548,14 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -11641,6 +14629,11 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -11693,7 +14686,7 @@ is-stream@^1.0.0, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-stream@^2.0.0: +is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== @@ -11767,6 +14760,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@^2.0.1, isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -11784,6 +14782,16 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -11849,6 +14857,24 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jayson@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.3.tgz#db9be2e4287d9fef4fc05b5fe367abe792c2eee8" + integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.5.10" + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -12343,6 +15369,11 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" +js-base64@^3.7.5: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== + js-sha256@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -12379,6 +15410,16 @@ js-yaml@^3.13.1, js-yaml@^3.14.0: argparse "^1.0.7" esprima "^4.0.0" +jsbi@^3.1.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" + integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -12495,7 +15536,18 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stable-stringify@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz#addb683c2b78014d0b78d704c2fcbdf0695a60e2" + integrity sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -12535,11 +15587,26 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonschema@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" + integrity sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA== + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -12560,6 +15627,11 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" +jsqr@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.4.0.tgz#8efb8d0a7cc6863cb6d95116b9069123ce9eb2d1" + integrity sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A== + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44" @@ -12595,6 +15667,15 @@ keccak@^3.0.1: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keccak@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -12917,7 +15998,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12959,6 +16040,21 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== +loglevel@^1.8.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" + integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== + +long@5.2.5: + version "5.2.5" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.5.tgz#716dcb0807c406345b3fc0f34d8042b41edb9d16" + integrity sha512-e0r9YBBgNCq1D1o5Dp8FMH0N5hsFtXDBiVa0qoJPHpakvZkmDKPRoGffZJII/XsHvj9An9blm+cRJ01yQqU+Dw== + +long@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.1.tgz#9d4222d3213f38a5ec809674834e0f0ab21abe96" + integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -12990,6 +16086,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -13062,6 +16163,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -13107,6 +16213,13 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -13122,6 +16235,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + microevent.ts@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" @@ -13439,7 +16557,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -13584,6 +16702,16 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-addon-api@^8.0.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.3.1.tgz#53bc8a4f8dbde3de787b9828059da94ba9fd4eed" + integrity sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA== + node-environment-flags@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" @@ -13592,6 +16720,11 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" +node-fetch-native@^1.6.4, node-fetch-native@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz#ae1d0e537af35c2c0b0de81cbff37eedd410aa37" + integrity sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ== + node-fetch@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -13604,6 +16737,13 @@ node-fetch@2.6.7, node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -13614,6 +16754,11 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== +node-gyp-build@^4.2.2, node-gyp-build@^4.5.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -13648,6 +16793,11 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-mock-http@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.0.tgz#4b32cd509c7f46d844e68ea93fb8be405a18a42a" + integrity sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ== + node-notifier@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" @@ -13822,6 +16972,14 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + object-keys@^1.0.11, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -13926,6 +17084,11 @@ object.values@^1.1.0, object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +oblivious-set@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.1.1.tgz#d9d38e9491d51f27a5c3ec1681d2ba40aa81e98b" + integrity sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w== + oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" @@ -13945,6 +17108,15 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== +ofetch@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.4.1.tgz#b6bf6b0d75ba616cef6519dd8b6385a8bae480ec" + integrity sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== + dependencies: + destr "^2.0.3" + node-fetch-native "^1.6.4" + ufo "^1.5.4" + on-exit-leak-free@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" @@ -14050,6 +17222,19 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== +ox@0.6.7: + version "0.6.7" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.7.tgz#afd53f2ecef68b8526660e9d29dee6e6b599a832" + integrity sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -14158,6 +17343,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -14198,6 +17388,18 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== + dependencies: + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" + parse-headers@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" @@ -14309,7 +17511,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -14438,6 +17640,11 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" +pngjs@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + pngjs@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" @@ -15152,6 +18359,11 @@ posthog-js@^1.78.1: dependencies: fflate "^0.4.1" +preact@10.4.1: + version "10.4.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" + integrity sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q== + preact@^10.5.9: version "10.8.2" resolved "https://registry.yarnpkg.com/preact/-/preact-10.8.2.tgz#b8a614f5cc8ab0cd9e63337a3d60dc80410f4ed4" @@ -15284,7 +18496,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -15293,6 +18505,24 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +protobufjs@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -15326,7 +18556,7 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -public-encrypt@^4.0.0: +public-encrypt@^4.0.0, public-encrypt@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== @@ -15383,6 +18613,13 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pushdata-bitcoin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7" + integrity sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ== + dependencies: + bitcoin-ops "^1.3.0" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -15393,6 +18630,28 @@ qr.js@0.0.0: resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ== +qrcode.react@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-1.0.1.tgz#2834bb50e5e275ffe5af6906eff15391fe9e38a5" + integrity sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg== + dependencies: + loose-envify "^1.4.0" + prop-types "^15.6.0" + qr.js "0.0.0" + +qrcode@1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83" + integrity sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q== + dependencies: + buffer "^5.4.3" + buffer-alloc "^1.2.0" + buffer-from "^1.1.1" + dijkstrajs "^1.0.1" + isarray "^2.0.1" + pngjs "^3.3.0" + yargs "^13.2.4" + qrcode@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" @@ -15403,6 +18662,15 @@ qrcode@1.5.3: pngjs "^5.0.0" yargs "^15.3.1" +qrcode@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88" + integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + dependencies: + dijkstrajs "^1.0.1" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@6.10.3: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" @@ -15484,6 +18752,11 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -15503,7 +18776,7 @@ randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: +randomfill@^1.0.3, randomfill@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== @@ -15645,6 +18918,21 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-lifecycles-compat@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-modal@^3.12.1: + version "3.16.3" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.3.tgz#c412d41915782e3c261253435d01468e2439b11b" + integrity sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw== + dependencies: + exenv "^1.2.0" + prop-types "^15.7.2" + react-lifecycles-compat "^3.0.0" + warning "^4.0.3" + react-number-format@^4.7.3: version "4.9.3" resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-4.9.3.tgz#338500fe9c61b1ac73c8d6dff4ec97dd13fd2b50" @@ -15660,6 +18948,15 @@ react-qr-code@^2.0.8: prop-types "^15.8.1" qr.js "0.0.0" +react-qr-reader@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-qr-reader/-/react-qr-reader-2.2.1.tgz#dc89046d1c1a1da837a683dd970de5926817d55b" + integrity sha512-EL5JEj53u2yAOgtpAKAVBzD/SiKWn0Bl7AZy6ZrSf1lub7xHwtaXe6XSx36Wbhl1VMGmvmrwYMRwO1aSCT2fwA== + dependencies: + jsqr "^1.2.0" + prop-types "^15.7.2" + webrtc-adapter "^7.2.1" + react-redux@^7.2.5: version "7.2.8" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" @@ -15826,6 +19123,19 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -15835,7 +19145,7 @@ readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.1.1: +readable-stream@^3.1.1, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -15844,6 +19154,17 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.4.2: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -15853,6 +19174,11 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -15914,6 +19240,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" @@ -16229,6 +19560,62 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +ripple-address-codec@^4.1.1, ripple-address-codec@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz#68fbaf646bb8567f70743af7f1ce4479f73efbf6" + integrity sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ== + dependencies: + base-x "^3.0.9" + create-hash "^1.1.2" + +ripple-binary-codec@^1.1.3: + version "1.11.0" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.11.0.tgz#d99c848c51a19746b738785001fb7208704bfe30" + integrity sha512-g7+gs3T+NfoeW6vIq5dcN0CkIT4t/zwRzFxz8X2RzfbrWRnewPUKqQbmBgs05tXLX5NuWPaneiaAVpFpYBcdfw== + dependencies: + assert "^2.0.0" + big-integer "^1.6.48" + buffer "6.0.3" + create-hash "^1.2.0" + decimal.js "^10.2.0" + ripple-address-codec "^4.3.1" + +ripple-keypairs@^1.0.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz#7fa531df36b138134afb53555a87d7f5eb465b2e" + integrity sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ== + dependencies: + bn.js "^5.1.1" + brorand "^1.0.5" + elliptic "^6.5.4" + hash.js "^1.0.3" + ripple-address-codec "^4.3.1" + +ripple-lib-transactionparser@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz#7aaad3ba1e1aeee1d5bcff32334a7a838f834dce" + integrity sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g== + dependencies: + bignumber.js "^9.0.0" + lodash "^4.17.15" + +ripple-lib@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.10.1.tgz#9c353702792b25465cdb269265d6f5bb27b1471b" + integrity sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA== + dependencies: + "@types/lodash" "^4.14.136" + "@types/ws" "^7.2.0" + bignumber.js "^9.0.0" + https-proxy-agent "^5.0.0" + jsonschema "1.2.2" + lodash "^4.17.4" + ripple-address-codec "^4.1.1" + ripple-binary-codec "^1.1.3" + ripple-keypairs "^1.0.3" + ripple-lib-transactionparser "0.8.2" + ws "^7.2.0" + rlp@^2.0.0, rlp@^2.2.3: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" @@ -16271,11 +19658,34 @@ rollup@^1.31.1: "@types/node" "*" acorn "^7.1.0" +rpc-websockets@^9.0.2: + version "9.1.1" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.1.1.tgz#5764336f3623ee1c5cc8653b7335183e3c0c78bd" + integrity sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/uuid" "^8.3.4" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +rtcpeerconnection-shim@^1.2.15: + version "1.2.15" + resolved "https://registry.yarnpkg.com/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz#e7cc189a81b435324c4949aa3dfb51888684b243" + integrity sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw== + dependencies: + sdp "^2.6.0" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -16359,6 +19769,14 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +salmon-adapter-sdk@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/salmon-adapter-sdk/-/salmon-adapter-sdk-1.1.1.tgz#d5fdd2d27b1a6c58e38c188c977eeeeface8b20c" + integrity sha512-28ysSzmDjx2AbotxSggqdclh9MCwlPJUldKkCph48oS5Xtwu0QOg8T9ZRHS2Mben4Y8sTq6VvxXznKssCYFBJA== + dependencies: + "@project-serum/sol-wallet-adapter" "^0.2.6" + eventemitter3 "^4.0.7" + sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -16464,6 +19882,11 @@ scryptsy@^2.1.0: resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== +sdp@^2.12.0, sdp@^2.6.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22" + integrity sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw== + secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -16531,6 +19954,11 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -16603,6 +20031,18 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -16633,7 +20073,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -16751,6 +20191,11 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -16781,6 +20226,24 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socket.io-client@^4.6.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.8.1.tgz#1941eca135a5490b94281d0323fe2a35f6f291cb" + integrity sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.6.1" + socket.io-parser "~4.2.4" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + sockjs-client@^1.5.0: version "1.6.1" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" @@ -16801,6 +20264,23 @@ sockjs@^0.3.21: uuid "^8.3.2" websocket-driver "^0.7.4" +socks-proxy-agent@8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.4" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" + integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + sonic-boom@^2.2.1: version "2.8.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" @@ -16952,6 +20432,11 @@ split2@^4.0.0: resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -17156,7 +20641,7 @@ string.prototype.trimstart@^1.0.5, string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -17315,6 +20800,21 @@ stylis@4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + +superstruct@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.4.tgz#0adb99a7578bd2f1c526220da6571b2d485d91ca" + integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== + +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== + supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -17561,6 +21061,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -17591,7 +21096,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8: +"through@>=2.2.7 <3", through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -17634,6 +21139,17 @@ tiny-secp256k1@^1.1.3: elliptic "^6.4.0" nan "^2.13.2" +tiny-secp256k1@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.7.tgz#0c1b6b9d2d93404f9093dc7e287b0aa834480573" + integrity sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -17713,6 +21229,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -17763,6 +21284,11 @@ ts-essentials@^9.1.2: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-9.1.2.tgz#46db6944b73b4cd603f3d959ef1123c16ba56f59" integrity sha512-EaSmXsAhEiirrTY1Oaa7TSpei9dzuCuFPmjKRJRPamERYtfaGS8/KpOSbjergLz/Y76/aZlV9i/krgzsuWEBbg== +ts-mixer@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28" + integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== + ts-node@^10.7.0: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -17818,6 +21344,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.3.0, tslib@^2.4.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.3.1: version "2.6.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" @@ -17955,6 +21486,28 @@ typescript@^4.4.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +ua-parser-js@^1.0.37: + version "1.0.40" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.40.tgz#ac6aff4fd8ea3e794a6aa743ec9c2fc29e75b675" + integrity sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew== + +ufo@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + +uint8array-tools@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/uint8array-tools/-/uint8array-tools-0.0.8.tgz#712bab001f8347bd782f45bc47c76ffff32d1e0b" + integrity sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g== + +uint8arrays@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" + integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== + dependencies: + multiformats "^9.4.2" + uint8arrays@^3.0.0, uint8arrays@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" @@ -17985,6 +21538,11 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + underscore@1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" @@ -18000,6 +21558,21 @@ underscore@>1.4.4: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici-types@^6.20.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@^7.3.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.5.0.tgz#7bb9a3dec9646c8e87d299d9d16865d102cdfecd" + integrity sha512-CxNFga24pkqrtk9aO4jV78tWXLZhVVU9J2/EAhBGwqJ1+tsLydMI2Vaq7wj3ba/SZL7BL8aq5rflf75DhbgkhA== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -18023,6 +21596,13 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +unidragger@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" + integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== + dependencies: + ev-emitter "^2.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -18074,6 +21654,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unload@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.4.1.tgz#b0c5b7fb44e17fcbf50dcb8fb53929c59dd226a5" + integrity sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -18092,6 +21677,20 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unstorage@^1.9.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.15.0.tgz#d1f23cba0901c5317d15a751a299e50fbb637674" + integrity sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg== + dependencies: + anymatch "^3.1.3" + chokidar "^4.0.3" + destr "^2.0.3" + h3 "^1.15.0" + lru-cache "^10.4.3" + node-fetch-native "^1.6.6" + ofetch "^1.4.1" + ufo "^1.5.4" + untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" @@ -18171,6 +21770,15 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +usb@^2.14.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/usb/-/usb-2.15.0.tgz#50b9310b51e35e967279278be0a4a5eff70d4429" + integrity sha512-BA9r7PFxyYp99wps1N70lIqdPb2Utcl2KkWohDtWUmhDBeM5hDH1Zl/L/CZvWxd5W3RUCNm1g+b+DEKZ6cHzqg== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^8.0.0" + node-gyp-build "^4.5.0" + use-callback-ref@^1.2.3, use-callback-ref@^1.2.5: version "1.3.0" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" @@ -18245,7 +21853,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@^0.12.0: +util@^0.12.0, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -18288,21 +21896,29 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@8.3.2, uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -18343,6 +21959,13 @@ varint@^5.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +varuint-bitcoin@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-2.0.0.tgz#59a53845a87ad18c42f184a3d325074465341523" + integrity sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog== + dependencies: + uint8array-tools "^0.0.8" + varuint-bitcoin@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" @@ -18369,6 +21992,20 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +viem@2.23.2: + version "2.23.2" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.2.tgz#db395c8cf5f4fb5572914b962fb8ce5db09f681c" + integrity sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA== + dependencies: + "@noble/curves" "1.8.1" + "@noble/hashes" "1.7.1" + "@scure/bip32" "1.6.2" + "@scure/bip39" "1.5.4" + abitype "1.0.8" + isows "1.0.6" + ox "0.6.7" + ws "8.18.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -19276,6 +22913,14 @@ webpack@4.44.2: watchpack "^1.7.4" webpack-sources "^1.4.1" +webrtc-adapter@^7.2.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz#b2c227a6144983b35057df67bd984a7d4bfd17f1" + integrity sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A== + dependencies: + rtcpeerconnection-shim "^1.2.15" + sdp "^2.12.0" + websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" @@ -19407,6 +23052,13 @@ wif@2.0.6, wif@^2.0.6: dependencies: bs58check "<3.0.0" +wif@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/wif/-/wif-5.0.0.tgz#445e44b8f62e155144d1c970c01ca2ba3979cc3f" + integrity sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA== + dependencies: + bs58check "^4.0.0" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -19626,6 +23278,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -19642,6 +23299,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.2.0, ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + ws@^7.4.6: version "7.5.8" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" @@ -19652,6 +23314,16 @@ ws@^7.5.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.18.0, ws@^8.5.0: + version "8.18.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" @@ -19699,6 +23371,11 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xmlhttprequest-ssl@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz#e9e8023b3f29ef34b97a859f584c5e6c61418e23" + integrity sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ== + xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" @@ -19764,7 +23441,7 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" -yargs@13.3.2, yargs@^13.3.0, yargs@^13.3.2: +yargs@13.3.2, yargs@^13.2.4, yargs@^13.3.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== From 478283a623780f496e510b6b83d7bba75422bcd3 Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Wed, 2 Apr 2025 01:35:56 -0300 Subject: [PATCH 2/8] chore: update node version to 20 in workflow --- .github/workflows/dashboard-ci.yml | 4 ++-- .github/workflows/dashboard-mainnet.yml | 2 +- .github/workflows/reusable-build-and-publish.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dashboard-ci.yml b/.github/workflows/dashboard-ci.yml index be1e19186..2b004c875 100644 --- a/.github/workflows/dashboard-ci.yml +++ b/.github/workflows/dashboard-ci.yml @@ -29,7 +29,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: "18" + node-version: "20" cache: "yarn" # This step forces Git to download dependencies using `https://` protocol, @@ -58,7 +58,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: "18" + node-version: "20" cache: "yarn" # We need this step because the `@keep-network/tbtc` which we update in diff --git a/.github/workflows/dashboard-mainnet.yml b/.github/workflows/dashboard-mainnet.yml index df3472a87..8e41eba6b 100644 --- a/.github/workflows/dashboard-mainnet.yml +++ b/.github/workflows/dashboard-mainnet.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: "18" + node-version: "20" cache: "yarn" # This step forces Git to download dependencies using `https://` protocol, diff --git a/.github/workflows/reusable-build-and-publish.yml b/.github/workflows/reusable-build-and-publish.yml index 5b41ed3fc..4e4559b2f 100644 --- a/.github/workflows/reusable-build-and-publish.yml +++ b/.github/workflows/reusable-build-and-publish.yml @@ -87,7 +87,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: "18" + node-version: "20" cache: "yarn" # We need this step because the `@keep-network/tbtc` which we update in From 612d07da6824ebff113681ad84265cf830dbc0f0 Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Wed, 2 Apr 2025 01:45:16 -0300 Subject: [PATCH 3/8] refactor: updates account connection related hooks --- src/App.tsx | 4 ++-- .../Modal/ConfirmStakingParams/AdvancedParamsForm.tsx | 4 ++-- src/components/Modal/ConfirmStakingParams/index.tsx | 4 ++-- .../index.tsx | 4 ++-- .../Modal/MapOperatorToStakingProviderModal/index.tsx | 4 ++-- .../components/WalletConnectStatusAlert.tsx | 4 ++-- src/components/UpgradeCard/UpgradeCardTemplate.tsx | 4 ++-- src/components/withOnlyConnectedWallet.tsx | 1 - src/hooks/ledger-live-app/useRequestEthereumAccount.ts | 4 ++-- src/hooks/posthog/useCaptureWalletConnectedEvent.ts | 4 ++-- src/hooks/posthog/useIdentify.ts | 9 +++------ .../useRegisterMultipleOperatorsTransaction.ts | 4 ++-- .../useSubscribeToOperatorRegisteredEvent.ts | 4 ++-- .../useSubscribeToOptimisticMintingFinalizedEvent.ts | 4 ++-- .../useSubscribeToOptimisticMintingRequestedEvent.ts | 4 ++-- .../tbtc/useSubscribeToRedemptionRequestedEvent.ts | 4 ++-- src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts | 4 ++-- src/hooks/useSaveConnectedAddressToStore.ts | 4 ++-- src/hooks/useSubscribeToStakedEvent.ts | 4 ++-- src/hooks/useUpgradeHref.ts | 8 ++++---- src/pages/Staking/AuthorizeStakingApps/index.tsx | 8 ++++---- src/pages/Staking/NewStakeCard.tsx | 6 +++--- src/pages/Staking/RewardsCard.tsx | 10 +++++----- src/pages/Staking/StakeCard/index.tsx | 4 ++-- src/pages/Staking/StakeDetailsPage/index.tsx | 8 ++++---- src/web3/hooks/useContract.ts | 6 ++++-- src/web3/hooks/useERC20.ts | 4 ++-- src/web3/hooks/useMerkleDropContract.ts | 1 - src/web3/hooks/useSubscribeToContractEvent.ts | 6 +++--- src/web3/hooks/useSubscribeToERC20TransferEvent.ts | 4 ++-- src/web3/hooks/useTokenAllowance.ts | 4 ++-- 31 files changed, 72 insertions(+), 75 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 1eb7a8ab9..ea7b77373 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,7 +7,7 @@ import "@fontsource/ibm-plex-mono/400.css" import { FC, useEffect, Fragment } from "react" import { Box, ChakraProvider, useColorModeValue } from "@chakra-ui/react" import { Provider as ReduxProvider, useDispatch } from "react-redux" -import { useWeb3React, Web3ReactProvider } from "@web3-react/core" +import { Web3ReactProvider } from "@web3-react/core" import { ConnectorEvent, ConnectorUpdate } from "@web3-react/types" import { BrowserRouter as Router, @@ -95,7 +95,7 @@ const Web3EventHandlerComponent = () => { // TODO: Let's move this to its own hook like useKeep, useT, etc const useSubscribeToVendingMachineContractEvents = () => { - const { account } = useWeb3React() + const { account } = useIsActive() const { openModal } = useModal() const keepVendingMachine = useVendingMachineContract(Token.Keep) const nuVendingMachine = useVendingMachineContract(Token.Nu) diff --git a/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx b/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx index bb5848eeb..dbe83dea5 100644 --- a/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx +++ b/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx @@ -8,9 +8,9 @@ import { BodyXs, useColorModeValue, } from "@threshold-network/components" -import { useWeb3React } from "@web3-react/core" import { isAddress, isSameETHAddress } from "../../../web3/utils" import Link from "../../Link" +import { useIsActive } from "../../../hooks/useIsActive" export interface FormValues { stakingProvider: string @@ -27,7 +27,7 @@ const AdvancedParamsFormBase: FC> = ({ values, }) => { const { authorizer } = values - const { account } = useWeb3React() + const { account } = useIsActive() return (
diff --git a/src/components/Modal/ConfirmStakingParams/index.tsx b/src/components/Modal/ConfirmStakingParams/index.tsx index 6426d96a8..c00b18397 100644 --- a/src/components/Modal/ConfirmStakingParams/index.tsx +++ b/src/components/Modal/ConfirmStakingParams/index.tsx @@ -1,5 +1,4 @@ import { FC, useEffect, useRef, useState } from "react" -import { useWeb3React } from "@web3-react/core" import { BodyLg, BodySm, @@ -31,6 +30,7 @@ import { formatTokenAmount } from "../../../utils/formatAmount" import ModalCloseButton from "../ModalCloseButton" import SubmitTxButton from "../../SubmitTxButton" import { useTStakingContract } from "../../../web3/hooks" +import { useIsActive } from "../../../hooks/useIsActive" const ConfirmStakingParamsModal: FC< BaseModalProps & { stakeAmount: string } @@ -38,7 +38,7 @@ const ConfirmStakingParamsModal: FC< const formRef = useRef>(null) const { closeModal, openModal } = useModal() const [hasBeenValidatedOnMount, setHasBeenValidatedOnMount] = useState(false) - const { account } = useWeb3React() + const { account } = useIsActive() const { updateState } = useStakingState() const checkIfProviderUsed = useCheckDuplicateProviderAddress() const stakingContract = useTStakingContract() diff --git a/src/components/Modal/MapOperatorToStakingProviderConfirmationModal/index.tsx b/src/components/Modal/MapOperatorToStakingProviderConfirmationModal/index.tsx index 32d9f2fc0..cb64d5a02 100644 --- a/src/components/Modal/MapOperatorToStakingProviderConfirmationModal/index.tsx +++ b/src/components/Modal/MapOperatorToStakingProviderConfirmationModal/index.tsx @@ -10,7 +10,6 @@ import { } from "@chakra-ui/react" import { AddressZero } from "@ethersproject/constants" import { BodyLg, BodyMd, H5, LabelSm } from "@threshold-network/components" -import { useWeb3React } from "@web3-react/core" import { FC, useCallback, useState } from "react" import { ModalType } from "../../../enums" import { useRegisterMultipleOperatorsTransaction } from "../../../hooks/staking-applications/useRegisterMultipleOperatorsTransaction" @@ -27,6 +26,7 @@ import { OnSuccessCallback } from "../../../web3/hooks" import { ApplicationForOperatorMapping } from "../MapOperatorToStakingProviderModal" import SubmitTxButton from "../../SubmitTxButton" import { useThreshold } from "../../../contexts/ThresholdContext" +import { useIsActive } from "../../../hooks/useIsActive" const OperatorMappingConfirmation: FC< BoxProps & { appName: string; operator: string; stakingProvider: string } @@ -59,7 +59,7 @@ const MapOperatorToStakingProviderConfirmationModal: FC< applications: ApplicationForOperatorMapping[] } > = ({ applications, closeModal }) => { - const { account } = useWeb3React() + const { account } = useIsActive() const threshold = useThreshold() const { registerMultipleOperators } = useRegisterMultipleOperatorsTransaction() diff --git a/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx b/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx index 2404f0b20..084b76139 100644 --- a/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx +++ b/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx @@ -22,7 +22,6 @@ import { FormikProps } from "formik" import { ModalType } from "../../../enums" import { useModal } from "../../../hooks/useModal" import StakeAddressInfo from "../../../pages/Staking/StakeCard/StakeAddressInfo" -import { useWeb3React } from "@web3-react/core" import { useThreshold } from "../../../contexts/ThresholdContext" import { isAddressZero, @@ -33,6 +32,7 @@ import { import { selectMappedOperators } from "../../../store/account/selectors" import { useAppSelector } from "../../../hooks/store" import ModalCloseButton from "../ModalCloseButton" +import { useIsActive } from "../../../hooks/useIsActive" export interface MapOperatorToStakingProviderModalProps { mappedOperatorTbtc: string @@ -49,7 +49,7 @@ export interface ApplicationForOperatorMapping { const MapOperatorToStakingProviderModal: FC< BaseModalProps & MapOperatorToStakingProviderModalProps > = () => { - const { account } = useWeb3React() + const { account } = useIsActive() const formRefTbtcRb = useRef>(null) const formRefTaco = diff --git a/src/components/Modal/SelectWalletModal/components/WalletConnectStatusAlert.tsx b/src/components/Modal/SelectWalletModal/components/WalletConnectStatusAlert.tsx index ed4a6c3d4..b1a2278d3 100644 --- a/src/components/Modal/SelectWalletModal/components/WalletConnectStatusAlert.tsx +++ b/src/components/Modal/SelectWalletModal/components/WalletConnectStatusAlert.tsx @@ -2,14 +2,14 @@ import { FC } from "react" import { AccountSuccessAlert, WalletInitializeAlert } from "./index" import WalletRejectedAlert from "./WalletRejectedAlert" import { isSupportedNetwork } from "../../../../networks/utils" -import { useWeb3React } from "@web3-react/core" import IncorrectNetwork from "./IncorrectNetwork" +import { useIsActive } from "../../../../hooks/useIsActive" const WalletConnectStatusAlert: FC<{ connectionRejected?: boolean active?: boolean }> = ({ connectionRejected, active }) => { - const { chainId } = useWeb3React() + const { chainId } = useIsActive() const networkOK = isSupportedNetwork(chainId) if (connectionRejected) { diff --git a/src/components/UpgradeCard/UpgradeCardTemplate.tsx b/src/components/UpgradeCard/UpgradeCardTemplate.tsx index 3526a43e1..891e35fe3 100644 --- a/src/components/UpgradeCard/UpgradeCardTemplate.tsx +++ b/src/components/UpgradeCard/UpgradeCardTemplate.tsx @@ -14,9 +14,9 @@ import { useTConvertedAmount } from "../../hooks/useTConvertedAmount" import { useTExchangeRate } from "../../hooks/useTExchangeRate" import { UpgredableToken } from "../../types" import { Token } from "../../enums" -import { useWeb3React } from "@web3-react/core" import { BigNumber } from "ethers" import { useVendingMachineContract } from "../../web3/hooks" +import { useIsActive } from "../../hooks/useIsActive" export interface UpgradeCardTemplateProps { token: UpgredableToken @@ -34,7 +34,7 @@ const UpgradeCardTemplate: FC = ({ }) => { const { formattedAmount } = useTConvertedAmount(token, amountToConvert) const { formattedAmount: exchangeRate } = useTExchangeRate(token) - const { account } = useWeb3React() + const { account } = useIsActive() const vendingMachineContract = useVendingMachineContract(token) const titleText = useMemo(() => { diff --git a/src/components/withOnlyConnectedWallet.tsx b/src/components/withOnlyConnectedWallet.tsx index 109136212..df5687839 100644 --- a/src/components/withOnlyConnectedWallet.tsx +++ b/src/components/withOnlyConnectedWallet.tsx @@ -1,6 +1,5 @@ import { ComponentType } from "react" import { H5 } from "@threshold-network/components" -import { useWeb3React } from "@web3-react/core" import { useIsActive } from "../hooks/useIsActive" function withOnlyConnectedWallet( diff --git a/src/hooks/ledger-live-app/useRequestEthereumAccount.ts b/src/hooks/ledger-live-app/useRequestEthereumAccount.ts index b17e1bd30..0c225b2cf 100644 --- a/src/hooks/ledger-live-app/useRequestEthereumAccount.ts +++ b/src/hooks/ledger-live-app/useRequestEthereumAccount.ts @@ -8,7 +8,7 @@ import { isTestnetChainId } from "../../networks/utils" import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" import { useAppDispatch } from "../store/useAppDispatch" import { useIsEmbed } from "../useIsEmbed" -import { useWeb3React } from "@web3-react/core" +import { useIsActive } from "../useIsActive" type UseRequestAccountState = { pending: boolean @@ -27,7 +27,7 @@ export function useRequestEthereumAccount(): UseRequestAccountReturn { const { walletApiReactTransport } = useWalletApiReactTransport() const useRequestAccountReturn = useWalletApiRequestAccount() const { account: ledgerLiveAccount, requestAccount } = useRequestAccountReturn - const { chainId } = useWeb3React() + const { chainId } = useIsActive() const dispatch = useAppDispatch() const { isEmbed } = useIsEmbed() const defaultOrConnectedChainId = useConnectedOrDefaultChainId() diff --git a/src/hooks/posthog/useCaptureWalletConnectedEvent.ts b/src/hooks/posthog/useCaptureWalletConnectedEvent.ts index 3a0861eea..5acec876e 100644 --- a/src/hooks/posthog/useCaptureWalletConnectedEvent.ts +++ b/src/hooks/posthog/useCaptureWalletConnectedEvent.ts @@ -1,13 +1,13 @@ -import { useWeb3React } from "@web3-react/core" import { useEffect } from "react" import { Token } from "../../enums" import { PosthogEvent } from "../../types/posthog" import { getWalletTypeFromConnector } from "../../web3/utils/connectors" import { useToken } from "../useToken" import { useCapture } from "./useCapture" +import { useIsActive } from "../useIsActive" export const useCaptureWalletConnectedEvent = () => { - const { account, connector } = useWeb3React() + const { account, connector } = useIsActive() const { balance, isLoadedFromConnectedAccount } = useToken(Token.TBTCV2) const captureWalletConnectedEvent = useCapture(PosthogEvent.WalletConnected) diff --git a/src/hooks/posthog/useIdentify.ts b/src/hooks/posthog/useIdentify.ts index 455b040e2..2bdf21f7f 100644 --- a/src/hooks/posthog/useIdentify.ts +++ b/src/hooks/posthog/useIdentify.ts @@ -1,15 +1,12 @@ import { useEffect } from "react" -import { useWeb3React } from "@web3-react/core" -import { ConnectorEvent, ConnectorUpdate } from "@web3-react/types" import * as posthog from "../../posthog" -import { getAddress, isSameETHAddress } from "../../web3/utils" +import { getAddress } from "../../web3/utils" import { featureFlags } from "../../constants" -import { hashString } from "../../utils/crypto" -import { PosthogEvent } from "../../types/posthog" import { getWalletTypeFromConnector } from "../../web3/utils/connectors" +import { useIsActive } from "../useIsActive" export const useIdentify = () => { - const { connector, account } = useWeb3React() + const { connector } = useIsActive() useEffect(() => { if (!featureFlags.POSTHOG) return diff --git a/src/hooks/staking-applications/useRegisterMultipleOperatorsTransaction.ts b/src/hooks/staking-applications/useRegisterMultipleOperatorsTransaction.ts index 0dca66c08..80da3184e 100644 --- a/src/hooks/staking-applications/useRegisterMultipleOperatorsTransaction.ts +++ b/src/hooks/staking-applications/useRegisterMultipleOperatorsTransaction.ts @@ -3,12 +3,12 @@ import { useBondOperatorTransaction } from "./useBondOperatorTransaction" import { useRegisterOperatorTransaction } from "./useRegisterOperatorTransaction" import { useModal } from "../useModal" import { ModalType } from "../../enums" -import { useWeb3React } from "@web3-react/core" import { OperatorMappedSuccessTx } from "../../components/Modal/MapOperatorToStakingProviderSuccessModal" import { mapOperatorToStakingProviderModalClosed } from "../../store/modal" import { useAppDispatch, useAppSelector } from "../store" import { selectMappedOperators } from "../../store/account" import { isEmptyOrZeroAddress } from "../../web3/utils" +import { useIsActive } from "../useIsActive" export const useRegisterMultipleOperatorsTransaction = () => { const { @@ -17,7 +17,7 @@ export const useRegisterMultipleOperatorsTransaction = () => { mappedOperatorTaco, isOperatorMappedInAllApps, } = useAppSelector((state) => selectMappedOperators(state)) - const { account } = useWeb3React() + const { account } = useIsActive() const { openModal, closeModal } = useModal() const dispatch = useAppDispatch() diff --git a/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts b/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts index c9b6055e9..4b6562ed2 100644 --- a/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts +++ b/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts @@ -1,9 +1,9 @@ -import { useWeb3React } from "@web3-react/core" import { operatorRegistered } from "../../store/account" import { StakingAppName } from "../../store/staking-applications" import { useSubscribeToContractEvent } from "../../web3/hooks" import { isSameETHAddress } from "../../web3/utils" import { useAppDispatch } from "../store" +import { useIsActive } from "../useIsActive" import { useStakingAppContract } from "./useStakingAppContract" export const useSubscribeToOperatorRegisteredEvent = ( @@ -11,7 +11,7 @@ export const useSubscribeToOperatorRegisteredEvent = ( ) => { const contract = useStakingAppContract(appName) const dispatch = useAppDispatch() - const { account } = useWeb3React() + const { account } = useIsActive() useSubscribeToContractEvent( contract, diff --git a/src/hooks/tbtc/useSubscribeToOptimisticMintingFinalizedEvent.ts b/src/hooks/tbtc/useSubscribeToOptimisticMintingFinalizedEvent.ts index c35234073..a198c24b9 100644 --- a/src/hooks/tbtc/useSubscribeToOptimisticMintingFinalizedEvent.ts +++ b/src/hooks/tbtc/useSubscribeToOptimisticMintingFinalizedEvent.ts @@ -1,5 +1,4 @@ import { BigNumber, Event } from "ethers" -import { useWeb3React } from "@web3-react/core" import { tbtcSlice } from "../../store/tbtc" import { useAppDispatch } from "../store" import { useTBTCVaultContract } from "./useTBTCVaultContract" @@ -7,6 +6,7 @@ import { useSubscribeToContractEvent } from "../../web3/hooks" import { useTbtcState } from "../useTbtcState" import { MintingStep } from "../../types/tbtc" import { useThreshold } from "../../contexts/ThresholdContext" +import { useIsActive } from "../useIsActive" type OptimisticMintingFinalizedEventCallback = ( minter: string, @@ -37,7 +37,7 @@ export const useSubscribeToOptimisticMintingFinalizedEvent = () => { const threshold = useThreshold() const { updateState, utxo, mintingStep } = useTbtcState() const dispatch = useAppDispatch() - const { account } = useWeb3React() + const { account } = useIsActive() useSubscribeToOptimisticMintingFinalizedEventBase( (...args) => { diff --git a/src/hooks/tbtc/useSubscribeToOptimisticMintingRequestedEvent.ts b/src/hooks/tbtc/useSubscribeToOptimisticMintingRequestedEvent.ts index c4bb78c3a..b5d0f47c4 100644 --- a/src/hooks/tbtc/useSubscribeToOptimisticMintingRequestedEvent.ts +++ b/src/hooks/tbtc/useSubscribeToOptimisticMintingRequestedEvent.ts @@ -1,10 +1,10 @@ import { BigNumber, Event } from "ethers" -import { useWeb3React } from "@web3-react/core" import { useTBTCVaultContract } from "./useTBTCVaultContract" import { useSubscribeToContractEvent } from "../../web3/hooks" import { useTbtcState } from "../useTbtcState" import { MintingStep } from "../../types/tbtc" import { useThreshold } from "../../contexts/ThresholdContext" +import { useIsActive } from "../useIsActive" type OptimisticMintingRequestedEventCallback = ( minter: string, @@ -36,7 +36,7 @@ export const useSubscribeToOptimisticMintingRequestedEventBase = ( export const useSubscribeToOptimisticMintingRequestedEvent = () => { const threshold = useThreshold() const { updateState, utxo, mintingStep } = useTbtcState() - const { account } = useWeb3React() + const { account } = useIsActive() useSubscribeToOptimisticMintingRequestedEventBase( ( diff --git a/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts b/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts index 02aa68566..5c10a9db2 100644 --- a/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts +++ b/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts @@ -1,4 +1,3 @@ -import { useWeb3React } from "@web3-react/core" import { useSubscribeToContractEvent } from "../../web3/hooks" import { isSameETHAddress } from "../../web3/utils" import { useAppDispatch } from "../store" @@ -7,11 +6,12 @@ import { tbtcSlice } from "../../store/tbtc" import { BigNumber, Event } from "ethers" import { useThreshold } from "../../contexts/ThresholdContext" import { fromSatoshiToTokenPrecision } from "../../threshold-ts/utils" +import { useIsActive } from "../useIsActive" export const useSubscribeToRedemptionRequestedEvent = () => { const contract = useBridgeContract() const dispatch = useAppDispatch() - const { account } = useWeb3React() + const { account } = useIsActive() const threshold = useThreshold() useSubscribeToContractEvent( diff --git a/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts b/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts index 0757fb300..5dde681f3 100644 --- a/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts +++ b/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts @@ -1,4 +1,3 @@ -import { useWeb3React } from "@web3-react/core" import { useSubscribeToContractEvent } from "../../web3/hooks" import { isSameETHAddress } from "../../web3/utils" import { useAppDispatch } from "../store" @@ -7,12 +6,13 @@ import { tbtcSlice } from "../../store/tbtc" import { BigNumber, Event } from "ethers" import { useThreshold } from "../../contexts/ThresholdContext" import { useTbtcState } from "../useTbtcState" +import { useIsActive } from "../useIsActive" export const useSubscribeToDepositRevealedEvent = () => { const contract = useBridgeContract() const { utxo, updateState } = useTbtcState() const dispatch = useAppDispatch() - const { account } = useWeb3React() + const { account } = useIsActive() const threshold = useThreshold() useSubscribeToContractEvent( diff --git a/src/hooks/useSaveConnectedAddressToStore.ts b/src/hooks/useSaveConnectedAddressToStore.ts index 1094b38e3..e75da0779 100644 --- a/src/hooks/useSaveConnectedAddressToStore.ts +++ b/src/hooks/useSaveConnectedAddressToStore.ts @@ -1,10 +1,10 @@ -import { useWeb3React } from "@web3-react/core" import { useEffect } from "react" import { useDispatch } from "react-redux" import { walletConnected } from "../store/account" +import { useIsActive } from "./useIsActive" export const useSaveConnectedAddressToStore = () => { - const { account, chainId } = useWeb3React() + const { account, chainId } = useIsActive() const dispatch = useDispatch() useEffect(() => { diff --git a/src/hooks/useSubscribeToStakedEvent.ts b/src/hooks/useSubscribeToStakedEvent.ts index 6d9011b54..f35a42c12 100644 --- a/src/hooks/useSubscribeToStakedEvent.ts +++ b/src/hooks/useSubscribeToStakedEvent.ts @@ -1,4 +1,3 @@ -import { useWeb3React } from "@web3-react/core" import { useDispatch } from "react-redux" import { Event } from "@ethersproject/contracts" import { BigNumberish } from "@ethersproject/bignumber" @@ -7,10 +6,11 @@ import { providerStakedForStakingProvider, } from "../store/staking" import { useSubscribeToContractEvent, useTStakingContract } from "../web3/hooks" +import { useIsActive } from "./useIsActive" export const useSubscribeToStakedEvent = () => { const tStakingContract = useTStakingContract() - const { account } = useWeb3React() + const { account } = useIsActive() const dispatch = useDispatch() /** diff --git a/src/hooks/useUpgradeHref.ts b/src/hooks/useUpgradeHref.ts index fb718ab4f..759d8d91c 100644 --- a/src/hooks/useUpgradeHref.ts +++ b/src/hooks/useUpgradeHref.ts @@ -1,11 +1,11 @@ -import { useWeb3React } from "@web3-react/core" import { BigNumber } from "ethers" import { useTokenState } from "./useTokenState" import { useEffect, useState } from "react" +import { useIsActive } from "./useIsActive" const useUpgradeHref = () => { const { keep, nu } = useTokenState() - const { active } = useWeb3React() + const { isActive } = useIsActive() const [upgradeHref, setUpgradeHref] = useState("/upgrade") @@ -13,14 +13,14 @@ const useUpgradeHref = () => { const keepBalanceBn = BigNumber.from(keep.balance) const nuBalanceBn = BigNumber.from(nu.balance) - if (active) { + if (isActive) { if (keepBalanceBn.gt(nuBalanceBn)) { setUpgradeHref("/upgrade/keep") } else { setUpgradeHref("/upgrade/nu") } } - }, [active, keep.balance, nu.balance]) + }, [isActive, keep.balance, nu.balance]) return upgradeHref } diff --git a/src/pages/Staking/AuthorizeStakingApps/index.tsx b/src/pages/Staking/AuthorizeStakingApps/index.tsx index 97c7196a6..c218e5bfc 100644 --- a/src/pages/Staking/AuthorizeStakingApps/index.tsx +++ b/src/pages/Staking/AuthorizeStakingApps/index.tsx @@ -25,7 +25,6 @@ import { requestStakeByStakingProvider, selectStakeByStakingProvider, } from "../../../store/staking" -import { useWeb3React } from "@web3-react/core" import { useStakingAppDataByStakingProvider, useStakingApplicationAddress, @@ -39,10 +38,11 @@ import { useAppDispatch } from "../../../hooks/store" import { stakingApplicationsSlice } from "../../../store/staking-applications" import BundledRewardsAlert from "../../../components/BundledRewardsAlert" import { useThreshold } from "../../../contexts/ThresholdContext" +import { useIsActive } from "../../../hooks/useIsActive" const AuthorizeStakingAppsPage: FC = () => { const { stakingProviderAddress } = useParams() - const { account, active, chainId } = useWeb3React() + const { account, isActive, chainId } = useIsActive() const threshold = useThreshold() const navigate = useNavigate() const { openModal } = useModal() @@ -240,12 +240,12 @@ const AuthorizeStakingAppsPage: FC = () => { const alertTextColor = useColorModeValue("gray.900", "white") - if (active && !stake) + if (isActive && !stake) return ( No stake found for address: {stakingProviderAddress} ) - return active ? ( + return isActive ? ( <> diff --git a/src/pages/Staking/NewStakeCard.tsx b/src/pages/Staking/NewStakeCard.tsx index 41079048d..885c611d0 100644 --- a/src/pages/Staking/NewStakeCard.tsx +++ b/src/pages/Staking/NewStakeCard.tsx @@ -7,13 +7,13 @@ import { useMinStakeAmount } from "../../hooks/useMinStakeAmount" import { useModal } from "../../hooks/useModal" import { useTokenBalance } from "../../hooks/useTokenBalance" import { formatTokenAmount } from "../../utils/formatAmount" -import { useWeb3React } from "@web3-react/core" +import { useIsActive } from "../../hooks/useIsActive" const NewStakeCard: FC> = () => { const { openModal } = useModal() const tBalance = useTokenBalance(Token.T) const { minStakeAmount, isLoading, hasError } = useMinStakeAmount() - const { active } = useWeb3React() + const { isActive } = useIsActive() const openStakingModal = async (stakeAmount: string) => { openModal(ModalType.StakingChecklist, { stakeAmount }) @@ -41,7 +41,7 @@ const NewStakeCard: FC> = () => { maxTokenAmount={tBalance} placeholder={placeholder} minTokenAmount={minStakeAmount} - isDisabled={!active} + isDisabled={!isActive} /> diff --git a/src/pages/Staking/RewardsCard.tsx b/src/pages/Staking/RewardsCard.tsx index e04008e69..cfed80336 100644 --- a/src/pages/Staking/RewardsCard.tsx +++ b/src/pages/Staking/RewardsCard.tsx @@ -1,6 +1,5 @@ import { FC } from "react" import { Button, useColorModeValue, VStack } from "@chakra-ui/react" -import { useWeb3React } from "@web3-react/core" import { BodyMd, BodyLg, @@ -17,12 +16,13 @@ import { ModalType } from "../../enums" import { formatTokenAmount } from "../../utils/formatAmount" import { BigNumber } from "ethers" import { useNextRewardsDropDate } from "../../hooks/useNextRewardsDropDate" +import { useIsActive } from "../../hooks/useIsActive" const RewardsCard: FC<{ totalRewardsBalance: string totalBonusBalance: string }> = ({ totalRewardsBalance, totalBonusBalance }) => { - const { active } = useWeb3React() + const { isActive } = useIsActive() const { openModal } = useModal() const dropTimestamp = useNextRewardsDropDate() @@ -52,8 +52,8 @@ const RewardsCard: FC<{ )} Total Rewards - - {active ? ( + + {isActive ? ( <>
openModal(ModalType.ClaimingRewards, { diff --git a/src/pages/Staking/StakeCard/index.tsx b/src/pages/Staking/StakeCard/index.tsx index 9a9861b71..b00783a85 100644 --- a/src/pages/Staking/StakeCard/index.tsx +++ b/src/pages/Staking/StakeCard/index.tsx @@ -33,10 +33,10 @@ import { featureFlags } from "../../../constants" import { StakeCardContext } from "../../../contexts/StakeCardContext" import { useStakeCardContext } from "../../../hooks/useStakeCardContext" import { isSameETHAddress } from "../../../threshold-ts/utils" -import { useWeb3React } from "@web3-react/core" import { useAppSelector } from "../../../hooks/store" import { selectAvailableAmountToUnstakeByStakingProvider } from "../../../store/staking" import { UnstakingFormLabel } from "../../../components/UnstakingFormLabel" +import { useIsActive } from "../../../hooks/useIsActive" const StakeCardProvider: FC<{ stake: StakeData }> = ({ stake }) => { const isInactiveStake = BigNumber.from(stake.totalInTStake).isZero() @@ -64,7 +64,7 @@ const StakeCard: FC<{ stake: StakeData }> = ({ stake }) => { const tBalance = useTokenBalance(Token.T) const { openModal } = useModal() const { isInactiveStake, canTopUpKepp, canTopUpNu } = useStakeCardContext() - const { account } = useWeb3React() + const { account } = useIsActive() const availableAmountToUnstake = useAppSelector((state) => selectAvailableAmountToUnstakeByStakingProvider( state, diff --git a/src/pages/Staking/StakeDetailsPage/index.tsx b/src/pages/Staking/StakeDetailsPage/index.tsx index cb52eb83f..7efc9e600 100644 --- a/src/pages/Staking/StakeDetailsPage/index.tsx +++ b/src/pages/Staking/StakeDetailsPage/index.tsx @@ -30,15 +30,15 @@ import NodeStatusLabel from "./NodeStatusLabel" import { useStakingAppDataByStakingProvider } from "../../../hooks/staking-applications" import { useAppDispatch, useAppSelector } from "../../../hooks/store" import { useModal } from "../../../hooks/useModal" -import { useWeb3React } from "@web3-react/core" import { AddressZero } from "@ethersproject/constants" import { isAddress } from "../../../web3/utils" import { stakingApplicationsSlice } from "../../../store/staking-applications" import { useThreshold } from "../../../contexts/ThresholdContext" +import { useIsActive } from "../../../hooks/useIsActive" const StakeDetailsPage: FC = () => { const { stakingProviderAddress } = useParams() - const { account, active } = useWeb3React() + const { account, isActive } = useIsActive() const threshold = useThreshold() const { openModal } = useModal() const navigate = useNavigate() @@ -85,7 +85,7 @@ const StakeDetailsPage: FC = () => { selectRewardsByStakingProvider(state, stakingProviderAddress!) ) - if (active && !stake) + if (isActive && !stake) return No Stake found for address: {stakingProviderAddress} const handleCommitToTaco = () => { @@ -95,7 +95,7 @@ const StakeDetailsPage: FC = () => { }) } - return active ? ( + return isActive ? (
Stake Details
diff --git a/src/web3/hooks/useContract.ts b/src/web3/hooks/useContract.ts index 60e1646ab..ad6eefb1e 100644 --- a/src/web3/hooks/useContract.ts +++ b/src/web3/hooks/useContract.ts @@ -3,13 +3,15 @@ import { useWeb3React } from "@web3-react/core" import { Contract } from "@ethersproject/contracts" import { getThresholdLibProvider } from "../../utils/getThresholdLib" import { getContract } from "../../utils/getContract" +import { useIsActive } from "../../hooks/useIsActive" export function useContract( address: string, ABI: any, withSignerIfPossible = true ): T | null { - const { library, account, chainId, active } = useWeb3React() + const { library } = useWeb3React() + const { account, chainId, isActive } = useIsActive() return useMemo(() => { if (!address || !ABI) { @@ -19,7 +21,7 @@ export function useContract( return getContract( address, ABI, - active ? library : getThresholdLibProvider(), + isActive ? library : getThresholdLibProvider(), withSignerIfPossible && account ? account : undefined ) }, [address, ABI, library, chainId, withSignerIfPossible, account]) as T diff --git a/src/web3/hooks/useERC20.ts b/src/web3/hooks/useERC20.ts index b4e13b6b8..766b6642b 100644 --- a/src/web3/hooks/useERC20.ts +++ b/src/web3/hooks/useERC20.ts @@ -1,6 +1,5 @@ import { useCallback } from "react" import { MaxUint256 } from "@ethersproject/constants" -import { useWeb3React } from "@web3-react/core" import { useContract } from "./useContract" import ERC20_ABI from "../abi/ERC20.json" import { Token } from "../../enums" @@ -9,13 +8,14 @@ import { Approve, UseErc20Interface } from "../../types/token" import { useTransaction } from "../../hooks/useTransaction" import { TransactionStatus } from "../../enums/transactionType" import { isWalletRejectionError } from "../../utils/isWalletRejectionError" +import { useIsActive } from "../../hooks/useIsActive" export const useErc20TokenContract: UseErc20Interface = ( tokenAddress, withSignerIfPossible, abi = ERC20_ABI ) => { - const { account } = useWeb3React() + const { account } = useIsActive() const { setTokenLoading, setTokenIsLoadedFromConnectedAccount, diff --git a/src/web3/hooks/useMerkleDropContract.ts b/src/web3/hooks/useMerkleDropContract.ts index efc38150f..e7025c68e 100644 --- a/src/web3/hooks/useMerkleDropContract.ts +++ b/src/web3/hooks/useMerkleDropContract.ts @@ -2,7 +2,6 @@ import CumulativeMerkleDropABI from "../abi/CumulativeMerkleDrop.json" import { useContract } from "./useContract" import { AddressZero } from "../utils" import { SupportedChainIds } from "../../networks/enums/networks" -import { useWeb3React } from "@web3-react/core" import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" const DEPLOYMENT_BLOCKS: { [key: number]: number } = { diff --git a/src/web3/hooks/useSubscribeToContractEvent.ts b/src/web3/hooks/useSubscribeToContractEvent.ts index 1e71336dd..2f1c43efd 100644 --- a/src/web3/hooks/useSubscribeToContractEvent.ts +++ b/src/web3/hooks/useSubscribeToContractEvent.ts @@ -1,6 +1,6 @@ import { useEffect, useRef } from "react" import { Contract, EventFilter } from "@ethersproject/contracts" -import { useWeb3React } from "@web3-react/core" +import { useIsActive } from "../../hooks/useIsActive" // TODO: types export const useSubscribeToContractEvent = ( @@ -14,7 +14,7 @@ export const useSubscribeToContractEvent = ( indexedFilterParams: string[] = [], shouldSubscribeIfUserNotConnected: boolean = false ) => { - const { active } = useWeb3React() + const { isActive } = useIsActive() const callbackRef = useRef<(args: any[]) => void>() const indexedFilterParamsLength = indexedFilterParams.length // An event can have up to 3 indexed params. We want to extract these values @@ -32,7 +32,7 @@ export const useSubscribeToContractEvent = ( }, [callback]) useEffect(() => { - if (!contract || (!active && !shouldSubscribeIfUserNotConnected)) { + if (!contract || (!isActive && !shouldSubscribeIfUserNotConnected)) { return } diff --git a/src/web3/hooks/useSubscribeToERC20TransferEvent.ts b/src/web3/hooks/useSubscribeToERC20TransferEvent.ts index 6c1cacddf..7fee13d44 100644 --- a/src/web3/hooks/useSubscribeToERC20TransferEvent.ts +++ b/src/web3/hooks/useSubscribeToERC20TransferEvent.ts @@ -1,4 +1,3 @@ -import { useWeb3React } from "@web3-react/core" import { BigNumber } from "@ethersproject/bignumber" import { Token } from "../../enums/token" import { useSubscribeToContractEvent } from "./useSubscribeToContractEvent" @@ -7,9 +6,10 @@ import { isSameETHAddress } from "../../web3/utils" import { useTokenState } from "../../hooks/useTokenState" import { useToken } from "../../hooks/useToken" import { useCallback } from "react" +import { useIsActive } from "../../hooks/useIsActive" export const useSubscribeToERC20TransferEvent = (token: Token) => { - const { account } = useWeb3React() + const { account } = useIsActive() const { contract } = useToken(token) const currentTokenBalance = useTokenBalance(token) diff --git a/src/web3/hooks/useTokenAllowance.ts b/src/web3/hooks/useTokenAllowance.ts index 726464c1c..097878aef 100644 --- a/src/web3/hooks/useTokenAllowance.ts +++ b/src/web3/hooks/useTokenAllowance.ts @@ -1,12 +1,12 @@ import { useEffect, useState } from "react" -import { useWeb3React } from "@web3-react/core" import { Contract } from "@ethersproject/contracts" +import { useIsActive } from "../../hooks/useIsActive" export const useTokenAllowance = ( tokenContract?: Contract, spender?: string ) => { - const { account } = useWeb3React() + const { account } = useIsActive() const [allowance, setAllowance] = useState(0) useEffect(() => { From 640d7ef2fe0d89b4332bcca196249daf5675ae0d Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Thu, 3 Apr 2025 23:56:41 -0300 Subject: [PATCH 4/8] chore: update ethereum network terms --- src/components/Navbar/NetworkButton.tsx | 10 ++-- src/contexts/ThresholdContext.tsx | 4 +- .../useRequestBitcoinAccount.ts | 4 +- .../useRequestEthereumAccount.ts | 4 +- src/hooks/useIsSolanaActive.ts | 56 +++++++++++++++++++ ...> useConnectedOrDefaultEthereumChainId.ts} | 12 ++-- src/networks/utils/connectedNetwork.ts | 4 +- src/networks/utils/getChainIdToNetworkName.ts | 26 --------- .../getEthereumNetworkNameFromChainId.ts | 34 +++++++++++ src/networks/utils/getRpcUrl.ts | 4 +- src/networks/utils/index.ts | 2 +- src/pages/tBTC/Bridge/DepositDetails.tsx | 4 +- src/pages/tBTC/Bridge/Minting/ProvideData.tsx | 4 +- src/store/tbtc/effects.ts | 4 +- src/utils/getEnvVariable.ts | 2 +- src/utils/getLedgerLiveAppEthereumSigner.ts | 4 +- src/utils/getThresholdLib.ts | 8 +-- src/web3/connectors/ledgerLive.ts | 4 +- src/web3/hooks/useKeep.ts | 4 +- src/web3/hooks/useKeepBondingContract.ts | 4 +- src/web3/hooks/useKeepTokenStakingContract.ts | 4 +- src/web3/hooks/useMerkleDropContract.ts | 4 +- src/web3/hooks/useMulticallContract.ts | 4 +- src/web3/hooks/useT.ts | 4 +- src/web3/hooks/useTBTCTokenContract.ts | 4 +- src/web3/hooks/useTBTCv2TokenContract.ts | 4 +- src/web3/hooks/useTStakingContract.ts | 4 +- 27 files changed, 145 insertions(+), 81 deletions(-) create mode 100644 src/hooks/useIsSolanaActive.ts rename src/networks/hooks/{useConnectedOrDefaultChainId.ts => useConnectedOrDefaultEthereumChainId.ts} (53%) delete mode 100644 src/networks/utils/getChainIdToNetworkName.ts create mode 100644 src/networks/utils/getEthereumNetworkNameFromChainId.ts diff --git a/src/components/Navbar/NetworkButton.tsx b/src/components/Navbar/NetworkButton.tsx index c456c598b..46bb9ed58 100644 --- a/src/components/Navbar/NetworkButton.tsx +++ b/src/components/Navbar/NetworkButton.tsx @@ -17,13 +17,13 @@ import { EthereumDark } from "../../static/icons/EthereumDark" import { Arbitrum } from "../../static/icons/Arbitrum" import { Base } from "../../static/icons/Base" import { - chainIdToChainParameterName, + getParameterNameFromChainId, isMainnetChainId, networks, } from "../../networks/utils" import { useIsActive } from "../../hooks/useIsActive" import { NetworkType, SupportedChainIds } from "../../networks/enums/networks" -import { getDefaultProviderChainId } from "../../utils/getEnvVariable" +import { getEthereumDefaultProviderChainId } from "../../utils/getEnvVariable" interface NetworkIconMap { icon: ReactElement @@ -31,7 +31,7 @@ interface NetworkIconMap { } const getNetworkIcon = (chainId: number, colorMode: string): NetworkIconMap => { - const defaultChainId = getDefaultProviderChainId() + const defaultChainId = getEthereumDefaultProviderChainId() const ethereumLogo = colorMode === "light" ? EthereumDark : EthereumLight const grayBackground = "gray.700" @@ -84,7 +84,7 @@ const getNetworkIcon = (chainId: number, colorMode: string): NetworkIconMap => { const NetworkButton: FC = () => { const { colorMode } = useColorMode() const { chainId, switchNetwork } = useIsActive() - const defaultChainId = getDefaultProviderChainId() + const defaultChainId = getEthereumDefaultProviderChainId() const networkIcon = useMemo( () => getNetworkIcon(chainId || 0, colorMode), @@ -156,7 +156,7 @@ const NetworkButton: FC = () => { rightIcon={isOpen ? : } display={{ base: "none", md: "inherit" }} > - {chainIdToChainParameterName(chainId)} + {getParameterNameFromChainId(chainId)} {renderMenuItems()} diff --git a/src/contexts/ThresholdContext.tsx b/src/contexts/ThresholdContext.tsx index cb2f6fc27..45db37bc5 100644 --- a/src/contexts/ThresholdContext.tsx +++ b/src/contexts/ThresholdContext.tsx @@ -3,7 +3,7 @@ import { getThresholdLibProvider, threshold } from "../utils/getThresholdLib" import { useLedgerLiveApp } from "./LedgerLiveAppContext" import { useIsActive } from "../hooks/useIsActive" import { useIsEmbed } from "../hooks/useIsEmbed" -import { getDefaultProviderChainId } from "../utils/getEnvVariable" +import { getEthereumDefaultProviderChainId } from "../utils/getEnvVariable" import { useWeb3React } from "@web3-react/core" const ThresholdContext = createContext(threshold) @@ -39,7 +39,7 @@ export const ThresholdProvider: FC = ({ children }) => { ...threshold.config.ethereum, providerOrSigner: getThresholdLibProvider(), account: undefined, - chainId: getDefaultProviderChainId(), + chainId: getEthereumDefaultProviderChainId(), }, bitcoin: threshold.config.bitcoin, }) diff --git a/src/hooks/ledger-live-app/useRequestBitcoinAccount.ts b/src/hooks/ledger-live-app/useRequestBitcoinAccount.ts index 8e1664754..2ec7b3041 100644 --- a/src/hooks/ledger-live-app/useRequestBitcoinAccount.ts +++ b/src/hooks/ledger-live-app/useRequestBitcoinAccount.ts @@ -4,7 +4,7 @@ import { useCallback, useEffect } from "react" import { useLedgerLiveApp } from "../../contexts/LedgerLiveAppContext" import { useWalletApiReactTransport } from "../../contexts/TransportProvider" import { isTestnetChainId } from "../../networks/utils" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" import { useIsEmbed } from "../useIsEmbed" type UseRequestAccountState = { @@ -25,7 +25,7 @@ export function useRequestBitcoinAccount(): UseRequestAccountReturn { const useRequestAccountReturn = useWalletApiRequestAccount() const { account, requestAccount } = useRequestAccountReturn const { isEmbed } = useIsEmbed() - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() useEffect(() => { if (isEmbed) setBtcAccount(account || undefined) diff --git a/src/hooks/ledger-live-app/useRequestEthereumAccount.ts b/src/hooks/ledger-live-app/useRequestEthereumAccount.ts index 0c225b2cf..a77e07cf4 100644 --- a/src/hooks/ledger-live-app/useRequestEthereumAccount.ts +++ b/src/hooks/ledger-live-app/useRequestEthereumAccount.ts @@ -5,7 +5,7 @@ import { useLedgerLiveApp } from "../../contexts/LedgerLiveAppContext" import { useWalletApiReactTransport } from "../../contexts/TransportProvider" import { walletConnected } from "../../store/account" import { isTestnetChainId } from "../../networks/utils" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" import { useAppDispatch } from "../store/useAppDispatch" import { useIsEmbed } from "../useIsEmbed" import { useIsActive } from "../useIsActive" @@ -30,7 +30,7 @@ export function useRequestEthereumAccount(): UseRequestAccountReturn { const { chainId } = useIsActive() const dispatch = useAppDispatch() const { isEmbed } = useIsEmbed() - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() useEffect(() => { // Setting the eth account in LedgerLiveAppContext through `setEthAccount` diff --git a/src/hooks/useIsSolanaActive.ts b/src/hooks/useIsSolanaActive.ts new file mode 100644 index 000000000..e54689cb0 --- /dev/null +++ b/src/hooks/useIsSolanaActive.ts @@ -0,0 +1,56 @@ +import { useWallet } from "@solana/wallet-adapter-react" +import type { PublicKey } from "@solana/web3.js" +import { useCallback, useMemo } from "react" + +type UseIsActiveSolanaResult = { + solanaPublicKey: PublicKey | undefined + isSolanaActive: boolean + solanaConnectedWalletName: string | undefined + solanaConnectedWalletIcon: string | undefined + disconnectSolana: () => Promise + isSolanaConnected: boolean + isSolanaConnecting: boolean + isSolanaDisconnecting: boolean +} + +/** + * Checks if solana wallet is connected to the dashboard. + * + * Returns whether the wallet is active, its publicKey, and methods to + * connect, disconnect, and select different wallets. + * @return {UseIsActiveSolanaResult} public key address and `isActive` boolean + */ +export function useIsActiveSolana(): UseIsActiveSolanaResult { + const { + publicKey, + wallet, + connected, + connecting, + disconnecting, + disconnect, + } = useWallet() + + // Whether there is an active wallet (connected + has publicKey). + const isActive = useMemo(() => { + return connected && !!publicKey + }, [connected, publicKey]) + + const disconnectWallet = useCallback(async () => { + try { + await disconnect() + } catch (error) { + console.error("Failed to disconnect wallet:", error) + } + }, [disconnect]) + + return { + solanaPublicKey: publicKey ?? undefined, + isSolanaActive: isActive, + solanaConnectedWalletName: wallet?.adapter?.name, + solanaConnectedWalletIcon: wallet?.adapter?.icon, + disconnectSolana: disconnectWallet, + isSolanaConnected: connected, + isSolanaConnecting: connecting, + isSolanaDisconnecting: disconnecting, + } +} diff --git a/src/networks/hooks/useConnectedOrDefaultChainId.ts b/src/networks/hooks/useConnectedOrDefaultEthereumChainId.ts similarity index 53% rename from src/networks/hooks/useConnectedOrDefaultChainId.ts rename to src/networks/hooks/useConnectedOrDefaultEthereumChainId.ts index 35ef6ef6f..9e9fcc0f4 100644 --- a/src/networks/hooks/useConnectedOrDefaultChainId.ts +++ b/src/networks/hooks/useConnectedOrDefaultEthereumChainId.ts @@ -1,17 +1,17 @@ import { useIsActive } from "../../hooks/useIsActive" -import { getDefaultProviderChainId } from "../../utils/getEnvVariable" +import { getEthereumDefaultProviderChainId } from "../../utils/getEnvVariable" import { isMainnetChainId } from "../utils" -export const useConnectedOrDefaultChainId = () => { +export const useConnectedOrDefaultEthereumChainId = () => { const { chainId } = useIsActive() - const defaultChainId = getDefaultProviderChainId() + const defaultEthereumChainId = getEthereumDefaultProviderChainId() // If no chain is connected, use the default chain. - if (!chainId) return defaultChainId + if (!chainId) return defaultEthereumChainId const isActiveMainnet = isMainnetChainId(chainId) - const isDefaultMainnet = isMainnetChainId(defaultChainId) + const isDefaultMainnet = isMainnetChainId(defaultEthereumChainId) // Return the connected chainId if it matches the default provider’s network type. - return isActiveMainnet === isDefaultMainnet ? chainId : defaultChainId + return isActiveMainnet === isDefaultMainnet ? chainId : defaultEthereumChainId } diff --git a/src/networks/utils/connectedNetwork.ts b/src/networks/utils/connectedNetwork.ts index ba888f3ae..407e53adf 100644 --- a/src/networks/utils/connectedNetwork.ts +++ b/src/networks/utils/connectedNetwork.ts @@ -1,4 +1,4 @@ -import { getChainIdToNetworkName } from "./getChainIdToNetworkName" +import { getEthereumNetworkNameFromChainId } from "./getEthereumNetworkNameFromChainId" import { l1MainnetNetworks, l1TestNetworks, @@ -9,7 +9,7 @@ import { } from "./mappings" export const isSupportedNetwork = (chainId?: string | number): boolean => { - return getChainIdToNetworkName(chainId) !== "Unsupported" + return getEthereumNetworkNameFromChainId(chainId) !== "Unsupported" } export const isTestnetChainId = (networkChainId: string | number): boolean => { diff --git a/src/networks/utils/getChainIdToNetworkName.ts b/src/networks/utils/getChainIdToNetworkName.ts deleted file mode 100644 index 78df2016f..000000000 --- a/src/networks/utils/getChainIdToNetworkName.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { getDefaultProviderChainId } from "../../utils/getEnvVariable" -import { isMainnetChainId, isTestnetChainId } from "./connectedNetwork" -import { networks } from "./networks" - -function findSupportedNetwork(chainId?: number | string) { - if (!chainId) return null - - const chainIdNumber = Number(chainId) - const defaultChainId = getDefaultProviderChainId() - - return networks.find((network) => - isMainnetChainId(defaultChainId) - ? network.chainId === chainIdNumber && isMainnetChainId(network.chainId) - : network.chainId === chainIdNumber && isTestnetChainId(network.chainId) - ) -} - -export function getChainIdToNetworkName(chainId?: number | string): string { - return findSupportedNetwork(chainId)?.name ?? "Unsupported" -} - -export function chainIdToChainParameterName(chainId?: number | string): string { - return ( - findSupportedNetwork(chainId)?.chainParameters?.chainName ?? "Unsupported" - ) -} diff --git a/src/networks/utils/getEthereumNetworkNameFromChainId.ts b/src/networks/utils/getEthereumNetworkNameFromChainId.ts new file mode 100644 index 000000000..6a166eea2 --- /dev/null +++ b/src/networks/utils/getEthereumNetworkNameFromChainId.ts @@ -0,0 +1,34 @@ +import { getEthereumDefaultProviderChainId } from "../../utils/getEnvVariable" +import { Network } from "../types/networks" +import { isMainnetChainId, isTestnetChainId } from "./connectedNetwork" +import { networks } from "./networks" + +function findEthereumSupportedNetwork( + chainId?: number | string +): Network | null { + if (!chainId) return null + + const chainIdNumber = Number(chainId) + const defaultChainId = getEthereumDefaultProviderChainId() + + const ethereumSupporterdNetwork = networks.find((network) => + isMainnetChainId(defaultChainId) + ? network.chainId === chainIdNumber && isMainnetChainId(network.chainId) + : network.chainId === chainIdNumber && isTestnetChainId(network.chainId) + ) + + return ethereumSupporterdNetwork ? ethereumSupporterdNetwork : null +} + +export function getEthereumNetworkNameFromChainId( + chainId?: number | string +): string { + return findEthereumSupportedNetwork(chainId)?.name ?? "Unsupported" +} + +export function getParameterNameFromChainId(chainId?: number | string): string { + return ( + findEthereumSupportedNetwork(chainId)?.chainParameters?.chainName ?? + "Unsupported" + ) +} diff --git a/src/networks/utils/getRpcUrl.ts b/src/networks/utils/getRpcUrl.ts index 5d338c696..d352bcd20 100644 --- a/src/networks/utils/getRpcUrl.ts +++ b/src/networks/utils/getRpcUrl.ts @@ -1,6 +1,6 @@ import { EnvVariable } from "../../enums" import { - getDefaultProviderChainId, + getEthereumDefaultProviderChainId, getEnvVariable, } from "../../utils/getEnvVariable" import { SupportedChainIds } from "../enums/networks" @@ -10,7 +10,7 @@ const MAIN_ALCHEMY_URL = "g.alchemy.com/v2/" export const getRpcUrl = (chainId?: number | string) => { const alchemyApiKey = getEnvVariable(EnvVariable.ALCHEMY_API_KEY) - const defaultChainId = getDefaultProviderChainId() + const defaultChainId = getEthereumDefaultProviderChainId() const chainIdNum = Number(chainId) || defaultChainId const alchemyConfig = networksAlchemyConfig[chainIdNum as SupportedChainIds] diff --git a/src/networks/utils/index.ts b/src/networks/utils/index.ts index fb5a4fab6..0e4b1e382 100644 --- a/src/networks/utils/index.ts +++ b/src/networks/utils/index.ts @@ -1,5 +1,5 @@ export * from "./chainId" -export * from "./getChainIdToNetworkName" +export * from "./getEthereumNetworkNameFromChainId" export * from "./connectedNetwork" export * from "./createExplorerLink" export * from "./getRpcUrl" diff --git a/src/pages/tBTC/Bridge/DepositDetails.tsx b/src/pages/tBTC/Bridge/DepositDetails.tsx index be542edff..7216e3849 100644 --- a/src/pages/tBTC/Bridge/DepositDetails.tsx +++ b/src/pages/tBTC/Bridge/DepositDetails.tsx @@ -74,7 +74,7 @@ import { useFetchExternalPoolData } from "../../../hooks/useFetchExternalPoolDat import { TransactionDetailsAmountItem } from "../../../components/TransactionDetails" import { BridgeProcessDetailsPageSkeleton } from "./components/BridgeProcessDetailsPageSkeleton" import { DepositState } from "@keep-network/tbtc-v2.ts" -import { chainIdToChainParameterName } from "../../../networks/utils" +import { getParameterNameFromChainId } from "../../../networks/utils" import { useIsActive } from "../../../hooks/useIsActive" export const DepositDetails: PageComponent = () => { @@ -578,7 +578,7 @@ const StepSwitcher: FC = () => { {isCrossChainDeposit ? ( Your tokens have been minted and bridged to the depositor wallet - on the {chainIdToChainParameterName(chainId)} network - This + on the {getParameterNameFromChainId(chainId)} network - This action usually takes a few minutes to complete this process. ) : ( diff --git a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx index 799f289a9..3af522844 100644 --- a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx +++ b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx @@ -20,7 +20,7 @@ import { } from "../../../../utils/forms" import { SupportedChainIds } from "../../../../networks/enums/networks" import { - getChainIdToNetworkName, + getEthereumNetworkNameFromChainId, isL1Network, isSupportedNetwork, isTestnetChainId, @@ -154,7 +154,7 @@ export const ProvideDataComponent: FC<{ ) } - const chainName = getChainIdToNetworkName(chainId) + const chainName = getEthereumNetworkNameFromChainId(chainId) setSubmitButtonLoading(true) diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index 2e0626361..d37af4699 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -10,7 +10,7 @@ import { isAddress, isAddressZero } from "../../web3/utils" import { AppListenerEffectAPI } from "../listener" import { tbtcSlice } from "./tbtcSlice" import { - getChainIdToNetworkName, + getEthereumNetworkNameFromChainId, isL1Network, isSameChainId, } from "../../networks/utils" @@ -85,7 +85,7 @@ export const findUtxoEffect = async ( const pollingTask = listenerApi.fork(async (forkApi) => { try { while (true) { - if (getChainIdToNetworkName(chainId) !== chainName) { + if (getEthereumNetworkNameFromChainId(chainId) !== chainName) { throw new Error("Chain ID and deposit chain name mismatch") } // Initiating deposit from redux store (if deposit object is empty) diff --git a/src/utils/getEnvVariable.ts b/src/utils/getEnvVariable.ts index db1e0eed8..99428b150 100644 --- a/src/utils/getEnvVariable.ts +++ b/src/utils/getEnvVariable.ts @@ -14,7 +14,7 @@ export const getEnvVariable = (envVar: EnvVariableKey) => { return envMap[envVar] } -export const getDefaultProviderChainId = () => { +export const getEthereumDefaultProviderChainId = () => { const chainId = getEnvVariable(EnvVariable.DEFAULT_PROVIDER_CHAIN_ID) if (!chainId || isNaN(+chainId)) { diff --git a/src/utils/getLedgerLiveAppEthereumSigner.ts b/src/utils/getLedgerLiveAppEthereumSigner.ts index 04438d62c..240002016 100644 --- a/src/utils/getLedgerLiveAppEthereumSigner.ts +++ b/src/utils/getLedgerLiveAppEthereumSigner.ts @@ -1,9 +1,9 @@ import { LedgerLiveSigner } from "./ledger" import { getThresholdLibProvider } from "./getThresholdLib" -import { getDefaultProviderChainId } from "./getEnvVariable" +import { getEthereumDefaultProviderChainId } from "./getEnvVariable" export const getLedgerLiveAppEthereumSigner = (chainId?: number | string) => { - const providerChainId = chainId || getDefaultProviderChainId() + const providerChainId = chainId || getEthereumDefaultProviderChainId() const provider = getThresholdLibProvider(providerChainId) return new LedgerLiveSigner(provider) } diff --git a/src/utils/getThresholdLib.ts b/src/utils/getThresholdLib.ts index 74f41f4b0..47a440caf 100644 --- a/src/utils/getThresholdLib.ts +++ b/src/utils/getThresholdLib.ts @@ -3,7 +3,7 @@ import { Signer } from "ethers" import { Threshold } from "../threshold-ts" import { EnvVariable } from "../enums" import { - getDefaultProviderChainId, + getEthereumDefaultProviderChainId, getEnvVariable, shouldUseTestnetDevelopmentContracts, } from "../utils/getEnvVariable" @@ -22,13 +22,13 @@ import { import { SupportedChainIds } from "../networks/enums/networks" import { getDefaultBitcoinCredentials } from "./getDefaultBitcoinCredentials" -const defaultProviderChainId = getDefaultProviderChainId() +const defaultProviderChainId = getEthereumDefaultProviderChainId() function getInitialEthereumConfig( providerOrSigner?: Provider | Signer ): EthereumConfig { return { - chainId: getDefaultProviderChainId(), + chainId: getEthereumDefaultProviderChainId(), providerOrSigner: providerOrSigner || getThresholdLibProvider(defaultProviderChainId), shouldUseTestnetDevelopmentContracts: @@ -57,7 +57,7 @@ function getInitialBitcoinConfig(): BitcoinConfig { export const getThresholdLibProvider = (chainId?: number | string) => { const supportedChainId = isSupportedNetwork(chainId) ? Number(chainId) - : getDefaultProviderChainId() + : getEthereumDefaultProviderChainId() const rpcUrl = getRpcUrl(supportedChainId) diff --git a/src/web3/connectors/ledgerLive.ts b/src/web3/connectors/ledgerLive.ts index a2e779669..17bc489c2 100644 --- a/src/web3/connectors/ledgerLive.ts +++ b/src/web3/connectors/ledgerLive.ts @@ -12,7 +12,7 @@ import { getRpcUrl, networks, supportedNetworks as supportedNetworksMap, - getChainIdToNetworkName, + getEthereumNetworkNameFromChainId, } from "../../networks/utils" import { EthereumRpcMap } from "../../networks/types/networks" @@ -92,7 +92,7 @@ export class LedgerLiveConnector extends AbstractConnector { if (!checkSupportResult.isChainIdSupported) { throw new Error( - `The ${getChainIdToNetworkName( + `The ${getEthereumNetworkNameFromChainId( chainId )} network is not supported by LedgerLive.` ) diff --git a/src/web3/hooks/useKeep.ts b/src/web3/hooks/useKeep.ts index 05859e91a..7ad94c292 100644 --- a/src/web3/hooks/useKeep.ts +++ b/src/web3/hooks/useKeep.ts @@ -5,7 +5,7 @@ import { TransactionType } from "../../enums/transactionType" import { Contract } from "@ethersproject/contracts" import { AddressZero } from "@ethersproject/constants" import { SupportedChainIds } from "../../networks/enums/networks" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" export const KEEP_ADDRESSES = { // https://etherscan.io/address/0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC @@ -24,7 +24,7 @@ export interface UseKeep { } export const useKeep: UseKeep = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() const { balanceOf, approve, contract } = useErc20TokenContract( KEEP_ADDRESSES[Number(defaultOrConnectedChainId)], diff --git a/src/web3/hooks/useKeepBondingContract.ts b/src/web3/hooks/useKeepBondingContract.ts index ef0c5bfce..6b52424a3 100644 --- a/src/web3/hooks/useKeepBondingContract.ts +++ b/src/web3/hooks/useKeepBondingContract.ts @@ -2,7 +2,7 @@ import { AddressZero } from "@ethersproject/constants" import { SupportedChainIds } from "../../networks/enums/networks" import { useContract } from "./useContract" import KeepBonding from "@keep-network/keep-ecdsa/artifacts/KeepBonding.json" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" const KEEP_BONDING_ADDRESSES = { // https://etherscan.io/address/0x27321f84704a599aB740281E285cc4463d89A3D5 @@ -12,7 +12,7 @@ const KEEP_BONDING_ADDRESSES = { } as Record export const useKeepBondingContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useContract( KEEP_BONDING_ADDRESSES[Number(defaultOrConnectedChainId)], diff --git a/src/web3/hooks/useKeepTokenStakingContract.ts b/src/web3/hooks/useKeepTokenStakingContract.ts index 7cd0b1b54..abb62b2f1 100644 --- a/src/web3/hooks/useKeepTokenStakingContract.ts +++ b/src/web3/hooks/useKeepTokenStakingContract.ts @@ -2,7 +2,7 @@ import KeepTokenStaking from "@keep-network/keep-core/artifacts/TokenStaking.jso import { useContract } from "./useContract" import { SupportedChainIds } from "../../networks/enums/networks" import { AddressZero } from "@ethersproject/constants" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" const KEEP_STAKING_ADDRESSES = { // https://etherscan.io/address/0x1293a54e160D1cd7075487898d65266081A15458 @@ -11,7 +11,7 @@ const KEEP_STAKING_ADDRESSES = { } as Record export const useKeepTokenStakingContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useContract( KEEP_STAKING_ADDRESSES[Number(defaultOrConnectedChainId)], diff --git a/src/web3/hooks/useMerkleDropContract.ts b/src/web3/hooks/useMerkleDropContract.ts index e7025c68e..3e3b57271 100644 --- a/src/web3/hooks/useMerkleDropContract.ts +++ b/src/web3/hooks/useMerkleDropContract.ts @@ -2,7 +2,7 @@ import CumulativeMerkleDropABI from "../abi/CumulativeMerkleDrop.json" import { useContract } from "./useContract" import { AddressZero } from "../utils" import { SupportedChainIds } from "../../networks/enums/networks" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" const DEPLOYMENT_BLOCKS: { [key: number]: number } = { [SupportedChainIds.Ethereum]: 15146501, @@ -23,7 +23,7 @@ export const getMerkleDropDeploymentBlock = (chainId?: string | number) => { } export const useMerkleDropContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useContract( MERKLE_DROP_ADDRESSES[Number(defaultOrConnectedChainId)], diff --git a/src/web3/hooks/useMulticallContract.ts b/src/web3/hooks/useMulticallContract.ts index f383768c9..2cf8800a5 100644 --- a/src/web3/hooks/useMulticallContract.ts +++ b/src/web3/hooks/useMulticallContract.ts @@ -1,6 +1,6 @@ import { useContract } from "./useContract" import { MULTICALL_ADDRESSES } from "../../threshold-ts/multicall" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" const MULTICALL_ABI = [ "function aggregate(tuple(address target, bytes callData)[] calls) view returns (uint256 blockNumber, bytes[] returnData)", @@ -8,7 +8,7 @@ const MULTICALL_ABI = [ ] export const useMulticallContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useContract( MULTICALL_ADDRESSES[Number(defaultOrConnectedChainId)], diff --git a/src/web3/hooks/useT.ts b/src/web3/hooks/useT.ts index 96981d84d..6043bb89e 100644 --- a/src/web3/hooks/useT.ts +++ b/src/web3/hooks/useT.ts @@ -4,7 +4,7 @@ import { useErc20TokenContract } from "./useERC20" import { Token, TransactionType } from "../../enums" import { AddressZero } from "@ethersproject/constants" import { SupportedChainIds } from "../../networks/enums/networks" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" export const T_ADDRESSES = { // https://etherscan.io/address/0xCdF7028ceAB81fA0C6971208e83fa7872994beE5 @@ -23,7 +23,7 @@ export interface UseT { } export const useT: UseT = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() const { balanceOf, approve, contract } = useErc20TokenContract( T_ADDRESSES[Number(defaultOrConnectedChainId)], undefined, diff --git a/src/web3/hooks/useTBTCTokenContract.ts b/src/web3/hooks/useTBTCTokenContract.ts index 7a91e0cd7..0aca54952 100644 --- a/src/web3/hooks/useTBTCTokenContract.ts +++ b/src/web3/hooks/useTBTCTokenContract.ts @@ -1,7 +1,7 @@ import { useErc20TokenContract } from "./useERC20" import { AddressZero } from "@ethersproject/constants" import { SupportedChainIds } from "../../networks/enums/networks" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" export const TBTC_ADDRESSES = { // https://etherscan.io/address/0x8dAEBADE922dF735c38C80C7eBD708Af50815fAa @@ -10,7 +10,7 @@ export const TBTC_ADDRESSES = { } as Record export const useTBTCTokenContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useErc20TokenContract( TBTC_ADDRESSES[Number(defaultOrConnectedChainId)] ) diff --git a/src/web3/hooks/useTBTCv2TokenContract.ts b/src/web3/hooks/useTBTCv2TokenContract.ts index a3aa8b931..cd201feaf 100644 --- a/src/web3/hooks/useTBTCv2TokenContract.ts +++ b/src/web3/hooks/useTBTCv2TokenContract.ts @@ -1,7 +1,7 @@ import { useErc20TokenContract } from "./useERC20" import { AddressZero } from "@ethersproject/constants" import { SupportedChainIds } from "../../networks/enums/networks" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" export const TBTCV2_ADDRESSES = { // https://etherscan.io/address/0x18084fbA666a33d37592fA2633fD49a74DD93a88 @@ -20,7 +20,7 @@ export const TBTCV2_ADDRESSES = { // Threshold class instance. A separate, independent instance for the TBTC v2 token is needed to // handle network changes smoothly within the app's lifecycle. export const useTBTCv2TokenContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useErc20TokenContract( TBTCV2_ADDRESSES[Number(defaultOrConnectedChainId)] ) diff --git a/src/web3/hooks/useTStakingContract.ts b/src/web3/hooks/useTStakingContract.ts index 8c470dd9b..347f4b099 100644 --- a/src/web3/hooks/useTStakingContract.ts +++ b/src/web3/hooks/useTStakingContract.ts @@ -2,7 +2,7 @@ import TokenStakingABI from "../abi/TokenStaking.json" import { useContract } from "./useContract" import { SupportedChainIds } from "../../networks/enums/networks" import { AddressZero } from "@ethersproject/constants" -import { useConnectedOrDefaultChainId } from "../../networks/hooks/useConnectedOrDefaultChainId" +import { useConnectedOrDefaultEthereumChainId } from "../../networks/hooks/useConnectedOrDefaultEthereumChainId" const DEPLOYMENT_BLOCKS: { [key: number]: number } = { [SupportedChainIds.Ethereum]: 14113768, @@ -23,7 +23,7 @@ export const getTStakingDeploymentBlock = (chainId?: number | string) => { } export const useTStakingContract = () => { - const defaultOrConnectedChainId = useConnectedOrDefaultChainId() + const defaultOrConnectedChainId = useConnectedOrDefaultEthereumChainId() return useContract( T_STAKING_ADDRESSES[Number(defaultOrConnectedChainId)], From 8a044b055ff7e9c5e7d8fceceda167859c632f3f Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Sat, 5 Apr 2025 18:49:15 -0300 Subject: [PATCH 5/8] refactor: update ethereum network terms --- .../AdvancedParamsForm.tsx | 6 ++-- .../MapOperatorToStakingProviderForm.tsx | 6 ++-- .../index.tsx | 8 +++--- .../Modal/NewAppsToAuthorizeModal/index.tsx | 6 ++-- src/hooks/posthog/useIdentify.ts | 2 +- .../useAuthorizeMultipleAppsTransaction.ts | 8 +++--- .../useSubscribeToOperatorRegisteredEvent.ts | 4 +-- src/hooks/tbtc/useDepositTelemetry.ts | 6 ++-- .../useSubscribeToRedemptionRequestedEvent.ts | 4 +-- .../tbtc/useSubsribeToDepositRevealedEvent.ts | 4 +-- src/hooks/useTbtcState.ts | 2 +- .../Staking/AuthorizeStakingApps/index.tsx | 10 +++++-- src/pages/Staking/StakeCard/index.tsx | 4 +-- .../StakeDetailsPage/StakeDetailRow.tsx | 8 +++--- src/pages/Staking/StakeDetailsPage/index.tsx | 10 +++---- src/pages/tBTC/Bridge/Minting/MakeDeposit.tsx | 10 +++++-- .../components/BridgeProcessEmptyState.tsx | 2 +- .../components/MintingTransactionDetails.tsx | 4 +-- src/posthog/index.ts | 8 ++++-- src/store/account/effects.ts | 4 +-- src/store/account/slice.ts | 4 +-- src/store/staking/effects.ts | 4 +-- src/store/staking/selectors.ts | 4 +-- src/store/tbtc/effects.ts | 6 ++-- src/tbtc/mock-bitcoin-client.ts | 4 +-- .../__tests__/application.test.ts | 2 +- src/threshold-ts/applications/index.ts | 13 ++++++--- src/threshold-ts/mas/__test__/mas.test.ts | 2 +- .../multicall/__test__/multicall.test.ts | 6 ++-- src/threshold-ts/multicall/index.ts | 2 +- .../staking/__test__/staking.test.ts | 8 +++--- src/threshold-ts/staking/index.ts | 16 +++++------ src/threshold-ts/tbtc/__test__/tbtc.test.ts | 28 +++++++++++-------- src/threshold-ts/utils/address.ts | 10 +++---- src/threshold-ts/utils/constants.ts | 3 +- src/threshold-ts/utils/contract.ts | 10 +++---- .../__tests__/vending-machine.test.ts | 4 +-- src/threshold-ts/vending-machine/index.ts | 2 +- src/types/tbtc.ts | 2 +- src/utils/verifyDepositAddress.ts | 4 +-- src/web3/hooks/useGetBlock.ts | 11 ++++---- .../hooks/useSubscribeToERC20TransferEvent.ts | 6 ++-- src/web3/hooks/useVendingMachineRatio.ts | 4 +-- 43 files changed, 146 insertions(+), 125 deletions(-) diff --git a/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx b/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx index dbe83dea5..c4b62fce7 100644 --- a/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx +++ b/src/components/Modal/ConfirmStakingParams/AdvancedParamsForm.tsx @@ -8,7 +8,7 @@ import { BodyXs, useColorModeValue, } from "@threshold-network/components" -import { isAddress, isSameETHAddress } from "../../../web3/utils" +import { isEthereumAddress, isSameAddress } from "../../../web3/utils" import Link from "../../Link" import { useIsActive } from "../../../hooks/useIsActive" @@ -52,8 +52,8 @@ const AdvancedParamsFormBase: FC> = ({ } /> - {isAddress(authorizer) && - !isSameETHAddress(authorizer, account as string) && ( + {isEthereumAddress(authorizer) && + !isSameAddress(authorizer, account as string) && ( diff --git a/src/components/Modal/MapOperatorToStakingProviderModal/MapOperatorToStakingProviderForm.tsx b/src/components/Modal/MapOperatorToStakingProviderModal/MapOperatorToStakingProviderForm.tsx index 7a56601a8..9f7b01a7a 100644 --- a/src/components/Modal/MapOperatorToStakingProviderModal/MapOperatorToStakingProviderForm.tsx +++ b/src/components/Modal/MapOperatorToStakingProviderModal/MapOperatorToStakingProviderForm.tsx @@ -2,7 +2,7 @@ import { FC, Ref, forwardRef } from "react" import { FormikProps, FormikErrors, Formik, withFormik } from "formik" import { Form, FormikInput } from "../../Forms" import { getErrorsObj, validateETHAddress } from "../../../utils/forms" -import { isAddressZero, isSameETHAddress } from "../../../web3/utils" +import { isAddressZero, isSameAddress } from "../../../web3/utils" export type MapOperatorToStakingProviderFormValues = { operator: string @@ -56,14 +56,14 @@ const validateInputtedOperatorAddress = async ( if ( isOperatorMappedOnlyInRandomBeacon && - !isSameETHAddress(operator, mappedOperatorRandomBeacon) + !isSameAddress(operator, mappedOperatorRandomBeacon) ) { validationMsg = "The operator address doesn't match the one used in random beacon app" } if ( isOperatorMappedOnlyInTbtc && - !isSameETHAddress(operator, mappedOperatorTbtc) + !isSameAddress(operator, mappedOperatorTbtc) ) { validationMsg = "The operator address doesn't match the one used in tbtc app" diff --git a/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx b/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx index 084b76139..3c0f3e952 100644 --- a/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx +++ b/src/components/Modal/MapOperatorToStakingProviderModal/index.tsx @@ -26,7 +26,7 @@ import { useThreshold } from "../../../contexts/ThresholdContext" import { isAddressZero, isEmptyOrZeroAddress, - isSameETHAddress, + isSameAddress, AddressZero, } from "../../../web3/utils" import { selectMappedOperators } from "../../../store/account/selectors" @@ -85,7 +85,7 @@ const MapOperatorToStakingProviderModal: FC< )! return ( !isAddressZero(stakingProviderMappedEcdsa) && - !isSameETHAddress(stakingProviderMappedEcdsa, account!) + !isSameAddress(stakingProviderMappedEcdsa, account!) ) case "randomBeacon": const stakingProviderMappedRandomBeacon = @@ -94,7 +94,7 @@ const MapOperatorToStakingProviderModal: FC< )! return ( !isAddressZero(stakingProviderMappedRandomBeacon) && - !isSameETHAddress(stakingProviderMappedRandomBeacon, account!) + !isSameAddress(stakingProviderMappedRandomBeacon, account!) ) case "taco": stakingProviderMapped = @@ -103,7 +103,7 @@ const MapOperatorToStakingProviderModal: FC< )! return ( !isAddressZero(stakingProviderMapped) && - !isSameETHAddress(stakingProviderMapped, account!) + !isSameAddress(stakingProviderMapped, account!) ) default: throw new Error(`Unsupported app name: ${appName}`) diff --git a/src/components/Modal/NewAppsToAuthorizeModal/index.tsx b/src/components/Modal/NewAppsToAuthorizeModal/index.tsx index 3a74d890d..ccde408fb 100644 --- a/src/components/Modal/NewAppsToAuthorizeModal/index.tsx +++ b/src/components/Modal/NewAppsToAuthorizeModal/index.tsx @@ -24,7 +24,7 @@ import { BaseModalProps } from "../../../types" import withBaseModal from "../withBaseModal" import { useStakingState } from "../../../hooks/useStakingState" import { getStakeTitle } from "../../../utils/getStakeTitle" -import { isAddress, isSameETHAddress } from "../../../web3/utils" +import { isEthereumAddress, isSameAddress } from "../../../web3/utils" import ButtonLink from "../../ButtonLink" import ModalCloseButton from "../ModalCloseButton" @@ -62,8 +62,8 @@ const NewAppsToAuthorizeModal: FC = ({ closeModal }) => { key={stake.stakingProvider} boxShadow="none" borderColor={ - isAddress(selectedProviderAddress) && - isSameETHAddress( + isEthereumAddress(selectedProviderAddress) && + isSameAddress( stake.stakingProvider, selectedProviderAddress ) diff --git a/src/hooks/posthog/useIdentify.ts b/src/hooks/posthog/useIdentify.ts index 2bdf21f7f..7e7940881 100644 --- a/src/hooks/posthog/useIdentify.ts +++ b/src/hooks/posthog/useIdentify.ts @@ -44,7 +44,7 @@ export const useIdentify = () => { // } else if ( // update.account && // account && - // !isSameETHAddress(update.account, account) + // !isSameAddress(update.account, account) // ) { // posthog.reset() diff --git a/src/hooks/staking-applications/useAuthorizeMultipleAppsTransaction.ts b/src/hooks/staking-applications/useAuthorizeMultipleAppsTransaction.ts index 77fc0cb60..b3be9acee 100644 --- a/src/hooks/staking-applications/useAuthorizeMultipleAppsTransaction.ts +++ b/src/hooks/staking-applications/useAuthorizeMultipleAppsTransaction.ts @@ -1,7 +1,7 @@ import { useCallback } from "react" import { useThreshold } from "../../contexts/ThresholdContext" import { useSendTransactionFromFn } from "../../web3/hooks" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { useStakingApplicationAddress } from "./useStakingApplicationAddress" import { useModal } from "../useModal" import { ModalType } from "../../enums" @@ -31,9 +31,9 @@ export const useAuthorizeMultipleAppsTransaction = () => { const includesOnlySupportedApps = applications.every( (_) => - isSameETHAddress(_.address, tbtcAppAddress) || - isSameETHAddress(_.address, randomBeaconAppAddress) || - isSameETHAddress(_.address, tacoAppAddress) + isSameAddress(_.address, tbtcAppAddress) || + isSameAddress(_.address, randomBeaconAppAddress) || + isSameAddress(_.address, tacoAppAddress) ) if (!includesOnlySupportedApps) diff --git a/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts b/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts index 4b6562ed2..d09898884 100644 --- a/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts +++ b/src/hooks/staking-applications/useSubscribeToOperatorRegisteredEvent.ts @@ -1,7 +1,7 @@ import { operatorRegistered } from "../../store/account" import { StakingAppName } from "../../store/staking-applications" import { useSubscribeToContractEvent } from "../../web3/hooks" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { useAppDispatch } from "../store" import { useIsActive } from "../useIsActive" import { useStakingAppContract } from "./useStakingAppContract" @@ -18,7 +18,7 @@ export const useSubscribeToOperatorRegisteredEvent = ( "OperatorRegistered", //@ts-ignore async (stakingProvider: string, operator: string) => { - if (account && isSameETHAddress(stakingProvider, account)) { + if (account && isSameAddress(stakingProvider, account)) { dispatch( operatorRegistered({ appName, diff --git a/src/hooks/tbtc/useDepositTelemetry.ts b/src/hooks/tbtc/useDepositTelemetry.ts index c4734ea85..8e13e43d6 100644 --- a/src/hooks/tbtc/useDepositTelemetry.ts +++ b/src/hooks/tbtc/useDepositTelemetry.ts @@ -8,10 +8,10 @@ export const useDepositTelemetry = (network: BitcoinNetwork) => { const captureMessage = useCaptureMessage() return useCallback( - async (deposit: DepositReceipt, depositAddress: string) => { + async (deposit: DepositReceipt, btcDepositAddress: string) => { const { status, response } = await verifyDepositAddress( deposit, - depositAddress, + btcDepositAddress, network ) @@ -25,7 +25,7 @@ export const useDepositTelemetry = (network: BitcoinNetwork) => { } = deposit captureMessage( - `Generated deposit [${depositAddress}]`, + `Generated deposit [${btcDepositAddress}]`, { depositor: depositor.identifierHex, blindingFactor: blindingFactor.toString(), diff --git a/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts b/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts index 5c10a9db2..9ec53acd0 100644 --- a/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts +++ b/src/hooks/tbtc/useSubscribeToRedemptionRequestedEvent.ts @@ -1,5 +1,5 @@ import { useSubscribeToContractEvent } from "../../web3/hooks" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { useAppDispatch } from "../store" import { useBridgeContract } from "./useBridgeContract" import { tbtcSlice } from "../../store/tbtc" @@ -27,7 +27,7 @@ export const useSubscribeToRedemptionRequestedEvent = () => { txMaxFee: BigNumber, event: Event ) => { - if (!account || !isSameETHAddress(redeemer, account)) return + if (!account || !isSameAddress(redeemer, account)) return const redemptionKey = threshold.tbtc.buildRedemptionKey( walletPublicKeyHash, diff --git a/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts b/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts index 5dde681f3..61b20082c 100644 --- a/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts +++ b/src/hooks/tbtc/useSubsribeToDepositRevealedEvent.ts @@ -1,5 +1,5 @@ import { useSubscribeToContractEvent } from "../../web3/hooks" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { useAppDispatch } from "../store" import { useBridgeContract } from "./useBridgeContract" import { tbtcSlice } from "../../store/tbtc" @@ -31,7 +31,7 @@ export const useSubscribeToDepositRevealedEvent = () => { vault: string, event: Event ) => { - if (!account || !isSameETHAddress(depositor, account)) return + if (!account || !isSameAddress(depositor, account)) return const { amountToMint } = await threshold.tbtc.getEstimatedDepositFees( amount.toString() diff --git a/src/hooks/useTbtcState.ts b/src/hooks/useTbtcState.ts index 326e6e185..2d2b316fd 100644 --- a/src/hooks/useTbtcState.ts +++ b/src/hooks/useTbtcState.ts @@ -15,7 +15,7 @@ export const useTbtcState: UseTbtcState = () => { ) const resetDepositData = useCallback(() => { - updateState("ethAddress", undefined) + updateState("userWalletAddress", undefined) updateState("blindingFactor", undefined) updateState("btcRecoveryAddress", undefined) updateState("walletPublicKeyHash", undefined) diff --git a/src/pages/Staking/AuthorizeStakingApps/index.tsx b/src/pages/Staking/AuthorizeStakingApps/index.tsx index c218e5bfc..652babed5 100644 --- a/src/pages/Staking/AuthorizeStakingApps/index.tsx +++ b/src/pages/Staking/AuthorizeStakingApps/index.tsx @@ -15,7 +15,11 @@ import { useSelector } from "react-redux" import { useNavigate, useParams } from "react-router-dom" import { RootState } from "../../../store" import { StakeData } from "../../../types" -import { AddressZero, isSameETHAddress, isAddress } from "../../../web3/utils" +import { + AddressZero, + isSameAddress, + isEthereumAddress, +} from "../../../web3/utils" import { StakeCardHeaderTitle } from "../StakeCard/Header/HeaderTitle" import AuthorizeApplicationsCardCheckbox, { AppAuthDataProps, @@ -73,7 +77,7 @@ const AuthorizeStakingAppsPage: FC = () => { } useEffect(() => { - if (!isAddress(stakingProviderAddress!)) navigate(`/staking`) + if (!isEthereumAddress(stakingProviderAddress!)) navigate(`/staking`) }, [stakingProviderAddress, navigate]) useEffect(() => { @@ -164,7 +168,7 @@ const AuthorizeStakingAppsPage: FC = () => { ) as StakeData const isLoggedInAsAuthorizer = - stake && account ? isSameETHAddress(stake.authorizer, account) : false + stake && account ? isSameAddress(stake.authorizer, account) : false const isInactiveStake = stake ? BigNumber.from(stake?.totalInTStake).isZero() diff --git a/src/pages/Staking/StakeCard/index.tsx b/src/pages/Staking/StakeCard/index.tsx index b00783a85..cdfc1d946 100644 --- a/src/pages/Staking/StakeCard/index.tsx +++ b/src/pages/Staking/StakeCard/index.tsx @@ -32,7 +32,7 @@ import StakeAddressInfo from "./StakeAddressInfo" import { featureFlags } from "../../../constants" import { StakeCardContext } from "../../../contexts/StakeCardContext" import { useStakeCardContext } from "../../../hooks/useStakeCardContext" -import { isSameETHAddress } from "../../../threshold-ts/utils" +import { isSameAddress } from "../../../threshold-ts/utils" import { useAppSelector } from "../../../hooks/store" import { selectAvailableAmountToUnstakeByStakingProvider } from "../../../store/staking" import { UnstakingFormLabel } from "../../../components/UnstakingFormLabel" @@ -72,7 +72,7 @@ const StakeCard: FC<{ stake: StakeData }> = ({ stake }) => { ) ) - const isOwner = isSameETHAddress(account ?? AddressZero, stake.owner) + const isOwner = isSameAddress(account ?? AddressZero, stake.owner) const submitButtonText = !isStakeAction ? "Unstake" : "Top-up" diff --git a/src/pages/Staking/StakeDetailsPage/StakeDetailRow.tsx b/src/pages/Staking/StakeDetailsPage/StakeDetailRow.tsx index 0ac3420b6..3f9ef51ea 100644 --- a/src/pages/Staking/StakeDetailsPage/StakeDetailRow.tsx +++ b/src/pages/Staking/StakeDetailsPage/StakeDetailRow.tsx @@ -8,11 +8,11 @@ type CommonProps = { } type ConditionalProps = | { - isAddress?: false + isEthereumAddress?: false address?: never } | { - isAddress: true + isEthereumAddress: true address: string } @@ -20,7 +20,7 @@ type Props = CommonProps & ConditionalProps const StakeDetailRow: FC = ({ label, - isAddress, + isEthereumAddress, address, isPrimary, children, @@ -28,7 +28,7 @@ const StakeDetailRow: FC = ({ return ( {label} - {isAddress ? ( + {isEthereumAddress ? ( { const dispatch = useAppDispatch() useEffect(() => { - if (!isAddress(stakingProviderAddress!)) navigate(`/staking`) + if (!isEthereumAddress(stakingProviderAddress!)) navigate(`/staking`) }, [stakingProviderAddress, navigate]) useEffect(() => { @@ -146,17 +146,17 @@ const StakeDetailsPage: FC = () => { diff --git a/src/pages/tBTC/Bridge/Minting/MakeDeposit.tsx b/src/pages/tBTC/Bridge/Minting/MakeDeposit.tsx index 4d405a05f..a95768639 100644 --- a/src/pages/tBTC/Bridge/Minting/MakeDeposit.tsx +++ b/src/pages/tBTC/Bridge/Minting/MakeDeposit.tsx @@ -137,8 +137,12 @@ const BTCAddressSection: FC<{ btcDepositAddress: string }> = ({ const MakeDepositComponent: FC<{ onPreviousStepClick: (previosuStep: MintingStep) => void }> = ({ onPreviousStepClick }) => { - const { btcDepositAddress, ethAddress, btcRecoveryAddress, updateState } = - useTbtcState() + const { + btcDepositAddress, + userWalletAddress, + btcRecoveryAddress, + updateState, + } = useTbtcState() // ↓ Ledger Live App ↓ const { isEmbed } = useIsEmbed() @@ -220,7 +224,7 @@ const MakeDepositComponent: FC<{ /> Provided Addresses Recap - +
{title}
- Connect Wallet + Connect Ethereum Wallet diff --git a/src/pages/tBTC/Bridge/components/MintingTransactionDetails.tsx b/src/pages/tBTC/Bridge/components/MintingTransactionDetails.tsx index 5d7b38571..fa45beef0 100644 --- a/src/pages/tBTC/Bridge/components/MintingTransactionDetails.tsx +++ b/src/pages/tBTC/Bridge/components/MintingTransactionDetails.tsx @@ -13,7 +13,7 @@ const MintingTransactionDetails = () => { tBTCMintAmount, mintingFee, thresholdNetworkFee, - ethAddress, + userWalletAddress, crossChainFee, } = useTbtcState() return ( @@ -39,7 +39,7 @@ const MintingTransactionDetails = () => { /> ) diff --git a/src/posthog/index.ts b/src/posthog/index.ts index 5fcb4adfc..27fd44383 100644 --- a/src/posthog/index.ts +++ b/src/posthog/index.ts @@ -22,11 +22,15 @@ export const init = () => { } export const identify = ( - ethAddress: string, + userWalletAddress: string, userPropertiesToSet?: Properties, userPropertiesToSetOnce?: Properties ) => { - posthog.identify(ethAddress, userPropertiesToSet, userPropertiesToSetOnce) + posthog.identify( + userWalletAddress, + userPropertiesToSet, + userPropertiesToSetOnce + ) } // Posthog automatically sends pageview events whenever it gets loaded. For a diff --git a/src/store/account/effects.ts b/src/store/account/effects.ts index e541eab5a..6b42d2946 100644 --- a/src/store/account/effects.ts +++ b/src/store/account/effects.ts @@ -1,5 +1,5 @@ import { StakeData } from "../../types" -import { isAddressZero, isSameETHAddress } from "../../web3/utils" +import { isAddressZero, isSameAddress } from "../../web3/utils" import { AppListenerEffectAPI } from "../listener" import { setStakes } from "../staking" import { @@ -38,7 +38,7 @@ export const getStakingProviderOperatorInfo = async ( return const stake = stakes.find((_: StakeData) => - isSameETHAddress(_.stakingProvider, address) + isSameAddress(_.stakingProvider, address) ) let isStakingProvider = false diff --git a/src/store/account/slice.ts b/src/store/account/slice.ts index 8f8f399c0..ab3cea2c0 100644 --- a/src/store/account/slice.ts +++ b/src/store/account/slice.ts @@ -2,7 +2,7 @@ import { AddressZero } from "@ethersproject/constants" import { AnyAction, createSlice, PayloadAction } from "@reduxjs/toolkit" import { featureFlags } from "../../constants" import { FetchingState, TrmState } from "../../types" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { startAppListening } from "../listener" import { providerStaked, @@ -134,7 +134,7 @@ export const accountSlice = createSlice({ const { address } = state - if (isSameETHAddress(stakingProvider, address)) { + if (isSameAddress(stakingProvider, address)) { state.isStakingProvider = true } } diff --git a/src/store/staking/effects.ts b/src/store/staking/effects.ts index 4180d3955..03827e56d 100644 --- a/src/store/staking/effects.ts +++ b/src/store/staking/effects.ts @@ -1,6 +1,6 @@ import { isSameChainId } from "../../networks/utils" import { StakeData } from "../../types" -import { isAddress, isAddressZero } from "../../web3/utils" +import { isEthereumAddress, isAddressZero } from "../../web3/utils" import { AppListenerEffectAPI } from "../listener" import { selectStakeByStakingProvider } from "./selectors" import { requestStakeByStakingProvider, setStakes } from "./stakingSlice" @@ -16,7 +16,7 @@ export const fetchStakeByStakingProviderEffect = async ( if ( !listenerApi.extra.threshold.staking || !stakingProvider || - !isAddress(stakingProvider) || + !isEthereumAddress(stakingProvider) || isAddressZero(stakingProvider) || !account.chainId || !isSameChainId(account.chainId, config.ethereum.chainId) diff --git a/src/store/staking/selectors.ts b/src/store/staking/selectors.ts index 6704c3180..9ec0c023f 100644 --- a/src/store/staking/selectors.ts +++ b/src/store/staking/selectors.ts @@ -3,7 +3,7 @@ import { BigNumber } from "ethers" import { ZERO, max } from "../../threshold-ts/utils" import { RootState } from ".." import { StakeData } from "../../types/staking" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { selectStakingAppByStakingProvider } from "../staking-applications/selectors" export const selectStakes = (state: RootState) => state.staking.stakes @@ -14,7 +14,7 @@ export const selectStakingProviders = createSelector(selectStakes, (stakes) => export const selectStakeByStakingProvider = createSelector( [selectStakes, (_: RootState, stakingProvider: string) => stakingProvider], (stakes: StakeData[], stakingProvider: string) => - stakes.find((_) => isSameETHAddress(_.stakingProvider, stakingProvider)) + stakes.find((_) => isSameAddress(_.stakingProvider, stakingProvider)) ) // This selector returns available amount to unstake for T, KEEP and NU in T diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index d37af4699..6750d116b 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -6,7 +6,7 @@ import { } from "../../threshold-ts/utils" import { MintingStep } from "../../types/tbtc" import { ONE_SEC_IN_MILISECONDS } from "../../utils/date" -import { isAddress, isAddressZero } from "../../web3/utils" +import { isEthereumAddress, isAddressZero } from "../../web3/utils" import { AppListenerEffectAPI } from "../listener" import { tbtcSlice } from "./tbtcSlice" import { @@ -23,7 +23,7 @@ export const fetchBridgeactivityEffect = async ( const { depositor } = action.payload if ( - !isAddress(depositor) || + !isEthereumAddress(depositor) || isAddressZero(depositor) || !account.chainId || !isSameChainId( @@ -75,7 +75,7 @@ export const findUtxoEffect = async ( if ( !btcDepositAddress || - (!isAddress(depositor) && !isAddressZero(depositor)) + (!isEthereumAddress(depositor) && !isAddressZero(depositor)) ) return diff --git a/src/tbtc/mock-bitcoin-client.ts b/src/tbtc/mock-bitcoin-client.ts index 0a73f24b6..de0d70f36 100644 --- a/src/tbtc/mock-bitcoin-client.ts +++ b/src/tbtc/mock-bitcoin-client.ts @@ -112,7 +112,7 @@ export class MockBitcoinClient implements BitcoinClient { const { tbtc } = store.getState() as RootState const { - ethAddress, + userWalletAddress, btcRecoveryAddress, walletPublicKeyHash, refundLocktime, @@ -121,7 +121,7 @@ export class MockBitcoinClient implements BitcoinClient { const network = await this.getNetwork() const depositReceipt: DepositReceipt = { - depositor: getChainIdentifier(ethAddress), + depositor: getChainIdentifier(userWalletAddress), blindingFactor: Hex.from(blindingFactor), walletPublicKeyHash: Hex.from(walletPublicKeyHash), refundPublicKeyHash: BitcoinAddressConverter.addressToPublicKeyHash( diff --git a/src/threshold-ts/applications/__tests__/application.test.ts b/src/threshold-ts/applications/__tests__/application.test.ts index 972ac4d1d..3bb1444d0 100644 --- a/src/threshold-ts/applications/__tests__/application.test.ts +++ b/src/threshold-ts/applications/__tests__/application.test.ts @@ -58,7 +58,7 @@ describe("Application test", () => { application = new Application(staking, mockMulticall, { address, abi, - providerOrSigner: mockedEthereumProvider, + ethereumProviderOrSigner: mockedEthereumProvider, chainId: "1", account, }) diff --git a/src/threshold-ts/applications/index.ts b/src/threshold-ts/applications/index.ts index d3e5530df..91ac196bd 100644 --- a/src/threshold-ts/applications/index.ts +++ b/src/threshold-ts/applications/index.ts @@ -5,7 +5,7 @@ import { ContractInterface, ContractTransaction, } from "ethers" -import { getContract, isAddress, isAddressZero } from "../utils" +import { getContract, isEthereumAddress, isAddressZero } from "../utils" import { IStaking } from "../staking" import { EthereumConfig } from "../types" import { IMulticall, ContractCall } from "../multicall" @@ -227,8 +227,13 @@ export class Application implements IApplication { multicall: IMulticall, config: EthereumConfig & { address: string; abi: ContractInterface } ) { - const { address, abi, providerOrSigner, account } = config - this._application = getContract(address, abi, providerOrSigner, account) + const { address, abi, ethereumProviderOrSigner, account } = config + this._application = getContract( + address, + abi, + ethereumProviderOrSigner, + account + ) this._staking = staking this._multicall = multicall } @@ -376,7 +381,7 @@ export class Application implements IApplication { stakingProvider ) - if (isAddress(operator) && isAddressZero(operator)) { + if (isEthereumAddress(operator) && isAddressZero(operator)) { return false } let isInPool = undefined diff --git a/src/threshold-ts/mas/__test__/mas.test.ts b/src/threshold-ts/mas/__test__/mas.test.ts index a7dd3202f..983f4567b 100644 --- a/src/threshold-ts/mas/__test__/mas.test.ts +++ b/src/threshold-ts/mas/__test__/mas.test.ts @@ -43,7 +43,7 @@ describe("Multi app staking test", () => { multicall = { aggregate: jest.fn() } as IMulticall ;(Application as unknown as jest.Mock).mockReturnValueOnce(app1) ;(Application as unknown as jest.Mock).mockReturnValueOnce(app2) - config = { chainId: 1, providerOrSigner: {} as providers.Provider } + config = { chainId: 1, ethereumProviderOrSigner: {} as providers.Provider } mas = new MultiAppStaking(staking, multicall, config) }) diff --git a/src/threshold-ts/multicall/__test__/multicall.test.ts b/src/threshold-ts/multicall/__test__/multicall.test.ts index f73fa12e5..0ccfe1926 100644 --- a/src/threshold-ts/multicall/__test__/multicall.test.ts +++ b/src/threshold-ts/multicall/__test__/multicall.test.ts @@ -24,7 +24,7 @@ describe("Multicall test", () => { const mockProvider = {} as providers.Provider const config = { chainId: 1, - providerOrSigner: mockProvider, + ethereumProviderOrSigner: mockProvider, account: "0xE775aE21E40d34f01A5C0E1Db9FB3e637D768596", } @@ -37,7 +37,7 @@ describe("Multicall test", () => { expect(getContract).toHaveBeenCalledWith( MULTICALL_ADDRESSES[config.chainId], MULTICALL_ABI, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) expect(multicall).toBeInstanceOf(Multicall) @@ -46,7 +46,7 @@ describe("Multicall test", () => { test("should throw an error if pass unsupported chain id to constructor", () => { expect(() => { - new Multicall({ chainId: 123456, providerOrSigner: mockProvider }) + new Multicall({ chainId: 123456, ethereumProviderOrSigner: mockProvider }) }).toThrowError("Unsupported chain id") }) diff --git a/src/threshold-ts/multicall/index.ts b/src/threshold-ts/multicall/index.ts index cce2cd934..45bd69aa7 100644 --- a/src/threshold-ts/multicall/index.ts +++ b/src/threshold-ts/multicall/index.ts @@ -61,7 +61,7 @@ export class Multicall implements IMulticall { ? getContract( address, MULTICALL_ABI, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) : null diff --git a/src/threshold-ts/staking/__test__/staking.test.ts b/src/threshold-ts/staking/__test__/staking.test.ts index e0214bf68..801da1fa8 100644 --- a/src/threshold-ts/staking/__test__/staking.test.ts +++ b/src/threshold-ts/staking/__test__/staking.test.ts @@ -68,7 +68,7 @@ describe("Staking test", () => { const application = "0xE775aE21E40d34f01A5C0E1Db9FB3e637D768596" const mockedEthereumProvider = {} as providers.Provider const ethConfig = { - providerOrSigner: mockedEthereumProvider, + ethereumProviderOrSigner: mockedEthereumProvider, chainId: 1, account: AddressZero, } @@ -104,7 +104,7 @@ describe("Staking test", () => { 1, TokenStaking.address, TokenStaking.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(getContractAddressFromTruffleArtifact).toHaveBeenCalledWith( @@ -114,14 +114,14 @@ describe("Staking test", () => { 2, keepTokenStakingAddress, KeepTokenStaking.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(getContract).toHaveBeenNthCalledWith( 3, NuCypherStakingEscrow.address, NuCypherStakingEscrow.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(staking.stakingContract).toEqual(mockStakingContract) diff --git a/src/threshold-ts/staking/index.ts b/src/threshold-ts/staking/index.ts index e82249e43..98074ef15 100644 --- a/src/threshold-ts/staking/index.ts +++ b/src/threshold-ts/staking/index.ts @@ -13,8 +13,8 @@ import { getArtifact, getContract, getContractPastEvents, - isAddress, - isSameETHAddress, + isEthereumAddress, + isSameAddress, ZERO, } from "../utils" import { IVendingMachines } from "../vending-machine" @@ -149,7 +149,7 @@ export class Staking implements IStaking { ? getContract( stakingArtifact.address, stakingArtifact.abi, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) : null @@ -162,7 +162,7 @@ export class Staking implements IStaking { ? getContract( legacyKeepStakingArtifact.address, legacyKeepStakingArtifact.abi, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) : null @@ -175,7 +175,7 @@ export class Staking implements IStaking { ? getContract( nuCypherStakingEscrowArtifact.address, nuCypherStakingEscrowArtifact.abi, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) : null @@ -280,8 +280,8 @@ export class Staking implements IStaking { } const isNuStakingProviderValid = - isAddress(nuStakingProvider) && - isSameETHAddress(stakingProvider, nuStakingProvider) + isEthereumAddress(nuStakingProvider) && + isSameAddress(stakingProvider, nuStakingProvider) const possibleNuTopUpInT = isNuStakingProviderValid ? BigNumber.from( @@ -449,7 +449,7 @@ export class Staking implements IStaking { ...rolesOf, stakingProvider: possibleStakingProviders[index], })) - .filter((rolesOf) => isSameETHAddress(rolesOf.owner, owner)) + .filter((rolesOf) => isSameAddress(rolesOf.owner, owner)) .map((_) => _.stakingProvider) // Outdated staking providers - the `owner` address is no longer an owner of diff --git a/src/threshold-ts/tbtc/__test__/tbtc.test.ts b/src/threshold-ts/tbtc/__test__/tbtc.test.ts index 1e9f90e49..e70d70f8b 100644 --- a/src/threshold-ts/tbtc/__test__/tbtc.test.ts +++ b/src/threshold-ts/tbtc/__test__/tbtc.test.ts @@ -71,7 +71,7 @@ describe("TBTC test", () => { const activeWalletPublicKey = "03989d253b17a6a0f41838b84ff0d20e8898f9d7b1a98f2564da4cc29dcf8581d9" - const ethAddress = "0x6c05E249D167a42dfFdC54Ff00c7832292889dff" + const userWalletAddress = "0x6c05E249D167a42dfFdC54Ff00c7832292889dff" const bitcoinAddressTestnet = "tb1q0tpdjdu2r3r7tzwlhqy4e2276g2q6fexsz4j0m" const satoshiMultiplier = BigNumber.from(10).pow(10) @@ -99,7 +99,7 @@ describe("TBTC test", () => { const mockEthereumProvider = {} as providers.Provider const ethConfig: EthereumConfig = { - providerOrSigner: mockEthereumProvider, + ethereumProviderOrSigner: mockEthereumProvider, chainId: 1, account: AddressZero, } @@ -157,25 +157,25 @@ describe("TBTC test", () => { expect(getContract).toHaveBeenCalledWith( TBTCVault.address, TBTCVault.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(getContract).toHaveBeenCalledWith( Bridge.address, Bridge.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(getContract).toHaveBeenCalledWith( TBTCToken.address, TBTCToken.abi, - ethConfig.providerOrSigner, + ethConfig.ethereumProviderOrSigner, ethConfig.account ) expect(EthereumBridge).toHaveBeenCalledWith({ address: Bridge.address, signerOrProvider: getProviderOrSigner( - ethConfig.providerOrSigner as any, + ethConfig.ethereumProviderOrSigner as any, ethConfig.account ), }) @@ -317,7 +317,7 @@ describe("TBTC test", () => { setUpValidBTCAddress(true) setUpIsPublicKeyHashTypeAddress(true) depositScriptParameters = await tBTC.createDepositScriptParameters( - ethAddress, + userWalletAddress, bitcoinAddressTestnet ) }) @@ -335,12 +335,12 @@ describe("TBTC test", () => { Math.floor(mockCurrentTime / 1000), 23328000 ) - expect(getChainIdentifier).toBeCalledWith(ethAddress) + expect(getChainIdentifier).toBeCalledWith(userWalletAddress) }) test("should create proper deposit script parameters", async () => { expect(depositScriptParameters.depositor).toBe( - getChainIdentifier(ethAddress) + getChainIdentifier(userWalletAddress) ) expect(depositScriptParameters.blindingFactor).toBe(mockBlindingFactor) expect(depositScriptParameters.refundPublicKeyHash).toBe( @@ -364,7 +364,10 @@ describe("TBTC test", () => { test("should throw and error", async () => { await expect( - tBTC.createDepositScriptParameters(ethAddress, bitcoinAddressTestnet) + tBTC.createDepositScriptParameters( + userWalletAddress, + bitcoinAddressTestnet + ) ).rejects.toThrow( "Wrong bitcoin address passed to createDepositScriptParameters function" ) @@ -385,7 +388,10 @@ describe("TBTC test", () => { test("should throw an error", async () => { await expect( - tBTC.createDepositScriptParameters(ethAddress, bitcoinAddressTestnet) + tBTC.createDepositScriptParameters( + userWalletAddress, + bitcoinAddressTestnet + ) ).rejects.toThrow("Bitcoin recovery address must be a P2PKH or P2WPKH") expect(isValidBtcAddress).toHaveBeenCalledWith( diff --git a/src/threshold-ts/utils/address.ts b/src/threshold-ts/utils/address.ts index ca64f9f4b..a5da83e2a 100644 --- a/src/threshold-ts/utils/address.ts +++ b/src/threshold-ts/utils/address.ts @@ -15,17 +15,15 @@ export const unprefixedAndUncheckedAddress = (address: string): string => { export const getAddress = (address: string) => ethersGetAddress(address) -export const isAddress = (address: string): boolean => ethersIsAddress(address) +export const isEthereumAddress = (address: string): boolean => + ethersIsAddress(address) -export const isSameETHAddress = ( - address1: string, - address2: string -): boolean => { +export const isSameAddress = (address1: string, address2: string): boolean => { return getAddress(address1) === getAddress(address2) } export const isAddressZero = (address: string): boolean => - isSameETHAddress(address, AddressZero) + isSameAddress(address, AddressZero) export { AddressZero } diff --git a/src/threshold-ts/utils/constants.ts b/src/threshold-ts/utils/constants.ts index d69298bcc..6d39c9c8a 100644 --- a/src/threshold-ts/utils/constants.ts +++ b/src/threshold-ts/utils/constants.ts @@ -4,8 +4,7 @@ import { Stake } from "../staking" export const MAX_UINT64 = BigNumber.from("18446744073709551615") // 2^64 - 1 export const ZERO = constants.Zero export const ADRESS_ZERO = constants.AddressZero -export const L2_RELAYER_BOT_WALLET = - "0x45332EEE9b495b1dda896FD53112eaaCC10b2c19" +export const RELAYER_BOT_WALLET = "0x45332EEE9b495b1dda896FD53112eaaCC10b2c19" export const STANDARD_ERC20_DECIMALS = 18 diff --git a/src/threshold-ts/utils/contract.ts b/src/threshold-ts/utils/contract.ts index 3c46e8ff5..6481495bc 100644 --- a/src/threshold-ts/utils/contract.ts +++ b/src/threshold-ts/utils/contract.ts @@ -150,18 +150,18 @@ export function getProviderOrSigner( export const getContract = ( address: string, abi: ContractInterface, - providerOrSigner: providers.Provider | Signer | undefined, + ethereumProviderOrSigner: providers.Provider | Signer | undefined, account?: string ) => { if (!getAddress(address) || isAddressZero(address)) { throw Error(`Invalid 'address' parameter '${address}'.`) } // Sets the correct provider for ledger live app if the instance of - // LedgerLiveEthereumSigner is passed as providerOrSigner. + // LedgerLiveEthereumSigner is passed as ethereumProviderOrSigner. const _providerOrSigner = - providerOrSigner instanceof LedgerLiveSigner - ? providerOrSigner - : (getProviderOrSigner(providerOrSigner as any, account) as any) + ethereumProviderOrSigner instanceof LedgerLiveSigner + ? ethereumProviderOrSigner + : (getProviderOrSigner(ethereumProviderOrSigner as any, account) as any) return new Contract(address, abi, _providerOrSigner) } diff --git a/src/threshold-ts/vending-machine/__tests__/vending-machine.test.ts b/src/threshold-ts/vending-machine/__tests__/vending-machine.test.ts index 30ae6b6a5..38b5a0907 100644 --- a/src/threshold-ts/vending-machine/__tests__/vending-machine.test.ts +++ b/src/threshold-ts/vending-machine/__tests__/vending-machine.test.ts @@ -20,7 +20,7 @@ describe("Vending machine test", () => { beforeEach(() => { config = { chainId: 1, - providerOrSigner: {} as providers.Provider, + ethereumProviderOrSigner: {} as providers.Provider, account: "0x6B2896f915122660163e3a17f54BC244312212FD", } artifact = { @@ -37,7 +37,7 @@ describe("Vending machine test", () => { expect(getContract).toHaveBeenCalledWith( artifact.address, artifact.abi, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) expect(vendingMachine.contract).toEqual(mockVendingMachineContract) diff --git a/src/threshold-ts/vending-machine/index.ts b/src/threshold-ts/vending-machine/index.ts index 0f1564619..a4e11d3e6 100644 --- a/src/threshold-ts/vending-machine/index.ts +++ b/src/threshold-ts/vending-machine/index.ts @@ -85,7 +85,7 @@ export class VendingMachine implements IVendingMachine { ? getContract( artifact.address, artifact.abi, - config.providerOrSigner, + config.ethereumProviderOrSigner, config.account ) : null diff --git a/src/types/tbtc.ts b/src/types/tbtc.ts index 3e0c04257..f03b2b5b0 100644 --- a/src/types/tbtc.ts +++ b/src/types/tbtc.ts @@ -10,7 +10,7 @@ export interface TbtcState { depositor: string btcRecoveryAddress: string btcDepositAddress: string - ethAddress: string + userWalletAddress: string refundLocktime: string blindingFactor: string walletPublicKeyHash: string diff --git a/src/utils/verifyDepositAddress.ts b/src/utils/verifyDepositAddress.ts index c4a4f5e04..b968fd9a1 100644 --- a/src/utils/verifyDepositAddress.ts +++ b/src/utils/verifyDepositAddress.ts @@ -9,7 +9,7 @@ export interface VerificationOutcome { export const verifyDepositAddress = async ( deposit: DepositReceipt, - depositAddress: string, + btcDepositAddress: string, network: BitcoinNetwork ): Promise => { const endpointURL = `https://us-central1-keep-prd-210b.cloudfunctions.net/verify-deposit-address` @@ -25,7 +25,7 @@ export const verifyDepositAddress = async ( try { const response = await axios.get(url, { timeout: 10000 }) // 10s timeout - const match = response.data.address === depositAddress + const match = response.data.address === btcDepositAddress const result: VerificationOutcome = { status: match ? "valid" : "invalid", diff --git a/src/web3/hooks/useGetBlock.ts b/src/web3/hooks/useGetBlock.ts index 530aa013c..688380cf5 100644 --- a/src/web3/hooks/useGetBlock.ts +++ b/src/web3/hooks/useGetBlock.ts @@ -7,19 +7,20 @@ import { LedgerLiveSigner } from "../../utils/ledger" export const useGetBlock = () => { const threshold = useThreshold() - const providerOrSigner = threshold.config.ethereum.providerOrSigner + const ethereumProviderOrSigner = + threshold.config.ethereum.ethereumProviderOrSigner return useCallback( async (blockTag: BlockTag) => { - if (providerOrSigner instanceof LedgerLiveSigner) { - return providerOrSigner.provider!.getBlock(blockTag) + if (ethereumProviderOrSigner instanceof LedgerLiveSigner) { + return ethereumProviderOrSigner.provider!.getBlock(blockTag) } const provider = getProviderOrSigner( - providerOrSigner as any + ethereumProviderOrSigner as any ) as Web3Provider return provider.getBlock(blockTag) }, - [providerOrSigner] + [ethereumProviderOrSigner] ) } diff --git a/src/web3/hooks/useSubscribeToERC20TransferEvent.ts b/src/web3/hooks/useSubscribeToERC20TransferEvent.ts index 7fee13d44..8a96d7f1a 100644 --- a/src/web3/hooks/useSubscribeToERC20TransferEvent.ts +++ b/src/web3/hooks/useSubscribeToERC20TransferEvent.ts @@ -2,7 +2,7 @@ import { BigNumber } from "@ethersproject/bignumber" import { Token } from "../../enums/token" import { useSubscribeToContractEvent } from "./useSubscribeToContractEvent" import { useTokenBalance } from "../../hooks/useTokenBalance" -import { isSameETHAddress } from "../../web3/utils" +import { isSameAddress } from "../../web3/utils" import { useTokenState } from "../../hooks/useTokenState" import { useToken } from "../../hooks/useToken" import { useCallback } from "react" @@ -17,8 +17,8 @@ export const useSubscribeToERC20TransferEvent = (token: Token) => { const balanceUpdater = useCallback( (from, to, amount) => { - const isToAddress = isSameETHAddress(to, account!) - const isFromAddress = isSameETHAddress(from, account!) + const isToAddress = isSameAddress(to, account!) + const isFromAddress = isSameAddress(from, account!) if (isToAddress || isFromAddress) { console.log(`Received ${token}.Transfer event`, { diff --git a/src/web3/hooks/useVendingMachineRatio.ts b/src/web3/hooks/useVendingMachineRatio.ts index ea02466a4..6498526a8 100644 --- a/src/web3/hooks/useVendingMachineRatio.ts +++ b/src/web3/hooks/useVendingMachineRatio.ts @@ -3,7 +3,7 @@ import { AddressZero } from "@ethersproject/constants" import { useVendingMachineContract } from "./useVendingMachineContract" import { useLocalStorage } from "../../hooks/useLocalStorage" import { UpgredableToken } from "../../types" -import { isAddressZero, isSameETHAddress } from "../../web3/utils" +import { isAddressZero, isSameAddress } from "../../web3/utils" import { Token } from "../../enums" // Mutex implementation adapted from @@ -56,7 +56,7 @@ export const useVendingMachineRatio = (token: UpgredableToken) => { ratioValue === "0" && contractAddress && (isAddressZero(localStorageContractAddress) || - !isSameETHAddress(contractAddress, localStorageContractAddress)) + !isSameAddress(contractAddress, localStorageContractAddress)) ) { const fn = async () => { const mutex = TOKEN_TO_MUTEX[token] From ea0b9ee94cb8de26794f4c38bcdb3e2557bacdd3 Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Sat, 5 Apr 2025 18:59:41 -0300 Subject: [PATCH 6/8] feat: add solana chain --- src/App.tsx | 33 +-- .../Modal/SelectWalletModal/ConnectSolana.tsx | 19 ++ .../components/WalletConnectionModalBase.tsx | 3 +- .../Modal/SelectWalletModal/index.tsx | 22 +- src/components/Navbar/AccountButton.tsx | 32 ++- src/components/SubmitTxButton.tsx | 11 +- src/components/withOnlyConnectedWallet.tsx | 17 +- src/contexts/SolanaWalletProvider.tsx | 55 +++++ src/contexts/ThresholdContext.tsx | 47 +++- src/enums/web3.ts | 1 + src/hooks/tbtc/useRemoveDepositData.ts | 7 +- .../useTBTCDepositDataFromLocalStorage.ts | 32 ++- src/hooks/useIsSolanaActive.ts | 56 ----- src/hooks/useNonEVMConnection.ts | 85 +++++++ src/networks/enums/networks.ts | 4 + src/networks/types/networks.ts | 3 +- src/pages/tBTC/Bridge/Mint.tsx | 27 ++- src/pages/tBTC/Bridge/Minting/ProvideData.tsx | 53 +++-- src/pages/tBTC/Bridge/ResumeDeposit.tsx | 16 +- src/static/icons/Solana.tsx | 31 +++ src/threshold-ts/index.ts | 4 +- src/threshold-ts/tbtc/index.ts | 213 ++++++++++-------- src/threshold-ts/types/index.ts | 14 +- src/utils/getThresholdLib.ts | 24 +- src/utils/shortenAddress.ts | 25 +- src/utils/tbtcLocalStorageData.ts | 10 +- src/web3/utils/address.ts | 68 +++++- 27 files changed, 656 insertions(+), 256 deletions(-) create mode 100644 src/components/Modal/SelectWalletModal/ConnectSolana.tsx create mode 100644 src/contexts/SolanaWalletProvider.tsx delete mode 100644 src/hooks/useIsSolanaActive.ts create mode 100644 src/hooks/useNonEVMConnection.ts create mode 100644 src/static/icons/Solana.tsx diff --git a/src/App.tsx b/src/App.tsx index ea7b77373..19f9ec06c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -38,7 +38,7 @@ import { useSubscribeToToppedUpEvent } from "./hooks/useSubscribeToToppedUpEvent import { pages } from "./pages" import { useCheckBonusEligibility } from "./hooks/useCheckBonusEligibility" import { useFetchStakingRewards } from "./hooks/useFetchStakingRewards" -import { isSameETHAddress } from "./web3/utils" +import { isSameAddress } from "./web3/utils" import { ThresholdProvider } from "./contexts/ThresholdContext" import { LedgerLiveAppProvider } from "./contexts/LedgerLiveAppContext" import { @@ -66,6 +66,7 @@ import { useGoogleTagManager } from "./hooks/google-tag-manager" import { hexToNumber, isSameChainId } from "./networks/utils" import { walletConnected } from "./store/account" import { useIsActive } from "./hooks/useIsActive" +import SolanaWalletProvider from "./contexts/SolanaWalletProvider" const Web3EventHandlerComponent = () => { useSubscribeToVendingMachineContractEvents() @@ -151,7 +152,7 @@ const AppBody = () => { ) } else if ( update.account && - !isSameETHAddress(update.account, account as string) + !isSameAddress(update.account, account as string) ) { // dispatch(resetStoreAction()) @@ -266,19 +267,21 @@ const App: FC = () => { return ( - - - - - - - - - - - - - + + + + + + + + + + + + + + + ) diff --git a/src/components/Modal/SelectWalletModal/ConnectSolana.tsx b/src/components/Modal/SelectWalletModal/ConnectSolana.tsx new file mode 100644 index 000000000..513ea69e5 --- /dev/null +++ b/src/components/Modal/SelectWalletModal/ConnectSolana.tsx @@ -0,0 +1,19 @@ +import { FC } from "react" +import { WalletConnectIcon } from "../../../static/icons/WalletConect" +import { WalletConnectionModalBase } from "./components" + +const ConnectSolana: FC<{ + goBack: () => void + closeModal: () => void +}> = ({ goBack, closeModal }) => ( + +) + +export default ConnectSolana diff --git a/src/components/Modal/SelectWalletModal/components/WalletConnectionModalBase.tsx b/src/components/Modal/SelectWalletModal/components/WalletConnectionModalBase.tsx index aefec6f6e..0620a8b00 100644 --- a/src/components/Modal/SelectWalletModal/components/WalletConnectionModalBase.tsx +++ b/src/components/Modal/SelectWalletModal/components/WalletConnectionModalBase.tsx @@ -14,7 +14,6 @@ import { useWeb3React } from "@web3-react/core" import { BaseModalProps } from "../../../../types" import { BodyMd, H4 } from "@threshold-network/components" import { AbstractConnector } from "../../../../web3/connectors" -import { WalletType } from "../../../../enums" interface Props extends BaseModalProps { WalletIcon: any @@ -49,10 +48,10 @@ const WalletConnectionModalBase: FC = ({ const { activate, active, account } = useWeb3React() useEffect(() => { + if (shouldForceCloseModal) closeModal() if (!connector) return activate(connector) - if (shouldForceCloseModal) closeModal() }, [activate, connector, shouldForceCloseModal]) return ( diff --git a/src/components/Modal/SelectWalletModal/index.tsx b/src/components/Modal/SelectWalletModal/index.tsx index b179ca3cd..2d2c64fa2 100644 --- a/src/components/Modal/SelectWalletModal/index.tsx +++ b/src/components/Modal/SelectWalletModal/index.tsx @@ -1,10 +1,11 @@ import { ModalHeader } from "@chakra-ui/react" import { useWeb3React } from "@web3-react/core" import { MetaMaskIcon } from "../../../static/icons/MetaMask" +import { SolanaIcon } from "../../../static/icons/Solana" import { Taho } from "../../../static/icons/Taho" import { WalletConnectIcon } from "../../../static/icons/WalletConect" import InitialWalletSelection from "./InitialSelection" -import { FC, useState } from "react" +import { FC, useEffect, useState } from "react" import ConnectMetamask from "./ConnectMetamask" import withBaseModal from "../withBaseModal" import ConnectWalletConnect from "./ConnectWalletConnect" @@ -20,6 +21,8 @@ import ConnectLedgerLive from "./ConnectLedgerLive" import { LedgerLight } from "../../../static/icons/LedgerLight" import { LedgerDark } from "../../../static/icons/LedgerDark" import { featureFlags } from "../../../constants" +import ConnectSolana from "./ConnectSolana" +import { useWalletModal } from "@solana/wallet-adapter-react-ui" const walletOptions: WalletOption[] = [ { @@ -66,9 +69,18 @@ const walletOptions: WalletOption[] = [ dark: CoinbaseWallet, }, }, + { + id: WalletType.Solana, + title: "Solana", + icon: { + light: SolanaIcon, + dark: SolanaIcon, + }, + }, ] const SelectWalletModal: FC = () => { + const { setVisible: setModalVisible } = useWalletModal() const { deactivate } = useWeb3React() const { closeModal } = useModal() @@ -85,6 +97,12 @@ const SelectWalletModal: FC = () => { setWalletToConnect(walletType) } + useEffect(() => { + if (walletToConnect === WalletType.Solana) { + setModalVisible(true) + } + }, [walletToConnect]) + return ( <> @@ -124,6 +142,8 @@ const ConnectWallet: FC<{ return case WalletType.LedgerLive: return + case WalletType.Solana: + return default: return <> } diff --git a/src/components/Navbar/AccountButton.tsx b/src/components/Navbar/AccountButton.tsx index f79777103..9d02b0f70 100644 --- a/src/components/Navbar/AccountButton.tsx +++ b/src/components/Navbar/AccountButton.tsx @@ -1,4 +1,11 @@ -import { Button, Menu, MenuButton, MenuItem, MenuList } from "@chakra-ui/react" +import { + Button, + Image, + Menu, + MenuButton, + MenuItem, + MenuList, +} from "@chakra-ui/react" import { FC } from "react" import { useCapture } from "../../hooks/posthog" import { useAppDispatch } from "../../hooks/store" @@ -6,12 +13,15 @@ import { resetStoreAction } from "../../store" import { PosthogEvent } from "../../types/posthog" import shortenAddress from "../../utils/shortenAddress" import Identicon from "../Identicon" +import { useNonEVMConnection } from "../../hooks/useNonEVMConnection" const AccountButton: FC<{ openWalletModal: () => void account?: string | null deactivate: () => void }> = ({ openWalletModal, account, deactivate }) => { + const { nonEVMPublicKey, connectedWalletIcon, disconnectNonEVM } = + useNonEVMConnection() const dispatch = useAppDispatch() const captureWalletDisconnectedEvent = useCapture( PosthogEvent.WalletDisconnected @@ -21,13 +31,27 @@ const AccountButton: FC<{ captureWalletDisconnectedEvent() dispatch(resetStoreAction()) deactivate() + disconnectNonEVM() } - if (account) { + if (account || nonEVMPublicKey) { return ( - }> - {shortenAddress(account)} + + ) : account ? ( + + ) : undefined + } + > + {shortenAddress(nonEVMPublicKey || account)} Disconnect diff --git a/src/components/SubmitTxButton.tsx b/src/components/SubmitTxButton.tsx index 21d82c154..c3892cc21 100644 --- a/src/components/SubmitTxButton.tsx +++ b/src/components/SubmitTxButton.tsx @@ -4,6 +4,7 @@ import { useIsActive } from "../hooks/useIsActive" import { useConnectWallet } from "../hooks/useConnectWallet" import { RootState } from "../store" import { useSelector } from "react-redux" +import { useNonEVMConnection } from "../hooks/useNonEVMConnection" interface SubmitTxButtonProps extends ButtonProps { onSubmit?: () => void @@ -20,16 +21,20 @@ const SubmitTxButton: FC = ({ isBlocked, trm: { isFetching }, } = useSelector((state: RootState) => state.account) - + const { disconnectNonEVM } = useNonEVMConnection() const { isActive } = useIsActive() + const { isNonEVMActive } = useNonEVMConnection() const connectWallet = useConnectWallet() const isButtonDisabled = isBlocked || isDisabled + const pathnameUrl = window.location.pathname + const isMint = pathnameUrl.includes("tBTC/mint") const onConnectWalletClick = () => { + disconnectNonEVM() connectWallet() } - if (isActive) { + if (isActive || (isNonEVMActive && isMint)) { return ( ) } diff --git a/src/components/withOnlyConnectedWallet.tsx b/src/components/withOnlyConnectedWallet.tsx index df5687839..9b036e205 100644 --- a/src/components/withOnlyConnectedWallet.tsx +++ b/src/components/withOnlyConnectedWallet.tsx @@ -1,6 +1,7 @@ import { ComponentType } from "react" import { H5 } from "@threshold-network/components" import { useIsActive } from "../hooks/useIsActive" +import { useNonEVMConnection } from "../hooks/useNonEVMConnection" function withOnlyConnectedWallet( Component: ComponentType, @@ -8,14 +9,16 @@ function withOnlyConnectedWallet( ) { return (props: T & {}) => { const { account, isActive } = useIsActive() - if (!isActive || !account) { - return renderNotConnected ? ( - renderNotConnected() - ) : ( -
Wallet not connected
- ) + const isNonEVMActive = useNonEVMConnection() + + if ((isActive && account) || isNonEVMActive) { + return } - return + return renderNotConnected ? ( + renderNotConnected() + ) : ( +
Wallet not connected
+ ) } } diff --git a/src/contexts/SolanaWalletProvider.tsx b/src/contexts/SolanaWalletProvider.tsx new file mode 100644 index 000000000..a984ce725 --- /dev/null +++ b/src/contexts/SolanaWalletProvider.tsx @@ -0,0 +1,55 @@ +import React, { FC, ReactNode, useMemo } from "react" +import { + ConnectionProvider, + WalletProvider, +} from "@solana/wallet-adapter-react" +import { WalletModalProvider } from "@solana/wallet-adapter-react-ui" +import { WalletAdapterNetwork } from "@solana/wallet-adapter-base" +import { + UnsafeBurnerWalletAdapter, + PhantomWalletAdapter, + SolflareWalletAdapter, + CoinbaseWalletAdapter, +} from "@solana/wallet-adapter-wallets" +import { clusterApiUrl } from "@solana/web3.js" +import { getEnvVariable } from "../utils/getEnvVariable" +import { EnvVariable } from "../enums" +import { isMainnetChainId } from "../networks/utils" + +// Default Solana wallet adapter styles +require("@solana/wallet-adapter-react-ui/styles.css") + +interface SolanaWalletProviderProps { + children: ReactNode +} + +const SolanaWalletProvider: FC = ({ children }) => { + const defaultEthereumChainId = getEnvVariable( + EnvVariable.DEFAULT_PROVIDER_CHAIN_ID + ) + + const solanaNetwork = isMainnetChainId(defaultEthereumChainId) + ? WalletAdapterNetwork.Mainnet + : WalletAdapterNetwork.Devnet + + const endpoint = useMemo(() => clusterApiUrl(solanaNetwork), [solanaNetwork]) + const wallets = useMemo( + () => [ + new UnsafeBurnerWalletAdapter(), + new PhantomWalletAdapter(), + new SolflareWalletAdapter(), + new CoinbaseWalletAdapter(), + ], + [solanaNetwork] + ) + + return ( + + + {children} + + + ) +} + +export default SolanaWalletProvider diff --git a/src/contexts/ThresholdContext.tsx b/src/contexts/ThresholdContext.tsx index 45db37bc5..b0e0e3e7b 100644 --- a/src/contexts/ThresholdContext.tsx +++ b/src/contexts/ThresholdContext.tsx @@ -5,6 +5,15 @@ import { useIsActive } from "../hooks/useIsActive" import { useIsEmbed } from "../hooks/useIsEmbed" import { getEthereumDefaultProviderChainId } from "../utils/getEnvVariable" import { useWeb3React } from "@web3-react/core" +import { ChainName } from "../threshold-ts/types" +import { isL2Network } from "../networks/utils" +import { useNonEVMConnection } from "../hooks/useNonEVMConnection" + +const defaultCrossChainConfig = { + isCrossChain: false, + chainName: ChainName.Ethereum, + nonEVMProvider: null, +} const ThresholdContext = createContext(threshold) @@ -17,6 +26,8 @@ export const ThresholdProvider: FC = ({ children }) => { const hasThresholdLibConfigBeenUpdated = useRef(false) const { ledgerLiveAppEthereumSigner } = useLedgerLiveApp() const { account, isActive, chainId } = useIsActive() + const { isNonEVMActive, nonEVMChainName, nonEVMProvider } = + useNonEVMConnection() const { isEmbed } = useIsEmbed() useEffect(() => { @@ -24,11 +35,18 @@ export const ThresholdProvider: FC = ({ children }) => { threshold.updateConfig({ ethereum: { ...threshold.config.ethereum, - providerOrSigner: isEmbed ? ledgerLiveAppEthereumSigner : library, + ethereumProviderOrSigner: isEmbed + ? ledgerLiveAppEthereumSigner + : library, account, chainId, }, bitcoin: threshold.config.bitcoin, + crossChain: { + ...defaultCrossChainConfig, + chainName: isL2Network(chainId) ? ChainName.Ethereum : null, + isCrossChain: isL2Network(chainId), + }, }) hasThresholdLibConfigBeenUpdated.current = true } @@ -37,15 +55,38 @@ export const ThresholdProvider: FC = ({ children }) => { threshold.updateConfig({ ethereum: { ...threshold.config.ethereum, - providerOrSigner: getThresholdLibProvider(), + ethereumProviderOrSigner: getThresholdLibProvider(), account: undefined, chainId: getEthereumDefaultProviderChainId(), }, bitcoin: threshold.config.bitcoin, + crossChain: { + ...threshold.config.crossChain, + }, }) hasThresholdLibConfigBeenUpdated.current = false } - }, [isActive, account, isEmbed, chainId, library]) + + if (isNonEVMActive) { + threshold.updateConfig({ + ethereum: threshold.config.ethereum, + bitcoin: threshold.config.bitcoin, + crossChain: { + isCrossChain: true, + chainName: nonEVMChainName as Exclude, + nonEVMProvider: nonEVMProvider, + }, + }) + } + }, [ + isActive, + account, + isEmbed, + chainId, + library, + nonEVMProvider, + isNonEVMActive, + ]) return ( diff --git a/src/enums/web3.ts b/src/enums/web3.ts index 11c6686f1..274059294 100644 --- a/src/enums/web3.ts +++ b/src/enums/web3.ts @@ -11,4 +11,5 @@ export enum WalletType { WalletConnect = "WALLET_CONNECT", Coinbase = "COINBASE", LedgerLive = "LEDGER_LIVE", + Solana = "SOLANA", } diff --git a/src/hooks/tbtc/useRemoveDepositData.ts b/src/hooks/tbtc/useRemoveDepositData.ts index 74c92270f..8172d97f5 100644 --- a/src/hooks/tbtc/useRemoveDepositData.ts +++ b/src/hooks/tbtc/useRemoveDepositData.ts @@ -3,16 +3,21 @@ import { useThreshold } from "../../contexts/ThresholdContext" import { useTbtcState } from "../useTbtcState" import { useTBTCDepositDataFromLocalStorage } from "./useTBTCDepositDataFromLocalStorage" import { useIsActive } from "../useIsActive" +import { useNonEVMConnection } from "../useNonEVMConnection" +import { getEthereumNetworkNameFromChainId } from "../../networks/utils" export const useRemoveDepositData = () => { const { chainId } = useIsActive() + const { nonEVMChainName } = useNonEVMConnection() const { resetDepositData } = useTbtcState() const { removeDepositDataFromLocalStorage } = useTBTCDepositDataFromLocalStorage() const threshold = useThreshold() + const networkName = + nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) return useCallback(() => { - removeDepositDataFromLocalStorage(chainId) + removeDepositDataFromLocalStorage(networkName) resetDepositData() threshold.tbtc.removeDepositData() }, [resetDepositData, removeDepositDataFromLocalStorage, threshold]) diff --git a/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts b/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts index 858f84662..2a057d706 100644 --- a/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts +++ b/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts @@ -7,9 +7,15 @@ import { TBTCLocalStorageDepositData, } from "../../utils/tbtcLocalStorageData" import { useIsActive } from "../useIsActive" +import { useNonEVMConnection } from "../useNonEVMConnection" +import { getEthereumNetworkNameFromChainId } from "../../networks/utils" export const useTBTCDepositDataFromLocalStorage = () => { const { account, chainId } = useIsActive() + const { nonEVMPublicKey, nonEVMChainName } = useNonEVMConnection() + + const networkName = + nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) const [tBTCDepositData, setTBTCLocalStorageData] = useState({}) @@ -23,35 +29,37 @@ export const useTBTCDepositDataFromLocalStorage = () => { }, [chainId]) const setDepositDataInLocalStorage = useCallback( - (depositData: TBTCDepositData, chainId?: number | string) => { - if (!account || !chainId) return + (depositData: TBTCDepositData, networkName: string) => { + const connectedAccount = account ?? nonEVMPublicKey + if (!connectedAccount || !networkName) return - const storageKey = `${key}-${chainId.toString()}` - write(account, depositData, tBTCDepositData, chainId) + const storageKey = `${key}-${networkName.toString()}` + write(connectedAccount, depositData, tBTCDepositData, networkName) const updatedData = { ...tBTCDepositData, - [account]: depositData, + [connectedAccount]: depositData, } localStorage.setItem(storageKey, JSON.stringify(updatedData)) setTBTCLocalStorageData(updatedData) }, - [account, tBTCDepositData, chainId] + [account, tBTCDepositData, networkName, nonEVMPublicKey] ) const removeDepositDataFromLocalStorage = useCallback( - (chainId?: number | string) => { - if (!account) return + (networkName: string) => { + const connectedAccount = account ?? nonEVMPublicKey + if (!connectedAccount || !networkName) return - const storageKey = `${key}-${chainId?.toString()}` - removeDataForAccount(account, tBTCDepositData, chainId) + const storageKey = `${key}-${networkName?.toString()}` + removeDataForAccount(connectedAccount, tBTCDepositData, networkName) const updatedData = { ...tBTCDepositData } - delete updatedData[account] + delete updatedData[connectedAccount] localStorage.setItem(storageKey, JSON.stringify(updatedData)) setTBTCLocalStorageData(updatedData) }, - [account, tBTCDepositData, chainId] + [account, nonEVMPublicKey, tBTCDepositData, chainId] ) return { diff --git a/src/hooks/useIsSolanaActive.ts b/src/hooks/useIsSolanaActive.ts deleted file mode 100644 index e54689cb0..000000000 --- a/src/hooks/useIsSolanaActive.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { useWallet } from "@solana/wallet-adapter-react" -import type { PublicKey } from "@solana/web3.js" -import { useCallback, useMemo } from "react" - -type UseIsActiveSolanaResult = { - solanaPublicKey: PublicKey | undefined - isSolanaActive: boolean - solanaConnectedWalletName: string | undefined - solanaConnectedWalletIcon: string | undefined - disconnectSolana: () => Promise - isSolanaConnected: boolean - isSolanaConnecting: boolean - isSolanaDisconnecting: boolean -} - -/** - * Checks if solana wallet is connected to the dashboard. - * - * Returns whether the wallet is active, its publicKey, and methods to - * connect, disconnect, and select different wallets. - * @return {UseIsActiveSolanaResult} public key address and `isActive` boolean - */ -export function useIsActiveSolana(): UseIsActiveSolanaResult { - const { - publicKey, - wallet, - connected, - connecting, - disconnecting, - disconnect, - } = useWallet() - - // Whether there is an active wallet (connected + has publicKey). - const isActive = useMemo(() => { - return connected && !!publicKey - }, [connected, publicKey]) - - const disconnectWallet = useCallback(async () => { - try { - await disconnect() - } catch (error) { - console.error("Failed to disconnect wallet:", error) - } - }, [disconnect]) - - return { - solanaPublicKey: publicKey ?? undefined, - isSolanaActive: isActive, - solanaConnectedWalletName: wallet?.adapter?.name, - solanaConnectedWalletIcon: wallet?.adapter?.icon, - disconnectSolana: disconnectWallet, - isSolanaConnected: connected, - isSolanaConnecting: connecting, - isSolanaDisconnecting: disconnecting, - } -} diff --git a/src/hooks/useNonEVMConnection.ts b/src/hooks/useNonEVMConnection.ts new file mode 100644 index 000000000..1437f118d --- /dev/null +++ b/src/hooks/useNonEVMConnection.ts @@ -0,0 +1,85 @@ +import { + useAnchorWallet, + useConnection, + useWallet as useSolanaWallet, +} from "@solana/wallet-adapter-react" +import { useCallback } from "react" +import { ChainName } from "../threshold-ts/types" +import { AnchorProvider } from "@coral-xyz/anchor" + +const defaultNonEVMConnection = { + nonEVMProvider: null, + nonEVMChainName: null, + isNonEVMActive: false, + nonEVMPublicKey: null, + connectedWalletName: undefined, + connectedWalletIcon: undefined, + disconnectNonEVM: async () => {}, + isNonEVMConnecting: false, + isNonEVMDisconnecting: false, +} + +export type NonEVMConnection = { + nonEVMProvider: AnchorProvider | null + nonEVMChainName: Exclude | null + nonEVMPublicKey: string | null + isNonEVMActive: boolean + connectedWalletName: string | undefined + connectedWalletIcon: string | undefined + disconnectNonEVM: () => Promise + isNonEVMConnecting: boolean | undefined + isNonEVMDisconnecting: boolean | undefined +} + +/** + * Checks if solana wallet is connected to the dashboard. + * + * Returns whether the wallet is active, its publicKey, and methods to + * connect, disconnect, and select different wallets. + * @return {NonEVMConnection} + */ +export function useNonEVMConnection(): NonEVMConnection { + const { + publicKey: solanaPublicKey, + wallet: solanaWallet, + connected: isSolanaConnected, + connecting: isSolanaConnecting, + disconnecting: isSolanaDisconnecting, + disconnect: disconnectSolana, + } = useSolanaWallet() + + const { connection } = useConnection() + const wallet = useAnchorWallet() + + const isSolanaActive = isSolanaConnected && !!solanaPublicKey + + const connectionData: NonEVMConnection = { + ...defaultNonEVMConnection, + } + + if (isSolanaActive && wallet) { + connectionData.nonEVMProvider = new AnchorProvider(connection, wallet, {}) + connectionData.nonEVMChainName = ChainName.Solana + connectionData.nonEVMPublicKey = solanaPublicKey.toBase58() ?? null + connectionData.isNonEVMActive = isSolanaActive + connectionData.connectedWalletName = solanaWallet?.adapter?.name + connectionData.connectedWalletIcon = solanaWallet?.adapter?.icon + connectionData.isNonEVMConnecting = isSolanaConnecting + connectionData.isNonEVMDisconnecting = isSolanaDisconnecting + } + + const disconnectWallet = useCallback(async () => { + try { + if (isSolanaConnected && !!solanaPublicKey) { + await disconnectSolana() + } + } catch (error) { + console.error("Failed to disconnect wallet:", error) + } + }, [disconnectSolana, isSolanaConnected, solanaPublicKey]) + + return { + ...connectionData, + disconnectNonEVM: disconnectWallet, + } +} diff --git a/src/networks/enums/networks.ts b/src/networks/enums/networks.ts index 621d3a27a..4d26593e4 100644 --- a/src/networks/enums/networks.ts +++ b/src/networks/enums/networks.ts @@ -14,6 +14,10 @@ export enum SupportedChainIds { // BaseSepolia = 84532, } +export enum NonEVMNetworks { + Solana = "Solana", +} + export enum AlchemyName { Ethereum = "eth", Arbitrum = "arb", diff --git a/src/networks/types/networks.ts b/src/networks/types/networks.ts index ef581da02..d07f29589 100644 --- a/src/networks/types/networks.ts +++ b/src/networks/types/networks.ts @@ -18,9 +18,10 @@ export interface EthereumRpcMap { } export type NetworkName = keyof typeof SupportedChainIds +export type MainNetworkName = keyof typeof Chains export interface Network { chainId: SupportedChainIds - name: keyof typeof Chains + name: Exclude layer: Layer networkType: NetworkType chainParameters: { diff --git a/src/pages/tBTC/Bridge/Mint.tsx b/src/pages/tBTC/Bridge/Mint.tsx index 253ccd5b8..ba5d2fcc4 100644 --- a/src/pages/tBTC/Bridge/Mint.tsx +++ b/src/pages/tBTC/Bridge/Mint.tsx @@ -7,7 +7,7 @@ import { ResumeDepositPage } from "./ResumeDeposit" import { MintingTimeline } from "./Minting/MintingTimeline" import { useTBTCDepositDataFromLocalStorage } from "../../../hooks/tbtc" import { useTbtcState } from "../../../hooks/useTbtcState" -import { isSameETHAddress } from "../../../web3/utils" +import { isSameAddress } from "../../../web3/utils" import { MintingFlowRouter } from "./Minting/MintingFlowRouter" import { @@ -20,6 +20,7 @@ import { MintDurationWidget } from "../../../components/MintDurationWidget" import { useThreshold } from "../../../contexts/ThresholdContext" import { useCheckDepositExpirationTime } from "../../../hooks/tbtc/useCheckDepositExpirationTime" import { useRemoveDepositData } from "../../../hooks/tbtc/useRemoveDepositData" +import { useNonEVMConnection } from "../../../hooks/useNonEVMConnection" export const MintPage: PageComponent = ({}) => { return @@ -29,30 +30,37 @@ export const MintingFormPage: PageComponent = ({ ...props }) => { const { tBTCDepositData } = useTBTCDepositDataFromLocalStorage() const { btcDepositAddress, updateState, resetDepositData } = useTbtcState() const { account, chainId } = useIsActive() + const { nonEVMPublicKey } = useNonEVMConnection() const checkDepositExpiration = useCheckDepositExpirationTime() const removeDepositData = useRemoveDepositData() + const userConnectedAccount = account || nonEVMPublicKey + useEffect(() => { const updateDepositData = async () => { if ( tBTCDepositData && - account && + userConnectedAccount && chainId && - tBTCDepositData[account] && - isSameETHAddress(tBTCDepositData[account].ethAddress, account) && - tBTCDepositData[account].btcDepositAddress !== btcDepositAddress + tBTCDepositData[userConnectedAccount] && + isSameAddress( + tBTCDepositData[userConnectedAccount].userWalletAddress, + userConnectedAccount + ) && + tBTCDepositData[userConnectedAccount].btcDepositAddress !== + btcDepositAddress ) { const { depositor: { identifierHex: depositorAddress }, btcDepositAddress, - ethAddress, + userWalletAddress, blindingFactor, btcRecoveryAddress, walletPublicKeyHash, refundLocktime, extraData, chainName, - } = tBTCDepositData[account] + } = tBTCDepositData[userConnectedAccount] const { isExpired } = await checkDepositExpiration(refundLocktime) if (isExpired) { resetDepositData() @@ -60,7 +68,7 @@ export const MintingFormPage: PageComponent = ({ ...props }) => { return } - updateState("ethAddress", ethAddress) + updateState("userWalletAddress", userWalletAddress) updateState("blindingFactor", blindingFactor) updateState("btcRecoveryAddress", btcRecoveryAddress) updateState("walletPublicKeyHash", walletPublicKeyHash) @@ -95,6 +103,7 @@ MintingFormPage.route = { const MintPageLayout: PageComponent = () => { const { isActive } = useIsActive() + const { isNonEVMActive } = useNonEVMConnection() const { mintingStep, utxo } = useTbtcState() const { tbtc: { @@ -112,7 +121,7 @@ const MintPageLayout: PageComponent = () => { return ( - {isActive ? ( + {isActive || isNonEVMActive ? ( ) : ( diff --git a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx index 3af522844..830f654ac 100644 --- a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx +++ b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx @@ -26,7 +26,7 @@ import { isTestnetChainId, } from "../../../../networks/utils" import { getBridgeBTCSupportedAddressPrefixesText } from "../../../../utils/tBTC" -import { downloadFile, isSameETHAddress } from "../../../../web3/utils" +import { downloadFile, isSameAddress } from "../../../../web3/utils" import { BridgeProcessCardSubTitle } from "../components/BridgeProcessCardSubTitle" import { BridgeProcessCardTitle } from "../components/BridgeProcessCardTitle" import TbtcFees from "../components/TbtcFees" @@ -34,9 +34,10 @@ import { useIsActive } from "../../../../hooks/useIsActive" import { PosthogButtonId } from "../../../../types/posthog" import SubmitTxButton from "../../../../components/SubmitTxButton" import { Deposit } from "@keep-network/tbtc-v2.ts" +import { useNonEVMConnection } from "../../../../hooks/useNonEVMConnection" export interface FormValues { - ethAddress: string + userWalletAddress: string btcRecoveryAddress: string bitcoinNetwork: BitcoinNetwork } @@ -64,10 +65,10 @@ const MintingProcessFormBase: FC> = ({ return ( @@ -96,13 +97,13 @@ const MintingProcessForm = withFormik({ btcRecoveryAddress, bitcoinNetwork, }) => ({ - ethAddress: initialEthAddress, + userWalletAddress: initialEthAddress, btcRecoveryAddress: btcRecoveryAddress, bitcoinNetwork: bitcoinNetwork, }), validate: async (values, props) => { const errors: FormikErrors = {} - errors.ethAddress = validateETHAddress(values.ethAddress) + errors.userWalletAddress = validateETHAddress(values.userWalletAddress) errors.btcRecoveryAddress = validateBTCAddress( values.btcRecoveryAddress, values.bitcoinNetwork as any @@ -124,9 +125,14 @@ export const ProvideDataComponent: FC<{ const formRef = useRef>(null) const threshold = useThreshold() const { account, chainId } = useIsActive() + const { isNonEVMActive, nonEVMPublicKey, nonEVMChainName } = + useNonEVMConnection() const { setDepositDataInLocalStorage } = useTBTCDepositDataFromLocalStorage() const depositTelemetry = useDepositTelemetry(threshold.tbtc.bitcoinNetwork) + const networkName = + nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) + const textColor = useColorModeValue("gray.500", "gray.300") const [shouldDownloadDepositReceipt, setShouldDownloadDepositReceipt] = useState(true) @@ -142,13 +148,22 @@ export const ProvideDataComponent: FC<{ const onSubmit = useCallback( async (values: FormValues) => { - if (account && !isSameETHAddress(values.ethAddress, account)) { + if (account && !isSameAddress(values.userWalletAddress, account)) { throw new Error( "The account used to generate the deposit address must be the same as the connected wallet." ) } - if (!isSupportedNetwork(chainId)) { + if ( + nonEVMPublicKey && + !isSameAddress(values.userWalletAddress, nonEVMPublicKey) + ) { + throw new Error( + "The non-EVM account used to generate the deposit address must be the same as the connected wallet." + ) + } + + if (!isNonEVMActive && !isSupportedNetwork(chainId)) { throw new Error( "You are currently connected to an unsupported network. Switch to a supported network" ) @@ -169,11 +184,11 @@ export const ProvideDataComponent: FC<{ chainId as SupportedChainIds ) } - const depositAddress = await threshold.tbtc.calculateDepositAddress() + const btcDepositAddress = await threshold.tbtc.calculateDepositAddress() const receipt = deposit.getReceipt() // update state, - updateState("ethAddress", values.ethAddress) + updateState("userWalletAddress", values.userWalletAddress) updateState("depositor", receipt.depositor.identifierHex.toString()) updateState("blindingFactor", receipt.blindingFactor.toString()) updateState("btcRecoveryAddress", values.btcRecoveryAddress) @@ -183,7 +198,7 @@ export const ProvideDataComponent: FC<{ updateState("chainName", chainName) // create a new deposit address, - updateState("btcDepositAddress", depositAddress) + updateState("btcDepositAddress", btcDepositAddress) setDepositDataInLocalStorage( { @@ -191,24 +206,24 @@ export const ProvideDataComponent: FC<{ identifierHex: receipt.depositor.identifierHex.toString(), }, chainName: chainName, - ethAddress: values.ethAddress, + userWalletAddress: values.userWalletAddress, blindingFactor: receipt.blindingFactor.toString(), btcRecoveryAddress: values.btcRecoveryAddress, walletPublicKeyHash: receipt.walletPublicKeyHash.toString(), refundLocktime: receipt.refundLocktime.toString(), - btcDepositAddress: depositAddress, + btcDepositAddress, extraData: receipt.extraData?.toString() || "", }, - chainId + networkName ) - depositTelemetry(receipt, depositAddress) + depositTelemetry(receipt, btcDepositAddress) // if the user has NOT declined the json file, ask the user if they want to accept the new file if (shouldDownloadDepositReceipt) { const date = new Date().toISOString().split("T")[0] - const fileName = `${values.ethAddress}_${depositAddress}_${date}.json` + const fileName = `${values.userWalletAddress}_${btcDepositAddress}_${date}.json` const finalData = { depositor: { @@ -221,7 +236,7 @@ export const ProvideDataComponent: FC<{ refundLocktime: receipt.refundLocktime.toString(), refundPublicKeyHash: receipt.refundPublicKeyHash.toString(), blindingFactor: receipt.blindingFactor.toString(), - ethAddress: values.ethAddress, + userWalletAddress: values.userWalletAddress, walletPublicKeyHash: receipt.walletPublicKeyHash.toString(), btcRecoveryAddress: values.btcRecoveryAddress, extraData: receipt.extraData?.toString() ?? "", @@ -248,7 +263,7 @@ export const ProvideDataComponent: FC<{ { const { updateState } = useTbtcState() const { account, chainId, isActive } = useIsActive() + const { nonEVMChainName } = useNonEVMConnection() const navigate = useNavigate() const { setDepositDataInLocalStorage } = useTBTCDepositDataFromLocalStorage() const checkDepositExpiration = useCheckDepositExpirationTime() const threshold = useThreshold() + const networkName = + nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) + if (!isActive || !isSupportedNetwork(chainId)) { return ( @@ -90,7 +96,7 @@ export const ResumeDepositPage: PageComponent = () => { identifierHex: depositParameters.depositor.identifierHex, }, chainName: depositParameters.networkInfo.chainName, - ethAddress: depositParameters.ethAddress, + userWalletAddress: depositParameters.userWalletAddress, blindingFactor: depositParameters.blindingFactor, btcRecoveryAddress: depositParameters.btcRecoveryAddress, walletPublicKeyHash: depositParameters.walletPublicKeyHash, @@ -98,7 +104,7 @@ export const ResumeDepositPage: PageComponent = () => { extraData: depositParameters.extraData || "", btcDepositAddress, }, - chainId + networkName ) navigateToMintPage() } catch (error) { @@ -246,7 +252,7 @@ const ResumeDepositFormik = withFormik({ errors.depositParameters = "Deposit reveal time is expired." } else if ( isL1Network(chainId) && - !isSameETHAddress(dp.depositor.identifierHex, address) + !isSameAddress(dp.depositor.identifierHex, address) ) { errors.depositParameters = "You are not a depositor." } diff --git a/src/static/icons/Solana.tsx b/src/static/icons/Solana.tsx new file mode 100644 index 000000000..de09fbbb6 --- /dev/null +++ b/src/static/icons/Solana.tsx @@ -0,0 +1,31 @@ +import { createIcon } from "@chakra-ui/icons" + +export const SolanaIcon = createIcon({ + displayName: "SolanaIcon", + viewBox: "0 0 318.6 318.6", + path: ( + + + + + + + + + + + + + + ), +}) diff --git a/src/threshold-ts/index.ts b/src/threshold-ts/index.ts index 94ecd70c0..40ae6e0c7 100644 --- a/src/threshold-ts/index.ts +++ b/src/threshold-ts/index.ts @@ -19,7 +19,7 @@ export class Threshold { private _initialize = (config: ThresholdConfig) => { this.config = config - const { ethereum, bitcoin } = config + const { ethereum, bitcoin, crossChain } = config this.multicall = new Multicall(ethereum) this.vendingMachines = new VendingMachines(ethereum) @@ -29,7 +29,7 @@ export class Threshold { this.multicall, ethereum ) - this.tbtc = new TBTC(ethereum, bitcoin) + this.tbtc = new TBTC(ethereum, bitcoin, crossChain) } updateConfig = (config: ThresholdConfig) => { diff --git a/src/threshold-ts/tbtc/index.ts b/src/threshold-ts/tbtc/index.ts index 88ce865a9..86a472d44 100644 --- a/src/threshold-ts/tbtc/index.ts +++ b/src/threshold-ts/tbtc/index.ts @@ -17,7 +17,7 @@ import { loadEthereumCoreContracts, TBTC as SDK, Chains, - L2Chain, + DestinationChainName, } from "@keep-network/tbtc-v2.ts" import { BigNumber, @@ -29,7 +29,13 @@ import { } from "ethers" import { LogDescription } from "ethers/lib/utils" import { ContractCall, IMulticall, Multicall } from "../multicall" -import { BitcoinConfig, BitcoinNetwork, EthereumConfig } from "../types" +import { + BitcoinConfig, + BitcoinNetwork, + ChainName, + CrossChainConfig, + EthereumConfig, +} from "../types" import { AddressZero, fromSatoshiToTokenPrecision, @@ -40,21 +46,21 @@ import { getArtifact, isPayToScriptHashTypeAddress, isPublicKeyHashTypeAddress, - isSameETHAddress, + isSameAddress, isValidBtcAddress, ZERO, ArtifactNameType, - L2_RELAYER_BOT_WALLET, + RELAYER_BOT_WALLET, } from "../utils" import { isL1Network, isL2Network, - getChainIdToNetworkName, + getEthereumNetworkNameFromChainId, getMainnetOrTestnetChainId, } from "../../networks/utils" import { SupportedChainIds } from "../../networks/enums/networks" import { getThresholdLibProvider } from "../../utils/getThresholdLib" -import { getDefaultProviderChainId } from "../../utils/getEnvVariable" +import { getEthereumDefaultProviderChainId } from "../../utils/getEnvVariable" export enum BridgeActivityStatus { PENDING = "PENDING", @@ -218,17 +224,17 @@ export interface ITBTC { readonly deposit: Deposit | undefined - readonly isCrossChain: boolean + readonly crossChainConfig: CrossChainConfig /** * Initializes tbtc-v2 SDK - * @param providerOrSigner Ethers instance of Provider (if wallet is not + * @param ethereumProviderOrSigner Ethers instance of Provider (if wallet is not * connected) or Signer (if wallet is connected). * @param account Connected ethereum address (optional, needed only if user * connected his wallet). */ initializeSdk( - providerOrSigner: providers.Provider | Signer, + ethereumProviderOrSigner: providers.Provider | Signer, account?: string ): Promise /** @@ -247,7 +253,7 @@ export interface ITBTC { */ initiateCrossChainDeposit( btcRecoveryAddress: string, - chainId: number + ethereumChainId: number ): Promise /** @@ -277,7 +283,7 @@ export interface ITBTC { */ initiateCrossChainDepositFromScriptParameters( depositScriptParameters: DepositScriptParameters, - chainId: number + ethereumChainId: number ): Promise /** @@ -509,9 +515,13 @@ export class TBTC implements ITBTC { private _sdkPromise: Promise private _deposit: Deposit | undefined - private _isCrossChain: boolean = false + private _crossChainConfig: CrossChainConfig - constructor(ethereumConfig: EthereumConfig, bitcoinConfig: BitcoinConfig) { + constructor( + ethereumConfig: EthereumConfig, + bitcoinConfig: BitcoinConfig, + crossChainConfig: CrossChainConfig + ) { if (!bitcoinConfig.client && !bitcoinConfig.credentials) { throw new Error( "Neither bitcoin client nor bitcoin credentials are specified" @@ -520,10 +530,10 @@ export class TBTC implements ITBTC { const { chainId, shouldUseTestnetDevelopmentContracts, - providerOrSigner, + ethereumProviderOrSigner, account, } = ethereumConfig - this._isCrossChain = isL2Network(chainId) + this._crossChainConfig = crossChainConfig // This ensures that, if the user is connected to an L2 network, the TBTC // contracts are connected to the corresponding Ethereum mainnet or testnet @@ -575,12 +585,16 @@ export class TBTC implements ITBTC { : null this._multicall = new Multicall({ ...ethereumConfig, - providerOrSigner: defaultOrConnectedProvider, + ethereumProviderOrSigner: defaultOrConnectedProvider, chainId: mainnetOrTestnetEthereumChainId, }) - if (this._isCrossChain) { - const networkName = getChainIdToNetworkName(chainId) + if (this._crossChainConfig.isCrossChain) { + const networkName = + this._crossChainConfig.chainName === ChainName.Ethereum + ? getEthereumNetworkNameFromChainId(chainId) + : this._crossChainConfig.chainName + const l1BitcoinDepositorArtifact = getArtifact( `${networkName}L1BitcoinDepositor` as ArtifactNameType, mainnetOrTestnetEthereumChainId, @@ -609,11 +623,11 @@ export class TBTC implements ITBTC { this._bitcoinConfig = bitcoinConfig this._sdkPromise = new Promise((resolve) => resolve(undefined)) - this.initializeSdk(providerOrSigner, account) + this.initializeSdk(ethereumProviderOrSigner, account) } async _initializeSdk( - providerOrSigner: providers.Provider | Signer, + ethereumProviderOrSigner: providers.Provider | Signer, account?: string ): Promise { const isMainnet = this.bitcoinNetwork === BitcoinNetwork.Mainnet @@ -622,9 +636,9 @@ export class TBTC implements ITBTC { : getThresholdLibProvider(SupportedChainIds.Sepolia) const signer = - !!account && providerOrSigner instanceof Web3Provider - ? getSigner(providerOrSigner as Web3Provider, account) - : providerOrSigner + !!account && ethereumProviderOrSigner instanceof Web3Provider + ? getSigner(ethereumProviderOrSigner as Web3Provider, account) + : ethereumProviderOrSigner const connectedChainId = await chainIdFromSigner(signer) @@ -642,7 +656,9 @@ export class TBTC implements ITBTC { ? getSepoliaDevelopmentContracts(signer) : await loadEthereumCoreContracts( defaultProvider, - getDefaultProviderChainId().valueOf().toString() as Chains.Ethereum + getEthereumDefaultProviderChainId() + .valueOf() + .toString() as Chains.Ethereum ) const sdk = await SDK.initializeCustom(tbtcContracts, this._bitcoinClient) @@ -666,15 +682,15 @@ export class TBTC implements ITBTC { } async initializeSdk( - providerOrSigner: providers.Provider | Signer, + ethereumProviderOrSigner: providers.Provider | Signer, account?: string | undefined ): Promise { try { - this._sdkPromise = this._initializeSdk(providerOrSigner, account) + this._sdkPromise = this._initializeSdk(ethereumProviderOrSigner, account) - if (this.isCrossChain) { + if (this._crossChainConfig.isCrossChain) { await this._initiateCrossChain( - providerOrSigner as Web3Provider, + ethereumProviderOrSigner as Web3Provider, account as string ) } @@ -711,8 +727,8 @@ export class TBTC implements ITBTC { return this._l1BitcoinDepositorContract } - get isCrossChain(): boolean { - return this._isCrossChain + get crossChainConfig(): CrossChainConfig { + return this.crossChainConfig } private _getSdk = async (): Promise => { @@ -723,16 +739,23 @@ export class TBTC implements ITBTC { } private _initiateCrossChain = async ( - providerOrSigner: Web3Provider, + ethereumProviderOrSigner: Web3Provider, account: string ): Promise => { const sdk = await this._getSdk() - const signer = getSigner(providerOrSigner as Web3Provider, account) + const signer = getSigner(ethereumProviderOrSigner as Web3Provider, account) const connectedChainId = await chainIdFromSigner(signer) - const l2NetworkName = getChainIdToNetworkName(connectedChainId) - - await sdk.initializeCrossChain(l2NetworkName as L2Chain, signer) + const destinationChainName = + this._crossChainConfig.chainName === ChainName.Ethereum + ? getEthereumNetworkNameFromChainId(connectedChainId) + : this._crossChainConfig.chainName + + await sdk.initializeCrossChain( + destinationChainName as DestinationChainName, + signer, + this._crossChainConfig.nonEVMProvider + ) } initiateDeposit = async (btcRecoveryAddress: string): Promise => { @@ -743,17 +766,22 @@ export class TBTC implements ITBTC { initiateCrossChainDeposit = async ( btcRecoveryAddress: string, - chainId: number + ethereumChainId?: number | undefined ): Promise => { - if (!this._isCrossChain) { - throw new Error("Unsupported chain ID") + if (!this._crossChainConfig.isCrossChain) { + console.log("this._crossChainConfig", this._crossChainConfig) + throw new Error("Unsupported connected network") } const sdk = await this._getSdk() - const l2NetworkName = getChainIdToNetworkName(chainId) + const destinationNetworkName = + this._crossChainConfig.chainName === ChainName.Ethereum + ? getEthereumNetworkNameFromChainId(ethereumChainId) + : this._crossChainConfig.chainName + this._deposit = await sdk.deposits.initiateCrossChainDeposit( btcRecoveryAddress, - l2NetworkName as Exclude + destinationNetworkName as Exclude ) return this._deposit } @@ -792,12 +820,16 @@ export class TBTC implements ITBTC { initiateCrossChainDepositFromScriptParameters = async ( depositScriptParameters: DepositScriptParameters, - chainId: number + ethereumChainId: number ): Promise => { - if (!this._isCrossChain) { + if (!this._crossChainConfig.isCrossChain) { + console.log("this._crossChainConfig", this._crossChainConfig) throw new Error("Unsupported chain ID") } - const l2NetworkName = getChainIdToNetworkName(chainId) + const destinationNetworkName = + this._crossChainConfig.chainName === ChainName.Ethereum + ? getEthereumNetworkNameFromChainId(ethereumChainId) + : this._crossChainConfig.chainName const sdk = await this._getSdk() const { @@ -823,12 +855,12 @@ export class TBTC implements ITBTC { } await this._initiateCrossChain( - this._ethereumConfig.providerOrSigner as Web3Provider, + this._ethereumConfig.ethereumProviderOrSigner as Web3Provider, this._ethereumConfig.account as string ) const crossChainContracts = sdk.crossChainContracts( - l2NetworkName as Exclude + destinationNetworkName as Exclude ) if (!crossChainContracts) { @@ -864,7 +896,7 @@ export class TBTC implements ITBTC { depositTxMaxFee, } = await this.getDepositFees() - const crossChainTxFee = this.isCrossChain + const crossChainTxFee = this._crossChainConfig.isCrossChain ? BigNumber.from(depositTxMaxFee) : ZERO @@ -1011,8 +1043,10 @@ export class TBTC implements ITBTC { const l1DepositActivities = await this._findL1DepositActivities(depositor) let l2DepositActivities: BridgeActivity[] = [] - if (this.isCrossChain) { - l2DepositActivities = await this._findL2DepositActivities(depositor) + if (this._crossChainConfig.isCrossChain) { + l2DepositActivities = await this._findCrossChainDepositActivities( + depositor + ) } const depositActivities = [...l1DepositActivities, ...l2DepositActivities] @@ -1024,11 +1058,11 @@ export class TBTC implements ITBTC { findAllRevealedDeposits = async ( depositor: string ): Promise => { - const chainId = getMainnetOrTestnetChainId(this.ethereumChainId) + const ethereumChainId = getMainnetOrTestnetChainId(this.ethereumChainId) const bridgeArtifact = getArtifact( "Bridge", - chainId, + ethereumChainId, this._ethereumConfig.shouldUseTestnetDevelopmentContracts ) @@ -1128,64 +1162,69 @@ export class TBTC implements ITBTC { }) } - private _findL2DepositActivities = async ( + private _findCrossChainDepositActivities = async ( depositor: string ): Promise => { - const l2DepositActivities: BridgeActivity[] = [] + const crossChainDepositActivities: BridgeActivity[] = [] - const l2AllRevealedDeposits = await this.findAllRevealedDeposits( + const crossChainAllRevealedDeposits = await this.findAllRevealedDeposits( this.l1BitcoinDepositorContract?.address as string ) - const l2DepositKeys = l2AllRevealedDeposits.map((_) => _.depositKey) + const crossChainDepositKeys = crossChainAllRevealedDeposits.map( + (_) => _.depositKey + ) const estimatedAmountToMintByDepositKey = await this._calculateEstimatedAmountToMintForRevealedDeposits( - l2DepositKeys + crossChainDepositKeys ) - const l2InitializedDepositsEvents = - await this._findAllInitializedL2Deposits(depositor) - const l2FinalizedDepositsEvents = await this._findAllFinalizedL2Deposits( - depositor - ) + const crossChainInitializedDepositsEvents = + await this._findAllInitializedCrossChainDeposits(depositor) + const crossChainFinalizedDepositsEvents = + await this._findAllFinalizedCrossChainDeposits(depositor) - const l2InitializedDeposits = new Map( - l2InitializedDepositsEvents.map((event) => [ + const crossChainInitializedDeposits = new Map( + crossChainInitializedDepositsEvents.map((event) => [ (event.args?.depositKey as BigNumber).toHexString(), event.transactionHash, ]) ) - const l2FinalizedDeposits = new Map( - l2FinalizedDepositsEvents.map((event) => [ + const crossChainFinalizedDeposits = new Map( + crossChainFinalizedDepositsEvents.map((event) => [ (event.args?.depositKey as BigNumber).toHexString(), event.transactionHash, ]) ) - const l2FinalizedDepositAmountByTxHash = new Map( - l2FinalizedDepositsEvents.map((event) => [ + const crossChainFinalizedDepositAmountByTxHash = new Map( + crossChainFinalizedDepositsEvents.map((event) => [ event.transactionHash, event.args?.tbtcAmount as BigNumber, ]) ) - for (const l2Deposit of l2AllRevealedDeposits) { - const { depositKey, txHash: depositTxHash, blockNumber } = l2Deposit + for (const crossChainDeposit of crossChainAllRevealedDeposits) { + const { + depositKey, + txHash: depositTxHash, + blockNumber, + } = crossChainDeposit - if (!l2InitializedDeposits.has(depositKey)) continue + if (!crossChainInitializedDeposits.has(depositKey)) continue let status = BridgeActivityStatus.PENDING let txHash = depositTxHash let amount = estimatedAmountToMintByDepositKey.get(depositKey) ?? ZERO - if (l2FinalizedDeposits.has(depositKey)) { + if (crossChainFinalizedDeposits.has(depositKey)) { status = BridgeActivityStatus.MINTED - txHash = l2FinalizedDeposits.get(depositKey)! - amount = l2FinalizedDepositAmountByTxHash.get(txHash)! + txHash = crossChainFinalizedDeposits.get(depositKey)! + amount = crossChainFinalizedDepositAmountByTxHash.get(txHash)! } - l2DepositActivities.push({ + crossChainDepositActivities.push({ amount: amount.toString(), txHash, status, @@ -1195,17 +1234,17 @@ export class TBTC implements ITBTC { } as BridgeActivity) } - return l2DepositActivities + return crossChainDepositActivities } - private _findAllFinalizedL2Deposits = async ( + private _findAllFinalizedCrossChainDeposits = async ( depositor: string ): Promise> => { const l2DepositOwner = depositor - const l1Sender = L2_RELAYER_BOT_WALLET + const l1Sender = RELAYER_BOT_WALLET const l1BitcoinDepositorArtifact = getArtifact( - `${getChainIdToNetworkName( + `${getEthereumNetworkNameFromChainId( this.ethereumChainId )}L1BitcoinDepositor` as ArtifactNameType, getMainnetOrTestnetChainId(this.ethereumChainId) @@ -1223,14 +1262,14 @@ export class TBTC implements ITBTC { }) } - private _findAllInitializedL2Deposits = async ( + private _findAllInitializedCrossChainDeposits = async ( depositor: string ): Promise> => { const l2DepositOwner = depositor - const l1Sender = L2_RELAYER_BOT_WALLET + const l1Sender = RELAYER_BOT_WALLET const l1BitcoinDepositorArtifact = getArtifact( - `${getChainIdToNetworkName( + `${getEthereumNetworkNameFromChainId( this.ethereumChainId )}L1BitcoinDepositor` as ArtifactNameType, getMainnetOrTestnetChainId(this.ethereumChainId) @@ -1294,12 +1333,10 @@ export class TBTC implements ITBTC { // There is only one transfer to depositor account. const transferEvent = receipt.logs - .filter((log) => - isSameETHAddress(log.address, this._tokenContract!.address) - ) + .filter((log) => isSameAddress(log.address, this._tokenContract!.address)) .map((log) => this._tokenContract!.interface.parseLog(log)) .filter((log) => log.name === "Transfer") - .find((log) => isSameETHAddress(log.args.to, depositor)) + .find((log) => isSameAddress(log.args.to, depositor)) return [ optimisticMintingFinalizedTxHash, @@ -1311,11 +1348,11 @@ export class TBTC implements ITBTC { depositor: string, depositKeys: string[] = [] ): Promise> => { - const chainId = getMainnetOrTestnetChainId(this.ethereumChainId) + const ethereumChainId = getMainnetOrTestnetChainId(this.ethereumChainId) const tbtcVaultArtifact = getArtifact( "TBTCVault", - chainId, + ethereumChainId, this._ethereumConfig.shouldUseTestnetDevelopmentContracts ) @@ -1334,11 +1371,11 @@ export class TBTC implements ITBTC { private _findAllCancelledDeposits = async ( depositKeys: string[] ): Promise> => { - const chainId = getMainnetOrTestnetChainId(this.ethereumChainId) + const ethereumChainId = getMainnetOrTestnetChainId(this.ethereumChainId) const tbtcVaultArtifact = getArtifact( "TBTCVault", - chainId, + ethereumChainId, this._ethereumConfig.shouldUseTestnetDevelopmentContracts ) diff --git a/src/threshold-ts/types/index.ts b/src/threshold-ts/types/index.ts index c488d9c6b..fd8fbbc3b 100644 --- a/src/threshold-ts/types/index.ts +++ b/src/threshold-ts/types/index.ts @@ -1,3 +1,4 @@ +import { AnchorProvider } from "@coral-xyz/anchor" import { BitcoinClient, BitcoinNetwork, @@ -6,8 +7,18 @@ import { } from "@keep-network/tbtc-v2.ts" import { providers, Signer } from "ethers" +export type CrossChainConfig = { + isCrossChain: boolean + chainName: ChainName | null + nonEVMProvider: AnchorProvider | null +} + +export enum ChainName { + Ethereum = "Ethereum", // can be any l2 based on Ethereum network as such as arbitrum, optimism, etc. + Solana = "Solana", +} export interface EthereumConfig { - providerOrSigner: providers.Provider | Signer + ethereumProviderOrSigner: providers.Provider | Signer chainId: string | number shouldUseTestnetDevelopmentContracts: boolean account?: string @@ -44,6 +55,7 @@ export interface BitcoinConfig { export interface ThresholdConfig { ethereum: EthereumConfig bitcoin: BitcoinConfig + crossChain: CrossChainConfig } export { BitcoinNetwork } diff --git a/src/utils/getThresholdLib.ts b/src/utils/getThresholdLib.ts index 47a440caf..3d1d622ea 100644 --- a/src/utils/getThresholdLib.ts +++ b/src/utils/getThresholdLib.ts @@ -8,6 +8,7 @@ import { shouldUseTestnetDevelopmentContracts, } from "../utils/getEnvVariable" import { + isL2Network, isSupportedNetwork, isTestnetChainId, } from "../networks/utils/connectedNetwork" @@ -18,19 +19,29 @@ import { BitcoinNetwork, BitcoinClientCredentials, EthereumConfig, + ChainName, + CrossChainConfig, } from "../threshold-ts/types" import { SupportedChainIds } from "../networks/enums/networks" import { getDefaultBitcoinCredentials } from "./getDefaultBitcoinCredentials" const defaultProviderChainId = getEthereumDefaultProviderChainId() +function getInitialCrossChainConfig(): CrossChainConfig { + return { + isCrossChain: isL2Network(defaultProviderChainId), + chainName: isL2Network(defaultProviderChainId) ? ChainName.Ethereum : null, + nonEVMProvider: null, + } +} function getInitialEthereumConfig( - providerOrSigner?: Provider | Signer + ethereumProviderOrSigner?: Provider | Signer ): EthereumConfig { return { chainId: getEthereumDefaultProviderChainId(), - providerOrSigner: - providerOrSigner || getThresholdLibProvider(defaultProviderChainId), + ethereumProviderOrSigner: + ethereumProviderOrSigner || + getThresholdLibProvider(defaultProviderChainId), shouldUseTestnetDevelopmentContracts: defaultProviderChainId === SupportedChainIds.Sepolia && shouldUseTestnetDevelopmentContracts, @@ -64,10 +75,13 @@ export const getThresholdLibProvider = (chainId?: number | string) => { return new JsonRpcProvider(rpcUrl, supportedChainId) } -export const getThresholdLib = (providerOrSigner?: Provider | Signer) => { +export const getThresholdLib = ( + ethereumProviderOrSigner?: Provider | Signer +) => { return new Threshold({ - ethereum: getInitialEthereumConfig(providerOrSigner), + ethereum: getInitialEthereumConfig(ethereumProviderOrSigner), bitcoin: getInitialBitcoinConfig(), + crossChain: getInitialCrossChainConfig(), }) } diff --git a/src/utils/shortenAddress.ts b/src/utils/shortenAddress.ts index 5b6c925a3..27777ab87 100644 --- a/src/utils/shortenAddress.ts +++ b/src/utils/shortenAddress.ts @@ -1,9 +1,22 @@ -const shortenAddress = (address?: string, sliceDigits = -4): string => { - return address - ? `${address.slice(0, Math.abs(sliceDigits) + 2)}...${address.slice( - sliceDigits - )}` - : "" +const ETH_REGEX = /^0x[a-fA-F0-9]{40}$/ // 0x + 40 hex chars +const BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/ // 0x + 64 hex chars + +const shortenAddress = (address?: string | null, sliceDigits = -4): string => { + if (!address) return "" + + // Check if it's an Ethereum address + if (ETH_REGEX.test(address)) { + return `${address.slice(0, Math.abs(sliceDigits) + 2)}...${address.slice( + sliceDigits + )}` + } + + // Check if it's a bytes32 address (e.g., 0x + 64 hex) + if (BYTES32_REGEX.test(address)) { + return `${address.slice(0, 10)}...${address.slice(-10)}` + } + + return `${address.slice(0, 6)}...${address.slice(-4)}` } export default shortenAddress diff --git a/src/utils/tbtcLocalStorageData.ts b/src/utils/tbtcLocalStorageData.ts index 3b98e65de..baefc1989 100644 --- a/src/utils/tbtcLocalStorageData.ts +++ b/src/utils/tbtcLocalStorageData.ts @@ -7,7 +7,7 @@ export type Depositor = { export type TBTCDepositData = { depositor: Depositor chainName: string - ethAddress: string + userWalletAddress: string blindingFactor: string btcRecoveryAddress: string walletPublicKeyHash: string @@ -26,7 +26,7 @@ export function write( account: string, newDepositData: TBTCDepositData, prevData: TBTCLocalStorageDepositData, - chainId?: number | string + networkName: string ) { if (!account) return @@ -36,7 +36,7 @@ export function write( } writeStorage( - `${key}-${chainId?.toString()}`, + `${key}-${networkName}`, newLocalStorageData ) } @@ -44,7 +44,7 @@ export function write( export function removeDataForAccount( account: string, prevData: TBTCLocalStorageDepositData, - chainId?: number | string + networkName: string ) { const newLocalStorageData = { ...prevData, @@ -52,7 +52,7 @@ export function removeDataForAccount( delete newLocalStorageData[`${account}`] writeStorage( - `${key}-${chainId?.toString()}`, + `${key}-${networkName}`, newLocalStorageData ) } diff --git a/src/web3/utils/address.ts b/src/web3/utils/address.ts index 922ff4d1e..f2a8c0f9e 100644 --- a/src/web3/utils/address.ts +++ b/src/web3/utils/address.ts @@ -3,26 +3,72 @@ import { getAddress as ethersGetAddress, } from "@ethersproject/address" import { AddressZero } from "@ethersproject/constants" -export { unprefixedAndUncheckedAddress } from "../../threshold-ts/utils" -import { ethers } from "ethers" + +import bs58 from "bs58" export const getAddress = (address: string) => ethersGetAddress(address) +export const isEthereumAddress = (address: string): boolean => + ethersIsAddress(address) + +export const normalizeETHAddress = (address: string): string => { + return getAddress(address) +} + +export const isBytes32Address = (address: string): boolean => { + // 66 characters total: "0x" + 64 hex chars + return /^0x[0-9A-Fa-f]{64}$/.test(address) +} + +export const isSolanaAddress = (address: string): boolean => { + try { + const bytes = bs58.decode(address) + // Typical Solana public keys are 32 bytes: + return bytes.length === 32 + } catch (err) { + return false + } +} + +export const isSameAddress = (address1: string, address2: string): boolean => { + if (isEthereumAddress(address1) && isEthereumAddress(address2)) { + return normalizeETHAddress(address1) === normalizeETHAddress(address2) + } -export const isAddress = (address: string): boolean => ethersIsAddress(address) + if (isBytes32Address(address1) && isBytes32Address(address2)) { + return isSameBytes32Address(address1, address2) + } + + if (isSolanaAddress(address1) && isSolanaAddress(address2)) { + return isSameSolanaAddress(address1, address2) + } + + return false +} + +export const isSameSolanaAddress = (addr1: string, addr2: string): boolean => { + const bytes1 = bs58.decode(addr1) + const bytes2 = bs58.decode(addr2) + // Compare their hex-strings: + return bytes1.toString() === bytes2.toString() +} + +export const isSameBytes32Address = (addr1: string, addr2: string): boolean => { + return addr1.toLowerCase() === addr2.toLowerCase() +} -export const isSameETHAddress = ( - address1: string, - address2: string -): boolean => { - // TODO: this has the potential to cause an app crash if the addresses passed are not valid ETH addresses - return getAddress(address1) === getAddress(address2) +export const isAddress = (address: string): boolean => { + return ( + isEthereumAddress(address) || + isBytes32Address(address) || + isSolanaAddress(address) + ) } export const isAddressZero = (address: string): boolean => - isSameETHAddress(address, AddressZero) + isSameAddress(address, AddressZero) export const isEmptyOrZeroAddress = (address: string): boolean => { - return !isAddress(address) || isAddressZero(address) + return !isEthereumAddress(address) || isAddressZero(address) } export { AddressZero } From 7f83e40291a5b7589057c74c57dd90ac4d599305 Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Sun, 13 Apr 2025 17:43:02 -0300 Subject: [PATCH 7/8] fix: add non evm chain validations --- .../tBTC/Bridge/Minting/MintingFlowRouter.tsx | 5 +++- src/pages/tBTC/Bridge/Minting/ProvideData.tsx | 25 ++++++++----------- src/store/tbtc/effects.ts | 18 +++++++------ src/store/tbtc/tbtcSlice.ts | 3 ++- src/threshold-ts/tbtc/index.ts | 2 +- src/web3/hooks/useSendTransaction.ts | 4 ++- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/pages/tBTC/Bridge/Minting/MintingFlowRouter.tsx b/src/pages/tBTC/Bridge/Minting/MintingFlowRouter.tsx index eb0f0410d..e70088410 100644 --- a/src/pages/tBTC/Bridge/Minting/MintingFlowRouter.tsx +++ b/src/pages/tBTC/Bridge/Minting/MintingFlowRouter.tsx @@ -14,10 +14,12 @@ import { BridgeProcessCardTitle } from "../components/BridgeProcessCardTitle" import { useRemoveDepositData } from "../../../../hooks/tbtc/useRemoveDepositData" import { useAppDispatch } from "../../../../hooks/store" import { tbtcSlice } from "../../../../store/tbtc" +import { useNonEVMConnection } from "../../../../hooks/useNonEVMConnection" const MintingFlowRouterBase = () => { const dispatch = useAppDispatch() const { account, chainId } = useIsActive() + const { isNonEVMActive, nonEVMChainName } = useNonEVMConnection() const { mintingStep, updateState, btcDepositAddress, utxo } = useTbtcState() const removeDepositData = useRemoveDepositData() const { openModal } = useModal() @@ -36,13 +38,14 @@ const MintingFlowRouterBase = () => { } useEffect(() => { - if (!btcDepositAddress || !account || !chainId) { + if (!btcDepositAddress || (!chainId && !isNonEVMActive)) { return } dispatch( tbtcSlice.actions.findUtxo({ btcDepositAddress, chainId, + nonEVMChainName, }) ) }, [btcDepositAddress, account, chainId, dispatch]) diff --git a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx index 830f654ac..232fae9bd 100644 --- a/src/pages/tBTC/Bridge/Minting/ProvideData.tsx +++ b/src/pages/tBTC/Bridge/Minting/ProvideData.tsx @@ -23,7 +23,6 @@ import { getEthereumNetworkNameFromChainId, isL1Network, isSupportedNetwork, - isTestnetChainId, } from "../../../../networks/utils" import { getBridgeBTCSupportedAddressPrefixesText } from "../../../../utils/tBTC" import { downloadFile, isSameAddress } from "../../../../web3/utils" @@ -54,10 +53,10 @@ type ComponentProps = { const MintingProcessFormBase: FC> = ({ formId, }) => { - const { chainId } = useIsActive() + const { config } = useThreshold() const resolvedBTCAddressPrefix = getBridgeBTCSupportedAddressPrefixesText( "mint", - isTestnetChainId(chainId as number) + config.bitcoin.network === BitcoinNetwork.Testnet ? BitcoinNetwork.Testnet : BitcoinNetwork.Mainnet ) @@ -129,6 +128,7 @@ export const ProvideDataComponent: FC<{ useNonEVMConnection() const { setDepositDataInLocalStorage } = useTBTCDepositDataFromLocalStorage() const depositTelemetry = useDepositTelemetry(threshold.tbtc.bitcoinNetwork) + const connectedAccount = account || nonEVMPublicKey const networkName = nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) @@ -148,18 +148,12 @@ export const ProvideDataComponent: FC<{ const onSubmit = useCallback( async (values: FormValues) => { - if (account && !isSameAddress(values.userWalletAddress, account)) { - throw new Error( - "The account used to generate the deposit address must be the same as the connected wallet." - ) - } - if ( - nonEVMPublicKey && - !isSameAddress(values.userWalletAddress, nonEVMPublicKey) + connectedAccount && + !isSameAddress(values.userWalletAddress, connectedAccount) ) { throw new Error( - "The non-EVM account used to generate the deposit address must be the same as the connected wallet." + "The account used to generate the deposit address must be the same as the connected wallet." ) } @@ -169,12 +163,13 @@ export const ProvideDataComponent: FC<{ ) } - const chainName = getEthereumNetworkNameFromChainId(chainId) + const chainName = + nonEVMChainName || getEthereumNetworkNameFromChainId(chainId) setSubmitButtonLoading(true) let deposit: Deposit - if (isL1Network(chainId)) { + if (!isNonEVMActive && isL1Network(chainId)) { deposit = await threshold.tbtc.initiateDeposit( values.btcRecoveryAddress ) @@ -231,7 +226,7 @@ export const ProvideDataComponent: FC<{ }, networkInfo: { chainName: chainName, - chainId: chainId!.toString(), + chainId: chainId?.toString(), }, refundLocktime: receipt.refundLocktime.toString(), refundPublicKeyHash: receipt.refundPublicKeyHash.toString(), diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index 6750d116b..bd4a9cd57 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -14,6 +14,8 @@ import { isL1Network, isSameChainId, } from "../../networks/utils" +import { isAddress } from "@ethersproject/address" +import { SupportedChainIds } from "../../networks/enums/networks" export const fetchBridgeactivityEffect = async ( action: ReturnType, @@ -59,7 +61,7 @@ export const findUtxoEffect = async ( action: ReturnType, listenerApi: AppListenerEffectAPI ) => { - const { btcDepositAddress, chainId } = action.payload + const { btcDepositAddress, chainId, nonEVMChainName } = action.payload const { tbtc: { @@ -73,10 +75,7 @@ export const findUtxoEffect = async ( }, } = listenerApi.getState() - if ( - !btcDepositAddress || - (!isEthereumAddress(depositor) && !isAddressZero(depositor)) - ) + if (!btcDepositAddress || !isAddress(depositor) || isAddressZero(depositor)) return // Cancel any in-progress instances of this listener. @@ -85,7 +84,10 @@ export const findUtxoEffect = async ( const pollingTask = listenerApi.fork(async (forkApi) => { try { while (true) { - if (getEthereumNetworkNameFromChainId(chainId) !== chainName) { + if ( + !nonEVMChainName && + getEthereumNetworkNameFromChainId(chainId) !== chainName + ) { throw new Error("Chain ID and deposit chain name mismatch") } // Initiating deposit from redux store (if deposit object is empty) @@ -109,7 +111,7 @@ export const findUtxoEffect = async ( refundLocktime, } - if (isL1Network(chainId)) { + if (!nonEVMChainName && isL1Network(chainId)) { await forkApi.pause( listenerApi.extra.threshold.tbtc.initiateDepositFromDepositScriptParameters( depositParams @@ -122,7 +124,7 @@ export const findUtxoEffect = async ( ...depositParams, extraData, }, - chainId + chainId || SupportedChainIds.Ethereum ) ) } diff --git a/src/store/tbtc/tbtcSlice.ts b/src/store/tbtc/tbtcSlice.ts index c19b06ad3..4cc80e44a 100644 --- a/src/store/tbtc/tbtcSlice.ts +++ b/src/store/tbtc/tbtcSlice.ts @@ -108,7 +108,8 @@ export const tbtcSlice = createSlice({ state, action: PayloadAction<{ btcDepositAddress: string - chainId: number + chainId: number | undefined + nonEVMChainName: string | null }> ) => {}, fetchUtxoConfirmations: ( diff --git a/src/threshold-ts/tbtc/index.ts b/src/threshold-ts/tbtc/index.ts index 86a472d44..fcc75cc4d 100644 --- a/src/threshold-ts/tbtc/index.ts +++ b/src/threshold-ts/tbtc/index.ts @@ -675,7 +675,7 @@ export class TBTC implements ITBTC { // We need to use a mainnet default provider to initialize the SDK const sdk = await initializeFunction( initializerProviderOrSigner, - isL2Network(connectedChainId) + this._crossChainConfig.isCrossChain ) return sdk diff --git a/src/web3/hooks/useSendTransaction.ts b/src/web3/hooks/useSendTransaction.ts index 16146cd7d..844973902 100644 --- a/src/web3/hooks/useSendTransaction.ts +++ b/src/web3/hooks/useSendTransaction.ts @@ -10,6 +10,7 @@ import { useIsEmbed } from "../../hooks/useIsEmbed" import { useIsActive } from "../../hooks/useIsActive" import { useSelector } from "react-redux" import { RootState } from "../../store" +import { useNonEVMConnection } from "../../hooks/useNonEVMConnection" type TransactionHashWithAdditionalParams = { hash: string @@ -53,6 +54,7 @@ export const useSendTransactionFromFn = < } = useSelector((state: RootState) => state.account) const { library } = useWeb3React() const { account } = useIsActive() + const { nonEVMPublicKey } = useNonEVMConnection() const { openModal } = useModal() const [transactionStatus, setTransactionStatus] = useState( TransactionStatus.Idle @@ -70,7 +72,7 @@ export const useSendTransactionFromFn = < const sendTransaction = useCallback( async (...args: Parameters) => { try { - if (!account || isBlocked || isFetching) { + if ((!nonEVMPublicKey && !account) || isBlocked || isFetching) { const errorMessage = `Transaction attempt failed: ${ isFetching ? "We're currently assessing the security details of your wallet, please try again later." From e4749749f932d0519c7c2ae45bf069793b344640 Mon Sep 17 00:00:00 2001 From: evandrosaturnino Date: Tue, 6 May 2025 14:27:00 -0300 Subject: [PATCH 8/8] refactor: get receipt from send function --- src/App.tsx | 7 +++-- src/components/SubmitTxButton.tsx | 6 ++-- .../useTBTCDepositDataFromLocalStorage.ts | 2 +- src/hooks/useFetchOwnerStakes.ts | 4 +-- src/networks/utils/chainId.ts | 20 +++++++++--- src/pages/tBTC/Bridge/DepositDetails.tsx | 2 +- src/pages/tBTC/Bridge/Mint.tsx | 4 +-- .../tBTC/Bridge/Minting/InitiateMinting.tsx | 6 ++-- .../tBTC/Bridge/Minting/MintingTimeline.tsx | 2 +- src/pages/tBTC/Bridge/ResumeDeposit.tsx | 25 ++++++++------- .../components/BridgeProcessEmptyState.tsx | 10 ++++-- src/store/staking-applications/effects.ts | 6 ++-- src/store/staking/effects.ts | 4 +-- src/store/tbtc/effects.ts | 4 +-- src/threshold-ts/tbtc/index.ts | 31 ++++++++++++++----- src/threshold-ts/utils/index.ts | 1 + src/threshold-ts/utils/transaction.ts | 14 +++++++++ src/web3/hooks/useSendTransaction.ts | 24 +++++++++----- 18 files changed, 118 insertions(+), 54 deletions(-) create mode 100644 src/threshold-ts/utils/transaction.ts diff --git a/src/App.tsx b/src/App.tsx index 19f9ec06c..625a187ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -63,7 +63,7 @@ import { useIsEmbed } from "./hooks/useIsEmbed" import TBTC from "./pages/tBTC" import { useDetectIfEmbed } from "./hooks/useDetectIfEmbed" import { useGoogleTagManager } from "./hooks/google-tag-manager" -import { hexToNumber, isSameChainId } from "./networks/utils" +import { hexToNumber, isSameChainNameOrId } from "./networks/utils" import { walletConnected } from "./store/account" import { useIsActive } from "./hooks/useIsActive" import SolanaWalletProvider from "./contexts/SolanaWalletProvider" @@ -143,7 +143,10 @@ const AppBody = () => { const updateHandler = (update: ConnectorUpdate) => { // if chain is changed then just update the redux store for the wallet // connection - if (update.chainId && !isSameChainId(update.chainId, chainId as number)) { + if ( + update.chainId && + !isSameChainNameOrId(update.chainId, chainId as number) + ) { dispatch( walletConnected({ address: account || "", diff --git a/src/components/SubmitTxButton.tsx b/src/components/SubmitTxButton.tsx index c3892cc21..9ab318e65 100644 --- a/src/components/SubmitTxButton.tsx +++ b/src/components/SubmitTxButton.tsx @@ -27,7 +27,9 @@ const SubmitTxButton: FC = ({ const connectWallet = useConnectWallet() const isButtonDisabled = isBlocked || isDisabled const pathnameUrl = window.location.pathname - const isMint = pathnameUrl.includes("tBTC/mint") + const isMint = + pathnameUrl.includes("tBTC/mint") || + pathnameUrl.includes("tBTC/resume-deposit") const onConnectWalletClick = () => { disconnectNonEVM() @@ -54,7 +56,7 @@ const SubmitTxButton: FC = ({ type="button" isDisabled={false} > - Connect Ethereum Wallet + Connect Wallet ) } diff --git a/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts b/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts index 2a057d706..dc4936053 100644 --- a/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts +++ b/src/hooks/tbtc/useTBTCDepositDataFromLocalStorage.ts @@ -21,7 +21,7 @@ export const useTBTCDepositDataFromLocalStorage = () => { useState({}) useEffect(() => { - const storageKey = `${key}-${chainId?.toString()}` + const storageKey = `${key}-${networkName?.toString()}` const storedData = localStorage.getItem(storageKey) const parsedData = storedData ? JSON.parse(storedData) : {} diff --git a/src/hooks/useFetchOwnerStakes.ts b/src/hooks/useFetchOwnerStakes.ts index ddcff5061..38d2310a4 100644 --- a/src/hooks/useFetchOwnerStakes.ts +++ b/src/hooks/useFetchOwnerStakes.ts @@ -3,7 +3,7 @@ import { StakeData } from "../types/staking" import { setStakes } from "../store/staking" import { useThreshold } from "../contexts/ThresholdContext" import { useAppDispatch } from "./store" -import { isSameChainId } from "../networks/utils" +import { isSameChainNameOrId } from "../networks/utils" export const useFetchOwnerStakes = () => { const threshold = useThreshold() @@ -18,7 +18,7 @@ export const useFetchOwnerStakes = () => { !address || !threshold.staking || !chainId || - !isSameChainId(threshold.config.ethereum.chainId, chainId) + !isSameChainNameOrId(threshold.config.ethereum.chainId, chainId) ) { return [] } diff --git a/src/networks/utils/chainId.ts b/src/networks/utils/chainId.ts index 847c6b924..2f92431af 100644 --- a/src/networks/utils/chainId.ts +++ b/src/networks/utils/chainId.ts @@ -1,4 +1,4 @@ -import { ethers } from "ethers" +import { BigNumber, ethers } from "ethers" export const toHex = (value: string | number): string => ethers.utils.hexValue(ethers.BigNumber.from(value)) @@ -14,7 +14,17 @@ export const hexToNumber = (value: string | number): number => { return parseInt(value) } -export const isSameChainId = ( - chainId1: string | number, - chainId2: string | number -): boolean => toHex(chainId1) === toHex(chainId2) +export const isSameChainNameOrId = ( + a: string | number | undefined, + b: string | number | undefined +): boolean => { + if (a === undefined || b === undefined) return false + + // both numeric → safe BigNumber comparison + if (!isNaN(+a) && !isNaN(+b)) { + return BigNumber.from(a).eq(BigNumber.from(b)) + } + + // at least one side is not numeric → do case-insensitive string compare + return String(a).toLowerCase() === String(b).toLowerCase() +} diff --git a/src/pages/tBTC/Bridge/DepositDetails.tsx b/src/pages/tBTC/Bridge/DepositDetails.tsx index 7216e3849..98b8bd429 100644 --- a/src/pages/tBTC/Bridge/DepositDetails.tsx +++ b/src/pages/tBTC/Bridge/DepositDetails.tsx @@ -583,7 +583,7 @@ const StepSwitcher: FC = () => { ) : ( - Add the tBTC to your Ethereum wallet. + Add the tBTC to your wallet. )} diff --git a/src/pages/tBTC/Bridge/Mint.tsx b/src/pages/tBTC/Bridge/Mint.tsx index ba5d2fcc4..ab78006ef 100644 --- a/src/pages/tBTC/Bridge/Mint.tsx +++ b/src/pages/tBTC/Bridge/Mint.tsx @@ -30,7 +30,7 @@ export const MintingFormPage: PageComponent = ({ ...props }) => { const { tBTCDepositData } = useTBTCDepositDataFromLocalStorage() const { btcDepositAddress, updateState, resetDepositData } = useTbtcState() const { account, chainId } = useIsActive() - const { nonEVMPublicKey } = useNonEVMConnection() + const { nonEVMPublicKey, nonEVMChainName } = useNonEVMConnection() const checkDepositExpiration = useCheckDepositExpirationTime() const removeDepositData = useRemoveDepositData() @@ -39,9 +39,9 @@ export const MintingFormPage: PageComponent = ({ ...props }) => { useEffect(() => { const updateDepositData = async () => { if ( + (chainId || nonEVMChainName) && tBTCDepositData && userConnectedAccount && - chainId && tBTCDepositData[userConnectedAccount] && isSameAddress( tBTCDepositData[userConnectedAccount].userWalletAddress, diff --git a/src/pages/tBTC/Bridge/Minting/InitiateMinting.tsx b/src/pages/tBTC/Bridge/Minting/InitiateMinting.tsx index d632d4dbf..97762144f 100644 --- a/src/pages/tBTC/Bridge/Minting/InitiateMinting.tsx +++ b/src/pages/tBTC/Bridge/Minting/InitiateMinting.tsx @@ -91,9 +91,9 @@ const InitiateMintingComponent: FC<{
- Receiving tBTC requires a single transaction on Ethereum and takes - approximately 2 hours. The bridging can be initiated before you get - all your Bitcoin deposit confirmations. + Receiving tBTC requires a single transaction and takes approximately 2 + hours. The bridging can be initiated before you get all your Bitcoin + deposit confirmations.
diff --git a/src/pages/tBTC/Bridge/Minting/MintingTimeline.tsx b/src/pages/tBTC/Bridge/Minting/MintingTimeline.tsx index d44bd1ec0..c69c60caa 100644 --- a/src/pages/tBTC/Bridge/Minting/MintingTimeline.tsx +++ b/src/pages/tBTC/Bridge/Minting/MintingTimeline.tsx @@ -129,7 +129,7 @@ export const MintingTimelineStep3: FC = ({ isComplete={isComplete} stepNumber={3} label="Initiate minting" - description="Minting tBTC does not require you to wait for the Bitcoin confirmations. Sign an Ethereum transaction in your wallet and your tBTC will arrive in around 1 to 3 hours." + description="Minting tBTC does not require you to wait for the Bitcoin confirmations. Sign an transaction in your wallet and your tBTC will arrive in around 1 to 3 hours." {...restProps} /> ) diff --git a/src/pages/tBTC/Bridge/ResumeDeposit.tsx b/src/pages/tBTC/Bridge/ResumeDeposit.tsx index d12a3e4b0..7c8f2b505 100644 --- a/src/pages/tBTC/Bridge/ResumeDeposit.tsx +++ b/src/pages/tBTC/Bridge/ResumeDeposit.tsx @@ -44,15 +44,14 @@ import { getEthereumNetworkNameFromChainId, isL1Network, isL2Network, - isSameChainId, - isSupportedNetwork, + isSameChainNameOrId, } from "../../../networks/utils" import { useNonEVMConnection } from "../../../hooks/useNonEVMConnection" export const ResumeDepositPage: PageComponent = () => { const { updateState } = useTbtcState() const { account, chainId, isActive } = useIsActive() - const { nonEVMChainName } = useNonEVMConnection() + const { isNonEVMActive, nonEVMChainName } = useNonEVMConnection() const navigate = useNavigate() const { setDepositDataInLocalStorage } = useTBTCDepositDataFromLocalStorage() const checkDepositExpiration = useCheckDepositExpirationTime() @@ -61,7 +60,7 @@ export const ResumeDepositPage: PageComponent = () => { const networkName = nonEVMChainName ?? getEthereumNetworkNameFromChainId(chainId) - if (!isActive || !isSupportedNetwork(chainId)) { + if (!isActive && !isNonEVMActive) { return ( @@ -85,7 +84,7 @@ export const ResumeDepositPage: PageComponent = () => { } else { await threshold.tbtc.initiateCrossChainDepositFromScriptParameters( depositParameters, - chainId! + chainId ) } const btcDepositAddress = await threshold.tbtc.calculateDepositAddress() @@ -129,6 +128,7 @@ export const ResumeDepositPage: PageComponent = () => { bitcoinNetwork: BitcoinNetwork chainId: SupportedChainIds + networkName: string } const ResumeDepositFormik = withFormik({ mapPropsToValues: () => ({ depositParameters: null }), validate: async ( values, - { address, checkDepositExpiration, bitcoinNetwork, chainId } + { address, checkDepositExpiration, bitcoinNetwork, chainId, networkName } ) => { const errors: FormikErrors = {} @@ -224,8 +225,7 @@ const ResumeDepositFormik = withFormik({ } else if ( !dp.depositor || !dp.depositor.identifierHex || - !dp.networkInfo?.chainName || - !dp.networkInfo?.chainId || + !dp.networkInfo.chainName || !isAddress(dp.depositor.identifierHex) || !dp.refundLocktime || !dp.refundPublicKeyHash || @@ -234,9 +234,12 @@ const ResumeDepositFormik = withFormik({ !dp.btcRecoveryAddress ) { errors.depositParameters = "Invalid .JSON file." - } else if (!isSameChainId(dp.networkInfo.chainId, chainId)) { - errors.depositParameters = "Chain Id mismatch." - } else if (isL2Network(chainId) && !dp.extraData) { + } else if (!isSameChainNameOrId(dp.networkInfo.chainName, networkName)) { + errors.depositParameters = "Chain name mismatch." + } else if ( + (isL2Network(chainId) || networkName !== "Mainnet") && + !dp.extraData + ) { errors.depositParameters = "Extra data is required for L2 networks." } else { const btcAddressError = validateBTCAddress( diff --git a/src/pages/tBTC/Bridge/components/BridgeProcessEmptyState.tsx b/src/pages/tBTC/Bridge/components/BridgeProcessEmptyState.tsx index 1761a824c..b64d53b48 100644 --- a/src/pages/tBTC/Bridge/components/BridgeProcessEmptyState.tsx +++ b/src/pages/tBTC/Bridge/components/BridgeProcessEmptyState.tsx @@ -11,6 +11,7 @@ import { import { useFetchRecentDeposits } from "../../../../hooks/tbtc" import { useFetchTvl } from "../../../../hooks/useFetchTvl" import { BridgeProcess } from "../../../../types" +import { useConnectWallet } from "../../../../hooks/useConnectWallet" export const BridgeProcessEmptyState: FC<{ title: string @@ -22,17 +23,22 @@ export const BridgeProcessEmptyState: FC<{ "linear-gradient(360deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 117.78%)", "linear-gradient(360deg, #333A47 0%, rgba(255, 255, 255, 0) 117.78%)" ) + const connectWallet = useConnectWallet() useEffect(() => { fetchTvl() }, [fetchTvl]) + const onConnectWalletClick = () => { + connectWallet() + } + return ( <>
{title}
- - Connect Ethereum Wallet + + Connect your Wallet diff --git a/src/store/staking-applications/effects.ts b/src/store/staking-applications/effects.ts index f6b4874f9..2fcc549c2 100644 --- a/src/store/staking-applications/effects.ts +++ b/src/store/staking-applications/effects.ts @@ -24,7 +24,7 @@ import { import { isAddressZero } from "../../web3/utils" import { BigNumber } from "ethers" import { MAX_UINT64 } from "../../threshold-ts/utils" -import { isSameChainId } from "../../networks/utils" +import { isSameChainNameOrId } from "../../networks/utils" export const getSupportedAppsEffect = async ( action: ReturnType, @@ -34,7 +34,7 @@ export const getSupportedAppsEffect = async ( if ( !account.chainId || - !isSameChainId( + !isSameChainNameOrId( account.chainId, listenerApi.extra.threshold.config.ethereum.chainId ) || @@ -146,7 +146,7 @@ export const getSupportedAppsStakingProvidersData = async ( if ( !account.chainId || - !isSameChainId(account.chainId, threshold.config.ethereum.chainId) || + !isSameChainNameOrId(account.chainId, threshold.config.ethereum.chainId) || !threshold.multiAppStaking.ecdsa || !threshold.multiAppStaking.randomBeacon || !threshold.multiAppStaking.taco diff --git a/src/store/staking/effects.ts b/src/store/staking/effects.ts index 03827e56d..17670acf2 100644 --- a/src/store/staking/effects.ts +++ b/src/store/staking/effects.ts @@ -1,4 +1,4 @@ -import { isSameChainId } from "../../networks/utils" +import { isSameChainNameOrId } from "../../networks/utils" import { StakeData } from "../../types" import { isEthereumAddress, isAddressZero } from "../../web3/utils" import { AppListenerEffectAPI } from "../listener" @@ -19,7 +19,7 @@ export const fetchStakeByStakingProviderEffect = async ( !isEthereumAddress(stakingProvider) || isAddressZero(stakingProvider) || !account.chainId || - !isSameChainId(account.chainId, config.ethereum.chainId) + !isSameChainNameOrId(account.chainId, config.ethereum.chainId) ) return diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index bd4a9cd57..1919766e4 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -12,7 +12,7 @@ import { tbtcSlice } from "./tbtcSlice" import { getEthereumNetworkNameFromChainId, isL1Network, - isSameChainId, + isSameChainNameOrId, } from "../../networks/utils" import { isAddress } from "@ethersproject/address" import { SupportedChainIds } from "../../networks/enums/networks" @@ -28,7 +28,7 @@ export const fetchBridgeactivityEffect = async ( !isEthereumAddress(depositor) || isAddressZero(depositor) || !account.chainId || - !isSameChainId( + !isSameChainNameOrId( account.chainId, listenerApi.extra.threshold.config.ethereum.chainId ) diff --git a/src/threshold-ts/tbtc/index.ts b/src/threshold-ts/tbtc/index.ts index fcc75cc4d..bd87d66b3 100644 --- a/src/threshold-ts/tbtc/index.ts +++ b/src/threshold-ts/tbtc/index.ts @@ -1,4 +1,4 @@ -import { BlockTag } from "@ethersproject/abstract-provider" +import { BlockTag, TransactionReceipt } from "@ethersproject/abstract-provider" import { Web3Provider } from "@ethersproject/providers" import { BitcoinClient, @@ -51,6 +51,8 @@ import { ZERO, ArtifactNameType, RELAYER_BOT_WALLET, + isReceipt, + isHexLike, } from "../utils" import { isL1Network, @@ -283,7 +285,7 @@ export interface ITBTC { */ initiateCrossChainDepositFromScriptParameters( depositScriptParameters: DepositScriptParameters, - ethereumChainId: number + ethereumChainId?: number ): Promise /** @@ -331,7 +333,7 @@ export interface ITBTC { * @param utxo Bitcoin UTXO of the revealed deposit * @return Prefixed transaction hash of the reveal. */ - revealDeposit(utxo: BitcoinUtxo): Promise + revealDeposit(utxo: BitcoinUtxo): Promise /** * Gets a revealed deposit from the bridge. @@ -820,7 +822,7 @@ export class TBTC implements ITBTC { initiateCrossChainDepositFromScriptParameters = async ( depositScriptParameters: DepositScriptParameters, - ethereumChainId: number + ethereumChainId?: number ): Promise => { if (!this._crossChainConfig.isCrossChain) { console.log("this._crossChainConfig", this._crossChainConfig) @@ -986,13 +988,28 @@ export class TBTC implements ITBTC { } } - revealDeposit = async (utxo: BitcoinUtxo): Promise => { + revealDeposit = async ( + utxo: BitcoinUtxo + ): Promise => { const { value, ...transactionOutpoint } = utxo if (!this._deposit) throw new EmptyDepositObjectError() - const chainHash = await this._deposit.initiateMinting(transactionOutpoint) + + const result = await this._deposit.initiateMinting(transactionOutpoint) this.removeDepositData() - return chainHash.toPrefixedString() + if (isReceipt(result)) { + return result + } + + if (isHexLike(result)) { + return result.toPrefixedString() + } + + if (typeof result === "string") { + return result + } + + throw new Error("Unexpected result type from initiateMinting") } getRevealedDeposit = async (utxo: BitcoinUtxo): Promise => { diff --git a/src/threshold-ts/utils/index.ts b/src/threshold-ts/utils/index.ts index a6b56d364..440da8e9b 100644 --- a/src/threshold-ts/utils/index.ts +++ b/src/threshold-ts/utils/index.ts @@ -4,3 +4,4 @@ export * from "./constants" export * from "./math" export * from "./contract" export * from "./chain" +export * from "./transaction" diff --git a/src/threshold-ts/utils/transaction.ts b/src/threshold-ts/utils/transaction.ts new file mode 100644 index 000000000..fe4c04a10 --- /dev/null +++ b/src/threshold-ts/utils/transaction.ts @@ -0,0 +1,14 @@ +import { TransactionReceipt } from "@ethersproject/abstract-provider" +import { Hex } from "@keep-network/tbtc-v2.ts" + +export const isReceipt = (arg: unknown): arg is TransactionReceipt => + !!arg && + typeof arg === "object" && + // the two properties below exist on both v5 and v6 receipts :contentReference[oaicite:0]{index=0} + "blockHash" in arg && + ("transactionHash" in arg || "hash" in arg) + +export const isHexLike = (arg: unknown): arg is Hex => + !!arg && + typeof arg === "object" && + typeof (arg as any).toPrefixedString === "function" diff --git a/src/web3/hooks/useSendTransaction.ts b/src/web3/hooks/useSendTransaction.ts index 3928e4ec3..f1f54f071 100644 --- a/src/web3/hooks/useSendTransaction.ts +++ b/src/web3/hooks/useSendTransaction.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef, useState } from "react" +import { useCallback, useState } from "react" import { useWeb3React } from "@web3-react/core" import { Contract, ContractTransaction } from "@ethersproject/contracts" import { ModalType, TransactionStatus } from "../../enums" @@ -11,6 +11,7 @@ import { useIsActive } from "../../hooks/useIsActive" import { useSelector } from "react-redux" import { RootState } from "../../store" import { useNonEVMConnection } from "../../hooks/useNonEVMConnection" +import { isReceipt } from "../../threshold-ts/utils" type TransactionHashWithAdditionalParams = { hash: string @@ -19,7 +20,7 @@ type TransactionHashWithAdditionalParams = { export type ContractTransactionFunction = | Promise - | Promise + | Promise | Promise export type OnSuccessCallback = ( @@ -82,8 +83,13 @@ export const useSendTransactionFromFn = < pendingText, }) - const tx = await fn(...args) - const txHash = typeof tx === "string" ? tx : tx.hash + const fnResult = await fn(...args) + + if (isReceipt(fnResult)) { + if (onSuccess) await onSuccess(fnResult) + return fnResult // return transaction receipt + } + const txHash = typeof fnResult === "string" ? fnResult : fnResult.hash openModal(ModalType.TransactionIsPending, { transactionHash: txHash }) setTransactionStatus(TransactionStatus.PendingOnChain) @@ -94,15 +100,17 @@ export const useSendTransactionFromFn = < if (!transaction) throw new Error(`Transaction ${txHash} not found!`) txReceipt = await transaction.wait() } else { - txReceipt = await (isContractTransaction(tx) - ? (tx as ContractTransaction).wait() + txReceipt = await (isContractTransaction(fnResult) + ? (fnResult as ContractTransaction).wait() : library.waitForTransaction(txHash)) } setTransactionStatus(TransactionStatus.Succeeded) if (onSuccess) { - const additionalParams = isTransactionHashWithAdditionalParams(tx) - ? (tx as TransactionHashWithAdditionalParams).additionalParams + const additionalParams = isTransactionHashWithAdditionalParams( + fnResult + ) + ? (fnResult as TransactionHashWithAdditionalParams).additionalParams : null await onSuccess(txReceipt, additionalParams) }