@suilend/sui-fe-next 3.0.8 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -5
- package/contexts/SettingsContext.d.ts +8 -1
- package/contexts/SettingsContext.jsx +55 -51
- package/contexts/WalletContext.d.ts +1 -1
- package/contexts/WalletContext.jsx +334 -461
- package/fetchers/useFetchBalances.js +32 -92
- package/hooks/keypair.d.ts +1 -1
- package/hooks/keypair.js +7 -7
- package/hooks/useCoinMetadataMap.js +12 -69
- package/hooks/useIsAndroid.jsx +1 -1
- package/hooks/useIsTouchscreen.jsx +3 -5
- package/hooks/useIsiOS.jsx +4 -6
- package/hooks/useLedgerHashDialog.js +16 -61
- package/hooks/useRefreshOnBalancesChange.js +28 -81
- package/lib/connector.js +32 -77
- package/lib/router.d.ts +1 -1
- package/lib/router.js +2 -2
- package/lib/toasts.jsx +32 -40
- package/lib/track.js +3 -3
- package/package.json +85 -1
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,63 +1,6 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
23
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
-
function step(op) {
|
|
26
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
-
switch (op[0]) {
|
|
31
|
-
case 0: case 1: t = op; break;
|
|
32
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
-
default:
|
|
36
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
-
if (t[2]) _.ops.pop();
|
|
41
|
-
_.trys.pop(); continue;
|
|
42
|
-
}
|
|
43
|
-
op = body.call(thisArg, _);
|
|
44
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
49
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
50
|
-
if (ar || !(i in from)) {
|
|
51
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
52
|
-
ar[i] = from[i];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
|
-
};
|
|
57
|
-
var _a, _b;
|
|
58
1
|
import { useRouter } from "next/router";
|
|
59
2
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
60
|
-
import { createDAppKit
|
|
3
|
+
import { createDAppKit } from "@mysten/dapp-kit-core";
|
|
61
4
|
import { DAppKitProvider, useCurrentAccount, useCurrentWallet, useDAppKit, useWalletConnection, useWallets, } from "@mysten/dapp-kit-react";
|
|
62
5
|
import { SuiGrpcClient } from "@mysten/sui/grpc";
|
|
63
6
|
import { Transaction } from "@mysten/sui/transactions";
|
|
@@ -86,7 +29,7 @@ var WalletName;
|
|
|
86
29
|
WalletName["BACKPACK"] = "Backpack";
|
|
87
30
|
WalletName["MSAFE_WALLET"] = "MSafe Wallet";
|
|
88
31
|
})(WalletName || (WalletName = {}));
|
|
89
|
-
export
|
|
32
|
+
export const DEFAULT_EXTENSION_WALLET_NAMES = [
|
|
90
33
|
WalletName.SLUSH,
|
|
91
34
|
WalletName.PHANTOM,
|
|
92
35
|
WalletName.NIGHTLY,
|
|
@@ -97,66 +40,66 @@ export var DEFAULT_EXTENSION_WALLET_NAMES = [
|
|
|
97
40
|
WalletName.BACKPACK,
|
|
98
41
|
WalletName.MSAFE_WALLET,
|
|
99
42
|
];
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
43
|
+
const WEB_WALLET_NAMES = [];
|
|
44
|
+
const WALLET_LOGO_MAP = {
|
|
45
|
+
[WalletName.SLUSH]: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMjRDMCAxMC43NDUyIDEwLjc0NTIgMCAyNCAwQzM3LjI1NDggMCA0OCAxMC43NDUyIDQ4IDI0QzQ4IDM3LjI1NDggMzcuMjU0OCA0OCAyNCA0OEMxMC43NDUyIDQ4IDAgMzcuMjU0OCAwIDI0WiIgZmlsbD0iIzBDMEExRiIvPgo8cGF0aCBkPSJNMTMuMTM1OCAzMi4xMDg1QzE0LjE3MDEgMzUuOTY4MyAxOC4wMzMxIDM5LjQ2MjQgMjYuMDI1NSAzNy4zMjA4QzMzLjY1MTUgMzUuMjc3NCAzOC40MzA5IDI5LjAwNCAzNy4xOTE2IDI0LjM3ODlDMzYuNzYzNiAyMi43ODE3IDM1LjQ3NDYgMjEuNzAwNiAzMy40ODcyIDIxLjg3NjVMMTUuNzE2NSAyMy4zNTcyQzE0LjU5NzMgMjMuNDQzIDE0LjA4NDIgMjMuMjU5NiAxMy43ODgxIDIyLjU1NDNDMTMuNTAxIDIxLjg4MjMgMTMuNjY0NiAyMS4xNjA5IDE1LjAxNjMgMjAuNDc3N0wyOC41NDAxIDEzLjUzNzRDMjkuNTc2NyAxMy4wMSAzMC4yNjcxIDEyLjc4OTMgMzAuODk4IDEzLjAxMjZDMzEuMjkzNCAxMy4xNTYzIDMxLjU1MzggMTMuNzI4NCAzMS4zMTQ3IDE0LjQzNDRMMzAuNDM3OCAxNy4wMjMyQzI5LjM2MTcgMjAuMjAwMiAzMS42NjUzIDIwLjkzODIgMzIuOTY0MSAyMC41OTAyQzM0LjkyODkgMjAuMDYzNyAzNS4zOTExIDE4LjE5MjMgMzQuNzU4MSAxNS44Mjk5QzMzLjE1MzMgOS44NDA1NCAyNi43OTkgOC45MDQxMSAyMS4wMzc4IDEwLjQ0NzhDMTUuMTc2NyAxMi4wMTgzIDEwLjA5NiAxNi43Njc2IDExLjY0NzQgMjIuNTU3M0MxMi4wMTI5IDIzLjkyMTYgMTMuMjY4NyAyNS4wMTE2IDE0LjcyMzIgMjQuOTc4NUwxNi45NDM4IDI0Ljk3MzFDMTcuNDAwNCAyNC45NjI1IDE3LjIzNiAyNSAxOC4xMTcgMjQuOTI3MUMxOC45OTggMjQuODU0MSAyMS4zNTA5IDI0LjU2NDYgMjEuMzUwOSAyNC41NjQ2TDMyLjg5NjIgMjMuMjU4TDMzLjE5MzcgMjMuMjE0OEMzMy44Njg5IDIzLjA5OTcgMzQuMzc5MiAyMy4yNzUgMzQuODEwNiAyNC4wMTgzQzM1LjQ1NjMgMjUuMTMwNCAzNC40NzEyIDI1Ljk2OTEgMzMuMjkyIDI2Ljk3MzFDMzMuMjYwNSAyNyAzMy4yMjg4IDI3LjAyNyAzMy4xOTcgMjcuMDU0MUwyMy4wNDgyIDM1LjgwMDVDMjEuMzA4NyAzNy4zMDA4IDIwLjA4NjcgMzYuNzM2NyAxOS42NTg4IDM1LjEzOTVMMTguMTQzMSAyOS40ODI5QzE3Ljc2ODcgMjguMDg1NCAxNi40MDQxIDI2Ljk4ODkgMTQuODA1NiAyNy40MTcyQzEyLjgwNzUgMjcuOTUyNiAxMi42NDU1IDMwLjI3ODQgMTMuMTM1OCAzMi4xMDg1WiIgZmlsbD0iI0ZCRkFGRiIvPgo8L3N2Zz4K",
|
|
46
|
+
[WalletName.PHANTOM]: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA4IiBoZWlnaHQ9IjEwOCIgdmlld0JveD0iMCAwIDEwOCAxMDgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMDgiIGhlaWdodD0iMTA4IiByeD0iMjYiIGZpbGw9IiNBQjlGRjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00Ni41MjY3IDY5LjkyMjlDNDIuMDA1NCA3Ni44NTA5IDM0LjQyOTIgODUuNjE4MiAyNC4zNDggODUuNjE4MkMxOS41ODI0IDg1LjYxODIgMTUgODMuNjU2MyAxNSA3NS4xMzQyQzE1IDUzLjQzMDUgNDQuNjMyNiAxOS44MzI3IDcyLjEyNjggMTkuODMyN0M4Ny43NjggMTkuODMyNyA5NCAzMC42ODQ2IDk0IDQzLjAwNzlDOTQgNTguODI1OCA4My43MzU1IDc2LjkxMjIgNzMuNTMyMSA3Ni45MTIyQzcwLjI5MzkgNzYuOTEyMiA2OC43MDUzIDc1LjEzNDIgNjguNzA1MyA3Mi4zMTRDNjguNzA1MyA3MS41NzgzIDY4LjgyNzUgNzAuNzgxMiA2OS4wNzE5IDY5LjkyMjlDNjUuNTg5MyA3NS44Njk5IDU4Ljg2ODUgODEuMzg3OCA1Mi41NzU0IDgxLjM4NzhDNDcuOTkzIDgxLjM4NzggNDUuNjcxMyA3OC41MDYzIDQ1LjY3MTMgNzQuNDU5OEM0NS42NzEzIDcyLjk4ODQgNDUuOTc2OCA3MS40NTU2IDQ2LjUyNjcgNjkuOTIyOVpNODMuNjc2MSA0Mi41Nzk0QzgzLjY3NjEgNDYuMTcwNCA4MS41NTc1IDQ3Ljk2NTggNzkuMTg3NSA0Ny45NjU4Qzc2Ljc4MTYgNDcuOTY1OCA3NC42OTg5IDQ2LjE3MDQgNzQuNjk4OSA0Mi41Nzk0Qzc0LjY5ODkgMzguOTg4NSA3Ni43ODE2IDM3LjE5MzEgNzkuMTg3NSAzNy4xOTMxQzgxLjU1NzUgMzcuMTkzMSA4My42NzYxIDM4Ljk4ODUgODMuNjc2MSA0Mi41Nzk0Wk03MC4yMTAzIDQyLjU3OTVDNzAuMjEwMyA0Ni4xNzA0IDY4LjA5MTYgNDcuOTY1OCA2NS43MjE2IDQ3Ljk2NThDNjMuMzE1NyA0Ny45NjU4IDYxLjIzMyA0Ni4xNzA0IDYxLjIzMyA0Mi41Nzk1QzYxLjIzMyAzOC45ODg1IDYzLjMxNTcgMzcuMTkzMSA2NS43MjE2IDM3LjE5MzFDNjguMDkxNiAzNy4xOTMxIDcwLjIxMDMgMzguOTg4NSA3MC4yMTAzIDQyLjU3OTVaIiBmaWxsPSIjRkZGREY4Ii8+Cjwvc3ZnPgo=",
|
|
47
|
+
[WalletName.NIGHTLY]: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iV2Fyc3R3YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDg1MS41IDg1MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4NTEuNSA4NTEuNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzYwNjdGOTt9DQoJLnN0MXtmaWxsOiNGN0Y3Rjc7fQ0KPC9zdHlsZT4NCjxnPg0KCTxnIGlkPSJXYXJzdHdhXzJfMDAwMDAwMTQ2MDk2NTQyNTMxODA5NDY0NjAwMDAwMDg2NDc4NTIwMDIxMTY5MTg2ODhfIj4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyNCwwaDYwMy42YzY4LjUsMCwxMjQsNTUuNSwxMjQsMTI0djYwMy42YzAsNjguNS01NS41LDEyNC0xMjQsMTI0SDEyNGMtNjguNSwwLTEyNC01NS41LTEyNC0xMjRWMTI0DQoJCQlDMCw1NS41LDU1LjUsMCwxMjQsMHoiLz4NCgk8L2c+DQoJPGcgaWQ9IldhcnN0d2FfMyI+DQoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MjMuNSwxNzAuM2MtMzcuNCw1Mi4yLTg0LjIsODguNC0xMzkuNSwxMTIuNmMtMTkuMi01LjMtMzguOS04LTU4LjMtNy44Yy0xOS40LTAuMi0zOS4xLDIuNi01OC4zLDcuOA0KCQkJYy01NS4zLTI0LjMtMTAyLjEtNjAuMy0xMzkuNS0xMTIuNmMtMTEuMywyOC40LTU0LjgsMTI2LjQtMi42LDI2My40YzAsMC0xNi43LDcxLjUsMTQsMTMyLjljMCwwLDQ0LjQtMjAuMSw3OS43LDguMg0KCQkJYzM2LjksMjkuOSwyNS4xLDU4LjcsNTEuMSw4My41YzIyLjQsMjIuOSw1NS43LDIyLjksNTUuNywyMi45czMzLjMsMCw1NS43LTIyLjhjMjYtMjQuNywxNC4zLTUzLjUsNTEuMS04My41DQoJCQljMzUuMi0yOC4zLDc5LjctOC4yLDc5LjctOC4yYzMwLjYtNjEuNCwxNC0xMzIuOSwxNC0xMzIuOUM2NzguMywyOTYuNyw2MzQuOSwxOTguNyw2MjMuNSwxNzAuM3ogTTI1My4xLDQxNC44DQoJCQljLTI4LjQtNTguMy0zNi4yLTEzOC4zLTE4LjMtMjAxLjVjMjMuNyw2MCw1NS45LDg2LjksOTQuMiwxMTUuM0MzMTIuOCwzNjIuMywyODIuMywzOTQuMSwyNTMuMSw0MTQuOHogTTMzNC44LDUxNy41DQoJCQljLTIyLjQtOS45LTI3LjEtMjkuNC0yNy4xLTI5LjRjMzAuNS0xOS4yLDc1LjQtNC41LDc2LjgsNDAuOUMzNjAuOSw1MTQuNywzNTMsNTI1LjQsMzM0LjgsNTE3LjV6IE00MjUuNyw2NzguNw0KCQkJYy0xNiwwLTI5LTExLjUtMjktMjUuNnMxMy0yNS42LDI5LTI1LjZzMjksMTEuNSwyOSwyNS42QzQ1NC43LDY2Ny4zLDQ0MS43LDY3OC43LDQyNS43LDY3OC43eiBNNTE2LjcsNTE3LjUNCgkJCWMtMTguMiw4LTI2LTIuOC00OS43LDExLjVjMS41LTQ1LjQsNDYuMi02MC4xLDc2LjgtNDAuOUM1NDMuOCw0ODgsNTM5LDUwNy42LDUxNi43LDUxNy41eiBNNTk4LjMsNDE0LjgNCgkJCWMtMjkuMS0yMC43LTU5LjctNTIuNC03Ni04Ni4yYzM4LjMtMjguNCw3MC42LTU1LjQsOTQuMi0xMTUuM0M2MzQuNiwyNzYuNSw2MjYuOCwzNTYuNiw1OTguMyw0MTQuOHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==",
|
|
48
|
+
[WalletName.SUIET]: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiByeD0iMjQiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF8zMDVfMTI1MTYpIi8+PHBhdGggZD0iTTUxLjUgNDMuNmMtMy45IDAtNy42LTMuOS05LjUtNi40LTEuOSAyLjUtNS42IDYuNC05LjUgNi40LTQgMC03LjctMy45LTkuNS02LjQtMS44IDIuNS01LjUgNi40LTkuNSA2LjQtLjggMC0xLjUtLjYtMS41LTEuNSAwLS44LjctMS41IDEuNS0xLjUgMy4yIDAgNy4xLTUuMSA4LjItNi45LjMtLjQuOC0uNyAxLjMtLjdzMSAuMiAxLjMuN2MxLjEgMS44IDUgNi45IDguMiA2LjkgMy4xIDAgNy4xLTUuMSA4LjItNi45LjMtLjQuOC0uNyAxLjMtLjdzMSAuMiAxLjIuN2MxLjEgMS44IDUgNi45IDguMiA2LjkuOSAwIDEuNi43IDEuNiAxLjUgMCAuOS0uNiAxLjUtMS41IDEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNTEuNSA1Mi4zYy0zLjkgMC03LjYtMy45LTkuNS02LjQtMS45IDIuNS01LjYgNi40LTkuNSA2LjQtNCAwLTcuNy0zLjktOS41LTYuNC0xLjggMi41LTUuNSA2LjQtOS41IDYuNC0uOCAwLTEuNS0uNi0xLjUtMS41IDAtLjguNy0xLjUgMS41LTEuNSAzLjIgMCA3LjEtNS4xIDguMi02LjkuMy0uNC44LS43IDEuMy0uN3MxIC4zIDEuMy43YzEuMSAxLjggNSA2LjkgOC4yIDYuOSAzLjEgMCA3LjEtNS4xIDguMi02LjkuMy0uNC44LS43IDEuMy0uN3MxIC4zIDEuMi43YzEuMSAxLjggNSA2LjkgOC4yIDYuOS45IDAgMS42LjcgMS42IDEuNSAwIC45LS42IDEuNS0xLjUgMS41ek0xNC42IDM2LjdjLS44IDAtMS40LS41LTEuNi0xLjNsLS4zLTMuNmMwLTEwLjkgOC45LTE5LjggMTkuOC0xOS44IDExIDAgMTkuOCA4LjkgMTkuOCAxOS44bC0uMyAzLjZjLS4xLjgtLjkgMS40LTEuNyAxLjItLjktLjEtMS41LS45LTEuMy0xLjhsLjMtM2MwLTkuMi03LjUtMTYuOC0xNi44LTE2LjgtOS4yIDAtMTYuNyA3LjUtMTYuNyAxNi44bC4yIDMuMWMuMi44LS4zIDEuNi0xLjEgMS44aC0uM3oiIGZpbGw9IiNmZmYiLz48ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50MF9yYWRpYWxfMzA1XzEyNTE2IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUyLjc1ODAzIDUxLjM1OCAtNTEuNDM5NDcgNTIuODQxNzIgMCA3LjQwNykiPjxzdG9wIHN0b3AtY29sb3I9IiMwMDU4REQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM2N0M4RkYiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=",
|
|
49
|
+
[WalletName.BYBIT_WALLET]: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHZpZXdCb3g9IjAgMCA4OCA4OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMTguN0MwIDguMzcyMjcgOC4zNzIyOCAwIDE4LjcgMEg2OS4zQzc5LjYyNzcgMCA4OCA4LjM3MjI4IDg4IDE4LjdWNjkuM0M4OCA3OS42Mjc3IDc5LjYyNzcgODggNjkuMyA4OEgxOC43QzguMzcyMjcgODggMCA3OS42Mjc3IDAgNjkuM1YxOC43WiIgZmlsbD0iIzQwNDM0NyIvPgo8cGF0aCBkPSJNNy41NzYxNyAyNi44MDY3QzYuNzg1MTYgMjQuMDc4NyA4LjQ3NzUgMjEuMjUzMSAxMS4yNTU5IDIwLjY2M0w1Ny42MDg3IDEwLjgxNzNDNTkuODA5IDEwLjM1IDYyLjA0NDMgMTEuNDQ0MyA2My4wMjQ3IDEzLjQ2ODlMODMuODQ0MyA1Ni40NjU3TDI1LjE3NzYgODcuNTEwMUw3LjU3NjE3IDI2LjgwNjdaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMzEyXzE3NTM0KSIvPgo8cGF0aCBkPSJNOC4xODI0MiAzMC4xNjE4QzcuMzUwNDkgMjcuMjgzOCA5LjI3OTI1IDI0LjM0MTMgMTIuMjUwMiAyMy45NTU5TDczLjY4NjUgMTUuOTg4MUM3Ni4yMzkxIDE1LjY1NzEgNzguNjExMSAxNy4zNjE4IDc5LjExMTEgMTkuODg2N0w4OC4wMDAzIDY0Ljc3NzFMMjQuNjg5MiA4Ny4yNjY1TDguMTgyNDIgMzAuMTYxOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0wIDM0LjIyMjJDMCAyOC44MjIxIDQuMzc3NjYgMjQuNDQ0NSA5Ljc3Nzc4IDI0LjQ0NDVINjguNDQ0NEM3OS4yNDQ3IDI0LjQ0NDUgODggMzMuMTk5OCA4OCA0NFY2OC40NDQ1Qzg4IDc5LjI0NDcgNzkuMjQ0NyA4OCA2OC40NDQ0IDg4SDE5LjU1NTZDOC43NTUzMiA4OCAwIDc5LjI0NDcgMCA2OC40NDQ1VjM0LjIyMjJaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNTguMjIwMSA2MS4xOTU5VjQyLjg3NTVINjEuNzkzN1Y2MS4xOTU5SDU4LjIyMDFaIiBmaWxsPSIjRjdBNjAwIi8+CjxwYXRoIGQ9Ik0xNy40Mzk1IDY2LjY2MzdIOS43Nzc5NVY0OC4zNDM0SDE3LjEzMTNDMjAuNzA0OSA0OC4zNDM0IDIyLjc4NzQgNTAuMzUwNSAyMi43ODc0IDUzLjQ4OTNDMjIuNzg3NCA1NS41MjE1IDIxLjQ1MDQgNTYuODM0NSAyMC41MjU3IDU3LjI3MjFDMjEuNjMxNSA1Ny43ODY5IDIzLjA0NTYgNTguOTQzOCAyMy4wNDU2IDYxLjM4ODVDMjMuMDQ1NiA2NC44MTA4IDIwLjcwNDkgNjYuNjYzNyAxNy40Mzk1IDY2LjY2MzdaTTE2Ljg0ODEgNTEuNTM0M0gxMy4zNTE2VjU1Ljc1NDhIMTYuODQ4MUMxOC4zNjQyIDU1Ljc1NDggMTkuMjEzOCA1NC45MDY0IDE5LjIxMzggNTMuNjQ1NUMxOS4yMTM4IDUyLjM4MjYgMTguMzY2MiA1MS41MzQzIDE2Ljg0ODEgNTEuNTM0M1pNMTcuMDc5MyA1OC45NzA4SDEzLjM1MTZWNjMuNDcyOEgxNy4wNzkzQzE4LjY5OTQgNjMuNDcyOCAxOS40NyA2Mi40NDMyIDE5LjQ3IDYxLjIwOTJDMTkuNDcyIDU5Ljk3MzMgMTguNjk5NCA1OC45NzA4IDE3LjA3OTMgNTguOTcwOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0zMi44OTI1IDU5LjE1MDFWNjYuNjYzN0gyOS4zNDM5VjU5LjE1MDFMMjMuODQxOSA0OC4zNDM0SDI3LjcyMzhMMzEuMTQzMiA1NS43Mjc4TDM0LjUxMDcgNDguMzQzNEgzOC4zOTI2TDMyLjg5MjUgNTkuMTUwMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00OC41NjMzIDY2LjY2MzdINDAuOTAxN1Y0OC4zNDM0SDQ4LjI1NTFDNTEuODI4NyA0OC4zNDM0IDUzLjkxMTIgNTAuMzUwNSA1My45MTEyIDUzLjQ4OTNDNTMuOTExMiA1NS41MjE1IDUyLjU3NDIgNTYuODM0NSA1MS42NDk1IDU3LjI3MjFDNTIuNzU1MyA1Ny43ODY5IDU0LjE2OTMgNTguOTQzOCA1NC4xNjkzIDYxLjM4ODVDNTQuMTY3NCA2NC44MTA4IDUxLjgyNjggNjYuNjYzNyA0OC41NjMzIDY2LjY2MzdaTTQ3Ljk3MTkgNTEuNTM0M0g0NC40NzUzVjU1Ljc1NDhINDcuOTcxOUM0OS40ODggNTUuNzU0OCA1MC4zMzc2IDU0LjkwNjQgNTAuMzM3NiA1My42NDU1QzUwLjMzNTcgNTIuMzgyNiA0OS40ODggNTEuNTM0MyA0Ny45NzE5IDUxLjUzNDNaTTQ4LjIwMzEgNTguOTcwOEg0NC40NzUzVjYzLjQ3MjhINDguMjAzMUM0OS44MjMyIDYzLjQ3MjggNTAuNTkzOCA2Mi40NDMyIDUwLjU5MzggNjEuMjA5MkM1MC41OTM4IDU5Ljk3MzQgNDkuODIxMyA1OC45NzA4IDQ4LjIwMzEgNTguOTcwOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik03My40MzkgNTEuNTM0M1Y2Ni42NjM3SDY5Ljg2NTRWNTEuNTM0M0g2NS4wODM5VjQ4LjM0MzRINzguMjIyNFY1MS41MzQzSDczLjQzOVoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMzEyXzE3NTM0IiB4MT0iNy4zMzMwOCIgeTE9IjI1LjU5NCIgeDI9Ijg0LjYzODEiIHkyPSIyMS43MjE2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkQ3NDgiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRjdBNjAwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==",
|
|
50
|
+
[WalletName.GATE_WALLET]: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAAAX5aIjVOYjVeYjVOYjU+UjVOYgUN8jVeYkVOcgWOcoWOcjVOYjVeYjVOcjVOYkVOYjU+YY5KIjVOYX5aFnl2IZAAAAE3RSTlMAn+/fn5CAEGBAICDPr3C/v1Bg8gPz/wAAAYNJREFUWMOtl9lywzAIRYkQ2mzZSen/f2uX6UzGt7IJVc87R4sRYDpjKdJXVqU/UYX1B/KTU9Ank+F+wRZUJwRtV8S7/JRAVKcEUecEq84Jos4Jks4JNp0TtDApYB0R7pLKDXkbxJdRdK+ZPnlHboMDDDYgX9GvCkQRrkQXAvMGYyaPoCiQiFwCxvXJJ6h4/uwURBAs5BQwHsApaLgBr+CBG3AK8B1Xt6AfXwA5BVjJ7l4BfgTxCyCLZwXlvwV29cEjuOs3XqK3ATJ8xp1Mjg18xUTKZHGsX53ESGWjfCS81O7soQ9qapzBfP0MDcG1AR50herZQDSKKpJ5tFpA6+tTCI9ni2RkMT6dPGptA3JUICwnYuVlkEGsiBA9twBEUGTRi2U2HRDrM7r2oL8p+MKQsEsqJckedATDiOAlLDDmedmwzjhJRpJZRGPYtliNRLeIRqpbiPHLYxDg/mFmNbkvdEVh7/JIk3ARnjLZtMLucKRGVoClkov2SH391vDapZze3Ac97ZDnSKHPHwAAAABJRU5ErkJggg==",
|
|
51
|
+
[WalletName.OKX_WALLET]: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJDSURBVHgB7Zq9jtpAEMfHlhEgQLiioXEkoAGECwoKxMcTRHmC5E3IoyRPkPAEkI7unJYmTgEFTYwA8a3NTKScLnCHN6c9r1e3P2llWQy7M/s1Gv1twCP0ej37dDq9x+Zut1t3t9vZjDEHIiSRSPg4ZpDL5fxkMvn1cDh8m0wmfugfO53OoFQq/crn8wxfY9EymQyrVCqMfHvScZx1p9ls3pFxXBy/bKlUipGPrVbLuQqAfsCliq3zl0H84zwtjQrOw4Mt1W63P5LvBm2d+Xz+YzqdgkqUy+WgWCy+Mc/nc282m4FqLBYL+3g8fjDxenq72WxANZbLJeA13zDX67UDioL5ybXwafMYu64Ltn3bdDweQ5R97fd7GyhBQMipx4POeEDHIu2LfDdBIGGz+hJ9CQ1ABjoA2egAZPM6AgiCAEQhsi/C4jHyPA/6/f5NG3Ks2+3CYDC4aTccDrn6ojG54MnEvG00GoVmWLIRNZ7wTCwDHYBsdACy0QHIhiuRETxlICWpMMhGZHmqS8qH6JLyGegAZKMDkI0uKf8X4SWlaZo+Pp1bRrwlJU8ZKLIvUjKh0WiQ3sRUbNVq9c5Ebew7KEo2m/1p4jJ4qAmDaqDQBzj5XyiAT4VCQezJigAU+IDU+z8vJFnGWeC+bKQV/5VZ71FV6L7PA3gg3tXrdQ+DgLhC+75Wq3no69P3MC0NFQpx2lL04Ql9gHK1bRDjsSBIvScBnDTk1WrlGIZBorIDEYJj+rhdgnQ67VmWRe0zlplXl81vcyEt0rSoYDUAAAAASUVORK5CYII=",
|
|
52
|
+
[WalletName.BACKPACK]: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJcAAACXCAYAAAAYn8l5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAgdSURBVHgB7d1dchPXFgXgtVvi1n27er1VkMgjQAwgUjMCfEeAGQHcEWBGgD0CzAgCI7DsDCBmBFZsqvKqx1TZOjvntERiHExwYJ+zu3t9L3aByyW5l87/j4Aap3U9GQATDZhUot/HfxorMBLFKH4/uvbjSxUsJX5N3weVdwPF4mKAk635fA5qCHoqhml0Z4UdrfQRFBP8NUD/nGAuQd4OBnjz3/l8gZ7qXbhiqOqh6vMYqBo5xKBpkNff/TQ/QM/0JlzvY7Wnqi+zheqa+IdeXFTyv1htnqAnehGu8+n0eXyru3BAoXurqnoRQ7ZEx3U6XLEKHMcq8FWp0uomqRQbVPKw6+2xzoYrBWugehh7e2M4lAKGWE3e7XA12clweQ/WFcthJQ+6WoJV6KCWBCsZrYIepmERdFDnwnU2nb5sSbAacaA2tQt/RAd1KlxpDEsgz9A2scPxyw91+1733+hUm+tsNju9RakVp3DEdDhAVD81dXST5WUlW10aohiiI87qekeCjq/80xIi86D4RSqkHtnyDnDyW/ya+wE2U02bucpUDcb5y3EluB//awzVyebHRlVAKr120RGdKbnOZ7PDNIGcghQf5LwtPbAUvPgJn4SAOgXuUvCkDwOsREREREREREREbdHHNfTjzbe3mZq5rcXm67LPA6JdXc+VQjO5s8IEld7XtGVsvU1sjPziNFQTtmYLWqgwj98v+rCWvjPhSiVSDNO2yVYxA2klqgpONMjbO4P2TFfdRqvDdW3vYY026+AWtFaGq5nsDeEp1mu3OrWKs1lbH4M2EHnR9tKsVeHqcqg+RQQHbQ5Za8J1Pp0+3ew97Hyorom9Td27d3z8Ai3jPlxe9x7m1sYd267X0L+fTh8Pg/7c92AlzUaO+LdY7x5vB7cll6ct+N60Zce2y3C9n81eqWIHdKM27Nh2Vy0yWF9mvdFDD1PTAU65KrkYrH9GoDt3j49fwxk34Wp2Svvc0Nrsb5TNZHQqMUQ/2sLmgseAuQiXu8a7yDzO+73+3Ba1dJhciBPicTL8MVRreBAb+fccnclaPFxndb0twcVZCXGwUvYvK+zddplMc6pOwG4sPUq3f1ydmlM0XG6OOool1VDw5Gsfiof3sxlsfeBhHVnR3mIaeS9/Io28uHc0/yZjRvGBLr47OtpKJSAK8XRqTrFwpbMdyo+8x2Adz3fxjcXf+Sz9bpTi5NScItWij+rQJlhXnU/rvfikn6KM4u2vIiVX0/gt2S4RHFgHK2lKMGmWNZcwukwT/gVlD1cqtUr2qpp5OclXZV2KPMH6Gpf8YvV49kNsfhSSPVyp1EJBQfMuvkuN/FCwgV+JPi915mrWcHkotUqsUQ9x7AyFSq/Ue9wcKpdd1nB5KLVQQBpziqVXsamZKnYqSpRe2cKV3lwstR6hoLSFC4VUFd6gnFGJ0itbuAbANgquf09VYslu+WbOr9io+aBAcyRbuETLzrvFaukdCpM/t/lnl9pe53VdI6Ms4WrOZyg8Gh//uMVXbK5KBzzdM5lRlnDFKrFGaYriE7lA4degmORs2GcJV+kqsXkNpR/sWunXMKpW+Vb6moer+aQ42Bqm4uI+oDEKq6p8PfYcJdcEPhTfqS0edotnrBrNwxXHV2o4EKdB7qOwOJj5PcprbuxABvbhEp3BAy1bgqYeczqEDg6ETB94+2pR/VSLucd5rnLRY97I9YE3DdembndzKk3JXquHHvMftBvVopdSq6GK7RITuB4Gka8Z/frnwcNmTMNVrXyFKxoNQsh+SsxQ9SWcucjwwbctucTfQW1pV3fOttdmI8o2nNGV/ZibdbU4hkMS9FWO6nFdHWr2kvKLSMvDFXslHsZ1/mKzt+/QMmBuNvzeYCD6HxhzfbKgqdhjSgGzaNh6D1aikDGMmYYrxxv4KjFgq/BtAxaDVXsPVkPVvFnQ35JrI1WRl0FPv/as0VTFpmOghqEFwUKeec4haEN2309nOwo9GFbV6y9dEh1DNRmG8AhB0xZ+d73jkky385/N6lOPB6V9EcH8ykVQH63DGjRHRmLSTKP4md66lbTk+u5xOjTFDkuum8QR9QpaVwGfPOtB1j9Dn9H7NhfZYbjIDMNFZhguMsNwkRmGi8wwXGSG4SIzDBeZYbjIDMNFZhguMsNwkRmGi8wwXGSG4SIzDBeZYbjIDMNFZhguMsNwkRmGi8wwXGSG4SIzDBeZYbh6SkUWMGZ7hJKi2O2o9Hka7J+Nabiau52l/FV09DEVvMtx17fpKTcfnE/rXRV93IZzqzpuGR/5/r3j+S4yyBKuD9IBaf92dOlB35S8hpmIiIiIiIiIiIiIrsk2Qr+5IWwMjtCXdLI1ny+RiXm4UqgGAXsCR3c895gIDi5E/p8jZKbhaoKl+jMnrJ0RnFyKPLQOmOmSm2EITxkshxSTKuAZjJmGSyDu7namtQr6CMZsFwsKr4jzKsd9i1xDT2YYLjLDcJEZhovMMFxkhuEiMwwXmWG4yAzDRWYYLjLDcJEZhovMMFxkhuEiMwwXmWG4yAzDRWYYLjLDcJEZhovMMFxkhuEiMwwXmWG4yAzDRWYYLjLDcJEZhovMGJ9yowuQS62/bzGoHIFcCgFvYcz6vsUDkEv/GuANjJmGa6u5gk32Qc7Ifo7r8cwb9JcVdlWwALkgwCI9E2RgHq50qOtK5CEDVl4K1qCyP2j3gyxDEal6jAF7oBBeqF6M7F9U8iDnbbFZryFOTut6nE4SrgT3oToBLz2wsoTICRRHsRrcy3m5wQe/A/gfCSdYaThuAAAAAElFTkSuQmCC",
|
|
53
|
+
[WalletName.MSAFE_WALLET]: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQ3IiBoZWlnaHQ9IjE3MCIgdmlld0JveD0iMCAwIDI0NyAxNzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAyLjU5MyAyMy4wMTNDMTA3LjQ5OSAyNi4wNTU4IDExMC43OTQgMzAuODc4NSAxNDAuOTEyIDc5LjEwMzlDMTcyLjQxOSAxMjkuNTUyIDE3My44NjQgMTMyLjExNCAxNzMuODY0IDEzNy41MzZDMTczLjg2NCAxNDIuNDUxIDE3My4zNCAxNDMuNzI1IDE2OS45MTcgMTQ3LjExMkMxNjYuNDc2IDE1MC41MTggMTY1LjIyMiAxNTEuMDE5IDE2MC4xMzggMTUxLjAxOUMxNTUuNTg0IDE1MS4wMTkgMTUzLjUzNiAxNTAuMzc4IDE1MC43OTcgMTQ4LjA5N0MxNDguODY4IDE0Ni40OTEgMTM5Ljg2MiAxMzMuMTc1IDEzMC43ODUgMTE4LjUwOEMxMDMuNzE5IDc0Ljc3NDEgOTAuMDYxIDUzLjE2NzYgODkuNzI2NyA1My41NTQ5Qzg2LjY2ODUgNTcuMTAzMyA3OC42NjEgNzIuMzY1NiA3OC42NjEgNzQuNjQ0M0M3OC42NjEgNzYuNTM4IDg0LjQ0NjMgODcuMzAwNCA5My43MjA1IDEwMi42NThDMTAyLjAwMyAxMTYuMzc0IDEwOS41OTQgMTI5LjUyNCAxMTAuNTg5IDEzMS44ODFDMTE0LjQ2NCAxNDEuMDYyIDEwNy43NTQgMTUxLjAxOSA5Ny42ODc3IDE1MS4wMTlDOTQuODQwOSAxNTEuMDE5IDkxLjIxNTEgMTUwLjE3OCA4OS42MzAzIDE0OS4xNTFDODguMDQ1NSAxNDguMTIyIDgwLjk3OTUgMTM3Ljc4IDczLjkyODcgMTI2LjE2OUM2Ni44Nzc4IDExNC41NTYgNjAuNjc0NSAxMDUuMDU1IDYwLjE0MjggMTA1LjA1NUM1OS42MTEgMTA1LjA1NSA1My42OTMzIDExNC4yMzQgNDYuOTkzMSAxMjUuNDUyQzQwLjI5MjkgMTM2LjY2OSAzMy43MjYyIDE0Ni44MTUgMzIuNDAxNSAxNDcuOTk1QzMxLjA3NjcgMTQ5LjE3NiAyNy43MDYzIDE1MC4zOTYgMjQuOTEyOSAxNTAuNzA5QzE1LjgzODQgMTUxLjcyMSA5IDE0NS44NzggOSAxMzcuMTFDOSAxMzIuODQyIDkuMDQ4NzYgMTMyLjc1MiA0My41MzU2IDc0LjAyOTVDNTcuODI1NCA0OS42OTczIDcxLjIyMTIgMjguMDc5MyA3My4zMDQxIDI1Ljk4OTFDODEuMDc3MSAxOC4xODc5IDkyLjg4IDE2Ljk4OTQgMTAyLjU5MyAyMy4wMTNaTTE2Ni45MDEgMjMuMDIzM0MxNzAuMzA4IDI2LjQ4MjEgMjMzLjQ5OSAxMjcuMTE2IDIzNS40NDcgMTMyLjE4NUMyMzguMjU4IDEzOS41MDQgMjM1LjI3NyAxNDYuMzEyIDIyNy42NjUgMTQ5Ljk2QzIyMy41NDcgMTUxLjkzMyAyMjIuMDczIDE1Mi4xMSAyMTguMjQ1IDE1MS4wODlDMjE1Ljc0OSAxNTAuNDI0IDIxMi44NjYgMTQ4Ljk2IDIxMS44MzggMTQ3LjgzNUMyMTAuODA5IDE0Ni43MSAxOTQuNzk2IDEyMS41IDE3Ni4yNTMgOTEuODExOEMxNDAuMDU0IDMzLjg1NyAxNDAuMDQ0IDMzLjgzNTIgMTQ0LjI3NCAyNS43Mzk4QzE0OC4yNjMgMTguMTAxNyAxNjAuNTk0IDE2LjYyMjggMTY2LjkwMSAyMy4wMjMzWiIgZmlsbD0iIzQ4QjVBNyIvPgo8L3N2Zz4K",
|
|
54
|
+
};
|
|
55
|
+
const WALLET_DOWNLOAD_URLS_MAP = {
|
|
56
|
+
[WalletName.SLUSH]: {
|
|
114
57
|
iOS: "https://apps.apple.com/us/app/slush-a-sui-wallet/id6476572140",
|
|
115
58
|
android: "https://play.google.com/store/apps/details?id=com.mystenlabs.suiwallet",
|
|
116
59
|
extension: "https://chromewebstore.google.com/detail/slush-%E2%80%94-a-sui-wallet/opcgpfmipidbgpenhmajoajpbobppdil",
|
|
117
60
|
},
|
|
118
|
-
|
|
61
|
+
[WalletName.PHANTOM]: {
|
|
119
62
|
iOS: "https://apps.apple.com/us/app/phantom-crypto-wallet/id1598432977",
|
|
120
63
|
android: "https://play.google.com/store/apps/details?id=app.phantom",
|
|
121
64
|
extension: "https://chromewebstore.google.com/detail/phantom/bfnaelmomeimhlpmgjnjophhpkkoljpa",
|
|
122
65
|
},
|
|
123
|
-
|
|
66
|
+
[WalletName.NIGHTLY]: {
|
|
124
67
|
iOS: "https://apps.apple.com/us/app/nightly-multichain-wallet/id6444768157",
|
|
125
68
|
android: "https://play.google.com/store/apps/details?id=com.nightlymobile",
|
|
126
69
|
extension: "https://chromewebstore.google.com/detail/nightly/fiikommddbeccaoicoejoniammnalkfa",
|
|
127
70
|
},
|
|
128
|
-
|
|
71
|
+
[WalletName.SUIET]: {
|
|
129
72
|
iOS: undefined,
|
|
130
73
|
android: undefined,
|
|
131
74
|
extension: "https://chromewebstore.google.com/detail/suiet-sui-wallet/khpkpbbcccdmmclmpigdgddabeilkdpd",
|
|
132
75
|
},
|
|
133
|
-
|
|
76
|
+
[WalletName.BYBIT_WALLET]: {
|
|
134
77
|
iOS: "https://apps.apple.com/us/app/bybit-buy-trade-crypto/id1488296980",
|
|
135
78
|
android: "https://play.google.com/store/apps/details?id=com.bybit.app",
|
|
136
79
|
extension: "https://chromewebstore.google.com/detail/bybit-wallet/pdliaogehgdbhbnmkklieghmmjkpigpa",
|
|
137
80
|
},
|
|
138
|
-
|
|
81
|
+
[WalletName.GATE_WALLET]: {
|
|
139
82
|
iOS: "https://apps.apple.com/us/app/gate-io-buy-bitcoin-crypto/id1294998195",
|
|
140
83
|
android: "https://play.google.com/store/apps/details?id=com.gateio.gateio",
|
|
141
84
|
extension: "https://chromewebstore.google.com/detail/gate-wallet/cpmkedoipcpimgecpmgpldfpohjplkpp",
|
|
142
85
|
},
|
|
143
|
-
|
|
86
|
+
[WalletName.OKX_WALLET]: {
|
|
144
87
|
iOS: "https://apps.apple.com/us/app/okx-buy-bitcoin-btc-crypto/id1327268470",
|
|
145
88
|
android: "https://play.google.com/store/apps/details?id=com.okinc.okex.gp",
|
|
146
89
|
extension: "https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge",
|
|
147
90
|
},
|
|
148
|
-
|
|
91
|
+
[WalletName.BACKPACK]: {
|
|
149
92
|
iOS: "https://apps.apple.com/us/app/backpack-buy-trade-crypto/id6445964121",
|
|
150
93
|
android: "https://play.google.com/store/apps/details?id=app.backpack.mobile",
|
|
151
94
|
extension: "https://chromewebstore.google.com/detail/backpack/aflkmfhebedbjioipglgcbcmnbpgliof",
|
|
152
95
|
},
|
|
153
|
-
|
|
96
|
+
[WalletName.MSAFE_WALLET]: {
|
|
154
97
|
iOS: undefined,
|
|
155
98
|
android: undefined,
|
|
156
99
|
extension: "https://sui.m-safe.io",
|
|
157
100
|
},
|
|
158
|
-
|
|
159
|
-
export
|
|
101
|
+
};
|
|
102
|
+
export const WALLET_CONNECT_WALLET = {
|
|
160
103
|
name: "WalletConnect",
|
|
161
104
|
iconUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAALVBMVEVHcEwIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAIiPAkn9m4AAAAD3RSTlMA/1LKYuq+M906IhIJrYixCTN5AAAAqElEQVQokdWRSRbDIAxDg23m4f7HjQyBFtoLxBv0/DFIcF1vrUQilP6RTM70cpRP5qtZVf3OYkAz1NZqF3GDgk6LOC/HBkz7aGMq83Ju5QMIG0uaCq7LVFiDncpOJTZ0ldWnjI4xVh4LpvZEXgPSVZTBFyhp3CdPdDohcMmsVHe5lVVnLTrsIw/lvt6hn2wcsivdGdzzYIPy8fqeeTrgkyHR6qSfX3lH3W4KBAaKxKsVAAAAAElFTkSuQmCC",
|
|
162
105
|
type: WalletType.WEB,
|
|
@@ -167,88 +110,70 @@ export var WalletContextQueryParams;
|
|
|
167
110
|
(function (WalletContextQueryParams) {
|
|
168
111
|
WalletContextQueryParams["WALLET"] = "wallet";
|
|
169
112
|
})(WalletContextQueryParams || (WalletContextQueryParams = {}));
|
|
170
|
-
|
|
113
|
+
const WalletContext = createContext({
|
|
171
114
|
isImpersonating: false,
|
|
172
115
|
isConnectWalletDropdownOpen: false,
|
|
173
|
-
setIsConnectWalletDropdownOpen:
|
|
116
|
+
setIsConnectWalletDropdownOpen: () => {
|
|
174
117
|
throw new Error("WalletContextProvider not initialized");
|
|
175
118
|
},
|
|
176
119
|
wallets: [],
|
|
177
120
|
wallet: undefined,
|
|
178
|
-
connectWallet:
|
|
121
|
+
connectWallet: () => {
|
|
179
122
|
throw new Error("WalletContextProvider not initialized");
|
|
180
123
|
},
|
|
181
|
-
disconnectWallet:
|
|
124
|
+
disconnectWallet: () => {
|
|
182
125
|
throw new Error("WalletContextProvider not initialized");
|
|
183
126
|
},
|
|
184
127
|
accounts: [],
|
|
185
128
|
account: undefined,
|
|
186
|
-
switchAccount:
|
|
129
|
+
switchAccount: () => {
|
|
187
130
|
throw new Error("WalletContextProvider not initialized");
|
|
188
131
|
},
|
|
189
132
|
address: undefined,
|
|
190
|
-
dryRunTransaction:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return __generator(this, function (_a) {
|
|
197
|
-
throw new Error("WalletContextProvider not initialized");
|
|
198
|
-
});
|
|
199
|
-
}); },
|
|
133
|
+
dryRunTransaction: async () => {
|
|
134
|
+
throw new Error("WalletContextProvider not initialized");
|
|
135
|
+
},
|
|
136
|
+
signExecuteAndWaitForTransaction: async () => {
|
|
137
|
+
throw new Error("WalletContextProvider not initialized");
|
|
138
|
+
},
|
|
200
139
|
isUsingLedger: false,
|
|
201
|
-
setIsUsingLedger:
|
|
140
|
+
setIsUsingLedger: () => {
|
|
141
|
+
throw new Error("WalletContextProvider not initialized");
|
|
142
|
+
},
|
|
143
|
+
signPersonalMessage: async () => {
|
|
202
144
|
throw new Error("WalletContextProvider not initialized");
|
|
203
145
|
},
|
|
204
|
-
signPersonalMessage: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
-
return __generator(this, function (_a) {
|
|
206
|
-
throw new Error("WalletContextProvider not initialized");
|
|
207
|
-
});
|
|
208
|
-
}); },
|
|
209
146
|
});
|
|
210
|
-
export
|
|
211
|
-
function Inner(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
var queryParams = (_b = {},
|
|
218
|
-
_b[WalletContextQueryParams.WALLET] = router.query[WalletContextQueryParams.WALLET],
|
|
219
|
-
_b);
|
|
220
|
-
var _h = useSettingsContext(), rpc = _h.rpc, suiGrpcClient = _h.suiGrpcClient;
|
|
147
|
+
export const useWalletContext = () => useContext(WalletContext);
|
|
148
|
+
function Inner({ appName, children }) {
|
|
149
|
+
const router = useRouter();
|
|
150
|
+
const queryParams = {
|
|
151
|
+
[WalletContextQueryParams.WALLET]: router.query[WalletContextQueryParams.WALLET],
|
|
152
|
+
};
|
|
153
|
+
const { rpc, suiGrpcClient } = useSettingsContext();
|
|
221
154
|
// Only used for wallet connect
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
155
|
+
const [universalConnector, setUniversalConnector] = useState();
|
|
156
|
+
const [session, setSession] = useState();
|
|
157
|
+
const sessionAddressWithout0x = session?.namespaces?.sui?.accounts?.[0];
|
|
158
|
+
const sessionAddress = sessionAddressWithout0x
|
|
226
159
|
? sessionAddressWithout0x.split(":").pop()
|
|
227
160
|
: undefined;
|
|
228
|
-
useEffect(
|
|
229
|
-
(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
case 0: return [4 /*yield*/, getUniversalConnector(rpc.url)];
|
|
234
|
-
case 1:
|
|
235
|
-
connector = _a.sent();
|
|
236
|
-
setUniversalConnector(connector);
|
|
237
|
-
return [2 /*return*/];
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
}); })();
|
|
161
|
+
useEffect(() => {
|
|
162
|
+
(async () => {
|
|
163
|
+
const connector = await getUniversalConnector(rpc.url);
|
|
164
|
+
setUniversalConnector(connector);
|
|
165
|
+
})();
|
|
241
166
|
}, [rpc.url]);
|
|
242
167
|
// Impersonated address
|
|
243
|
-
|
|
168
|
+
const impersonatedAddress = queryParams[WalletContextQueryParams.WALLET];
|
|
244
169
|
// Wallets
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
var msafeWallet = {
|
|
170
|
+
const wallets__installed = useWallets();
|
|
171
|
+
const getInstalledWallet = useCallback((name) => wallets__installed.find((w) => w.name === name), [wallets__installed]);
|
|
172
|
+
const wallets__extension_default = useMemo(() => {
|
|
173
|
+
const msafeWallet = {
|
|
250
174
|
name: WalletName.MSAFE_WALLET,
|
|
251
|
-
iconUrl:
|
|
175
|
+
iconUrl: getInstalledWallet(WalletName.MSAFE_WALLET)?.icon ??
|
|
176
|
+
WALLET_LOGO_MAP[WalletName.MSAFE_WALLET],
|
|
252
177
|
type: WalletType.EXTENSION,
|
|
253
178
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.MSAFE_WALLET],
|
|
254
179
|
};
|
|
@@ -257,49 +182,57 @@ function Inner(_a) {
|
|
|
257
182
|
return [
|
|
258
183
|
{
|
|
259
184
|
name: WalletName.SLUSH,
|
|
260
|
-
iconUrl:
|
|
185
|
+
iconUrl: getInstalledWallet(WalletName.SLUSH)?.icon ??
|
|
186
|
+
WALLET_LOGO_MAP[WalletName.SLUSH],
|
|
261
187
|
type: WalletType.EXTENSION,
|
|
262
188
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.SLUSH],
|
|
263
189
|
},
|
|
264
190
|
{
|
|
265
191
|
name: WalletName.PHANTOM,
|
|
266
|
-
iconUrl:
|
|
192
|
+
iconUrl: getInstalledWallet(WalletName.PHANTOM)?.icon ??
|
|
193
|
+
WALLET_LOGO_MAP[WalletName.PHANTOM],
|
|
267
194
|
type: WalletType.EXTENSION,
|
|
268
195
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.PHANTOM],
|
|
269
196
|
},
|
|
270
197
|
{
|
|
271
198
|
name: WalletName.NIGHTLY,
|
|
272
|
-
iconUrl:
|
|
199
|
+
iconUrl: getInstalledWallet(WalletName.NIGHTLY)?.icon ??
|
|
200
|
+
WALLET_LOGO_MAP[WalletName.NIGHTLY],
|
|
273
201
|
type: WalletType.EXTENSION,
|
|
274
202
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.NIGHTLY],
|
|
275
203
|
},
|
|
276
204
|
{
|
|
277
205
|
name: WalletName.SUIET,
|
|
278
|
-
iconUrl:
|
|
206
|
+
iconUrl: getInstalledWallet(WalletName.SUIET)?.icon ??
|
|
207
|
+
WALLET_LOGO_MAP[WalletName.SUIET],
|
|
279
208
|
type: WalletType.EXTENSION,
|
|
280
209
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.SUIET],
|
|
281
210
|
},
|
|
282
211
|
{
|
|
283
212
|
name: WalletName.BYBIT_WALLET,
|
|
284
|
-
iconUrl:
|
|
213
|
+
iconUrl: getInstalledWallet(WalletName.BYBIT_WALLET)?.icon ??
|
|
214
|
+
WALLET_LOGO_MAP[WalletName.BYBIT_WALLET],
|
|
285
215
|
type: WalletType.EXTENSION,
|
|
286
216
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.BYBIT_WALLET],
|
|
287
217
|
},
|
|
288
218
|
{
|
|
289
219
|
name: WalletName.GATE_WALLET,
|
|
290
|
-
iconUrl:
|
|
220
|
+
iconUrl: getInstalledWallet(WalletName.GATE_WALLET)?.icon ??
|
|
221
|
+
WALLET_LOGO_MAP[WalletName.GATE_WALLET],
|
|
291
222
|
type: WalletType.EXTENSION,
|
|
292
223
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.GATE_WALLET],
|
|
293
224
|
},
|
|
294
225
|
{
|
|
295
226
|
name: WalletName.OKX_WALLET,
|
|
296
|
-
iconUrl:
|
|
227
|
+
iconUrl: getInstalledWallet(WalletName.OKX_WALLET)?.icon ??
|
|
228
|
+
WALLET_LOGO_MAP[WalletName.OKX_WALLET],
|
|
297
229
|
type: WalletType.EXTENSION,
|
|
298
230
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.OKX_WALLET],
|
|
299
231
|
},
|
|
300
232
|
{
|
|
301
233
|
name: WalletName.BACKPACK,
|
|
302
|
-
iconUrl:
|
|
234
|
+
iconUrl: getInstalledWallet(WalletName.BACKPACK)?.icon ??
|
|
235
|
+
WALLET_LOGO_MAP[WalletName.BACKPACK],
|
|
303
236
|
type: WalletType.EXTENSION,
|
|
304
237
|
downloadUrls: WALLET_DOWNLOAD_URLS_MAP[WalletName.BACKPACK],
|
|
305
238
|
},
|
|
@@ -307,92 +240,83 @@ function Inner(_a) {
|
|
|
307
240
|
msafeWallet,
|
|
308
241
|
];
|
|
309
242
|
}, [getInstalledWallet]);
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
}, [wallets__extension_default, getInstalledWallet]);
|
|
319
|
-
|
|
243
|
+
const wallets__extension_installed_default = useMemo(() => wallets__extension_default
|
|
244
|
+
.filter((w) => w.name === WalletName.MSAFE_WALLET
|
|
245
|
+
? isInMsafeApp()
|
|
246
|
+
: !!getInstalledWallet(w.name))
|
|
247
|
+
.map((w) => ({
|
|
248
|
+
...w,
|
|
249
|
+
isInstalled: true,
|
|
250
|
+
raw: getInstalledWallet(w.name),
|
|
251
|
+
})), [wallets__extension_default, getInstalledWallet]);
|
|
252
|
+
const wallets__extension_installed_notDefault = useMemo(() => {
|
|
320
253
|
if (isInMsafeApp())
|
|
321
254
|
return [];
|
|
322
255
|
return wallets__installed
|
|
323
|
-
.filter(
|
|
324
|
-
.filter(
|
|
325
|
-
.map(
|
|
256
|
+
.filter((w) => !DEFAULT_EXTENSION_WALLET_NAMES.includes(w.name))
|
|
257
|
+
.filter((w) => !WEB_WALLET_NAMES.includes(w.name))
|
|
258
|
+
.map((w) => ({
|
|
326
259
|
name: w.name,
|
|
327
260
|
isInstalled: true,
|
|
328
261
|
iconUrl: w.icon,
|
|
329
262
|
type: WalletType.EXTENSION,
|
|
330
263
|
raw: w,
|
|
331
|
-
})
|
|
264
|
+
}));
|
|
332
265
|
}, [wallets__installed]);
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
})
|
|
340
|
-
.map(function (w) { return (__assign(__assign({}, w), { isInstalled: false })); });
|
|
341
|
-
}, [wallets__extension_default, getInstalledWallet]);
|
|
342
|
-
var wallets__web = useMemo(function () {
|
|
266
|
+
const wallets__extension_notInstalled_default = useMemo(() => wallets__extension_default
|
|
267
|
+
.filter((w) => w.name === WalletName.MSAFE_WALLET
|
|
268
|
+
? !isInMsafeApp()
|
|
269
|
+
: !getInstalledWallet(w.name))
|
|
270
|
+
.map((w) => ({ ...w, isInstalled: false })), [wallets__extension_default, getInstalledWallet]);
|
|
271
|
+
const wallets__web = useMemo(() => {
|
|
343
272
|
if (isInMsafeApp())
|
|
344
273
|
return [];
|
|
345
274
|
return [];
|
|
346
275
|
}, []);
|
|
347
|
-
|
|
276
|
+
const wallets = useMemo(() => [
|
|
277
|
+
...wallets__extension_installed_default,
|
|
278
|
+
...wallets__extension_installed_notDefault,
|
|
279
|
+
...wallets__extension_notInstalled_default,
|
|
280
|
+
...wallets__web,
|
|
281
|
+
], [
|
|
348
282
|
wallets__extension_installed_default,
|
|
349
283
|
wallets__extension_installed_notDefault,
|
|
350
284
|
wallets__extension_notInstalled_default,
|
|
351
285
|
wallets__web,
|
|
352
286
|
]);
|
|
353
287
|
// Wallet
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
288
|
+
const [isConnectWalletDropdownOpen, setIsConnectWalletDropdownOpen] = useState(false);
|
|
289
|
+
const dAppKit = useDAppKit();
|
|
290
|
+
const rawWallet = useCurrentWallet();
|
|
291
|
+
const wallet = useMemo(() => {
|
|
358
292
|
if (sessionAddress) {
|
|
359
293
|
return WALLET_CONNECT_WALLET;
|
|
360
294
|
}
|
|
361
|
-
return rawWallet
|
|
362
|
-
? wallets.find(function (w) { return w.name === rawWallet.name; })
|
|
363
|
-
: undefined;
|
|
295
|
+
return rawWallet ? wallets.find((w) => w.name === rawWallet.name) : undefined;
|
|
364
296
|
}, [rawWallet, wallets, sessionAddress]);
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
return [2 /*return*/, {
|
|
379
|
-
signature: res.signature,
|
|
380
|
-
bytes: res.transactionBytes,
|
|
381
|
-
}];
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
}); }, [sessionAddress, universalConnector]);
|
|
385
|
-
var connectWalletWrapper = useCallback(function (_wallet) {
|
|
297
|
+
const walletConnectSignPersonalMessage = useCallback(async (message) => {
|
|
298
|
+
if (!sessionAddress || !universalConnector)
|
|
299
|
+
throw new Error("Wallet not connected");
|
|
300
|
+
const res = (await universalConnector.request({
|
|
301
|
+
method: "sui_signPersonalMessage",
|
|
302
|
+
params: { message: message.toString() },
|
|
303
|
+
}, "sui:mainnet"));
|
|
304
|
+
return {
|
|
305
|
+
signature: res.signature,
|
|
306
|
+
bytes: res.transactionBytes,
|
|
307
|
+
};
|
|
308
|
+
}, [sessionAddress, universalConnector]);
|
|
309
|
+
const connectWalletWrapper = useCallback((_wallet) => {
|
|
386
310
|
try {
|
|
387
|
-
if (_wallet
|
|
388
|
-
universalConnector.connect().then(
|
|
311
|
+
if (_wallet?.walletConnect) {
|
|
312
|
+
universalConnector.connect().then((res) => {
|
|
389
313
|
dAppKit
|
|
390
314
|
.disconnectWallet()
|
|
391
|
-
.then(
|
|
315
|
+
.then(() => {
|
|
392
316
|
setSession(res.session);
|
|
393
317
|
})
|
|
394
|
-
.catch(
|
|
395
|
-
showErrorToast(
|
|
318
|
+
.catch((err) => {
|
|
319
|
+
showErrorToast(`Failed to connect ${_wallet.name}`, err);
|
|
396
320
|
console.error(err);
|
|
397
321
|
});
|
|
398
322
|
});
|
|
@@ -402,35 +326,41 @@ function Inner(_a) {
|
|
|
402
326
|
throw new Error("Missing wallet");
|
|
403
327
|
dAppKit
|
|
404
328
|
.connectWallet({ wallet: _wallet.raw })
|
|
405
|
-
.then(
|
|
406
|
-
|
|
329
|
+
.then(() => {
|
|
330
|
+
// Tear down any WalletConnect session. Swallow the error thrown
|
|
331
|
+
// when no session exists ("call connect() before enable()").
|
|
332
|
+
Promise.resolve()
|
|
333
|
+
.then(() => universalConnector.disconnect())
|
|
334
|
+
.catch(() => { });
|
|
407
335
|
setSession(null);
|
|
408
|
-
showInfoToast(
|
|
336
|
+
showInfoToast(`Connected ${_wallet.name}`);
|
|
409
337
|
setIsConnectWalletDropdownOpen(false);
|
|
410
338
|
})
|
|
411
|
-
.catch(
|
|
412
|
-
showErrorToast(
|
|
339
|
+
.catch((err) => {
|
|
340
|
+
showErrorToast(`Failed to connect ${_wallet.name}`, err);
|
|
413
341
|
console.error(err);
|
|
414
342
|
});
|
|
415
343
|
}
|
|
416
344
|
catch (err) {
|
|
417
|
-
showErrorToast(
|
|
345
|
+
showErrorToast(`Failed to connect ${_wallet.name}`, err);
|
|
418
346
|
console.error(err);
|
|
419
347
|
}
|
|
420
348
|
}, [universalConnector, dAppKit]);
|
|
421
|
-
|
|
349
|
+
const disconnectWalletWrapper = useCallback(() => {
|
|
422
350
|
try {
|
|
423
351
|
if (sessionAddress) {
|
|
424
|
-
|
|
352
|
+
Promise.resolve()
|
|
353
|
+
.then(() => universalConnector.disconnect())
|
|
354
|
+
.catch(() => { });
|
|
425
355
|
setSession(null);
|
|
426
356
|
}
|
|
427
357
|
else {
|
|
428
358
|
dAppKit
|
|
429
359
|
.disconnectWallet()
|
|
430
|
-
.then(
|
|
360
|
+
.then(() => {
|
|
431
361
|
showInfoToast("Disconnected wallet");
|
|
432
362
|
})
|
|
433
|
-
.catch(
|
|
363
|
+
.catch((err) => {
|
|
434
364
|
showErrorToast("Failed to disconnect wallet", err);
|
|
435
365
|
console.error(err);
|
|
436
366
|
});
|
|
@@ -442,247 +372,195 @@ function Inner(_a) {
|
|
|
442
372
|
}
|
|
443
373
|
}, [sessionAddress, universalConnector, dAppKit]);
|
|
444
374
|
// Accounts
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
375
|
+
const connection = useWalletConnection();
|
|
376
|
+
const accountsRes = useMemo(() => connection?.wallet?.accounts ?? [], [connection?.wallet?.accounts]);
|
|
377
|
+
const accountRes = useCurrentAccount() ?? undefined;
|
|
378
|
+
const account = useMemo(() => sessionAddress
|
|
379
|
+
? {
|
|
380
|
+
address: sessionAddress,
|
|
381
|
+
publicKey: new Uint8Array(),
|
|
382
|
+
chains: ["sui:mainnet"],
|
|
383
|
+
features: [],
|
|
384
|
+
}
|
|
385
|
+
: accountRes, [sessionAddress, accountRes]);
|
|
386
|
+
const accounts = useMemo(() => sessionAddress
|
|
387
|
+
? [
|
|
388
|
+
{
|
|
451
389
|
address: sessionAddress,
|
|
452
390
|
publicKey: new Uint8Array(),
|
|
453
391
|
chains: ["sui:mainnet"],
|
|
454
392
|
features: [],
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
features: [],
|
|
466
|
-
},
|
|
467
|
-
]
|
|
468
|
-
: accountsRes;
|
|
469
|
-
}, [sessionAddress, accountsRes]);
|
|
470
|
-
var signPersonalMessage = useMemo(function () {
|
|
471
|
-
return sessionAddress
|
|
472
|
-
? walletConnectSignPersonalMessage
|
|
473
|
-
: function (message) { return dAppKit.signPersonalMessage({ message: message }); };
|
|
474
|
-
}, [sessionAddress, walletConnectSignPersonalMessage, dAppKit]);
|
|
475
|
-
var switchAccountWrapper = useCallback(function (_account, addressNameServiceName) {
|
|
476
|
-
var _a, _b;
|
|
477
|
-
var accountLabel = (_b = (_a = _account === null || _account === void 0 ? void 0 : _account.label) !== null && _a !== void 0 ? _a : addressNameServiceName) !== null && _b !== void 0 ? _b : formatAddress(_account.address);
|
|
393
|
+
},
|
|
394
|
+
]
|
|
395
|
+
: accountsRes, [sessionAddress, accountsRes]);
|
|
396
|
+
const signPersonalMessage = useMemo(() => sessionAddress
|
|
397
|
+
? walletConnectSignPersonalMessage
|
|
398
|
+
: (message) => dAppKit.signPersonalMessage({ message }), [sessionAddress, walletConnectSignPersonalMessage, dAppKit]);
|
|
399
|
+
const switchAccountWrapper = useCallback((_account, addressNameServiceName) => {
|
|
400
|
+
const accountLabel = _account?.label ??
|
|
401
|
+
addressNameServiceName ??
|
|
402
|
+
formatAddress(_account.address);
|
|
478
403
|
try {
|
|
479
404
|
dAppKit.switchAccount({
|
|
480
405
|
account: _account,
|
|
481
406
|
});
|
|
482
|
-
showInfoToast(
|
|
483
|
-
description:
|
|
484
|
-
? (addressNameServiceName
|
|
407
|
+
showInfoToast(`Switched to ${accountLabel}`, {
|
|
408
|
+
description: _account?.label
|
|
409
|
+
? (addressNameServiceName ?? formatAddress(_account.address))
|
|
485
410
|
: undefined,
|
|
486
411
|
});
|
|
487
412
|
}
|
|
488
413
|
catch (err) {
|
|
489
|
-
showErrorToast(
|
|
414
|
+
showErrorToast(`Failed to switch to ${accountLabel}`, err);
|
|
490
415
|
console.error(err);
|
|
491
416
|
}
|
|
492
417
|
}, [dAppKit]);
|
|
493
418
|
// LaunchDarkly
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
useEffect(
|
|
419
|
+
const ldClient = useLDClient();
|
|
420
|
+
const ldKeyRef = useRef(undefined);
|
|
421
|
+
useEffect(() => {
|
|
497
422
|
if (!ldClient)
|
|
498
423
|
return;
|
|
499
|
-
|
|
424
|
+
const key = impersonatedAddress ?? account?.address;
|
|
500
425
|
if (ldKeyRef.current === key)
|
|
501
426
|
return;
|
|
502
|
-
(
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
_a.sent();
|
|
508
|
-
ldKeyRef.current = key;
|
|
509
|
-
return [2 /*return*/];
|
|
510
|
-
}
|
|
511
|
-
});
|
|
512
|
-
}); })();
|
|
513
|
-
}, [ldClient, impersonatedAddress, account === null || account === void 0 ? void 0 : account.address]);
|
|
427
|
+
(async () => {
|
|
428
|
+
await ldClient.identify(!key ? { anonymous: true } : { key });
|
|
429
|
+
ldKeyRef.current = key;
|
|
430
|
+
})();
|
|
431
|
+
}, [ldClient, impersonatedAddress, account?.address]);
|
|
514
432
|
// Wallet name logging
|
|
515
|
-
useEffect(
|
|
516
|
-
if (impersonatedAddress || !
|
|
433
|
+
useEffect(() => {
|
|
434
|
+
if (impersonatedAddress || !account?.address)
|
|
517
435
|
return;
|
|
518
|
-
if (!
|
|
436
|
+
if (!wallet?.name)
|
|
519
437
|
return;
|
|
520
|
-
(
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
return [3 /*break*/, 3];
|
|
540
|
-
case 2:
|
|
541
|
-
err_1 = _a.sent();
|
|
542
|
-
console.error(err_1);
|
|
543
|
-
return [3 /*break*/, 3];
|
|
544
|
-
case 3: return [2 /*return*/];
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
}); })();
|
|
548
|
-
}, [impersonatedAddress, account === null || account === void 0 ? void 0 : account.address, wallet === null || wallet === void 0 ? void 0 : wallet.name, appName]);
|
|
438
|
+
(async () => {
|
|
439
|
+
try {
|
|
440
|
+
await fetch(`${API_URL}/events/logs/wallet-connect`, {
|
|
441
|
+
method: "POST",
|
|
442
|
+
body: JSON.stringify({
|
|
443
|
+
address: account.address,
|
|
444
|
+
walletName: wallet.name,
|
|
445
|
+
project: appName,
|
|
446
|
+
}),
|
|
447
|
+
headers: {
|
|
448
|
+
"Content-Type": "application/json",
|
|
449
|
+
},
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
console.error(err);
|
|
454
|
+
}
|
|
455
|
+
})();
|
|
456
|
+
}, [impersonatedAddress, account?.address, wallet?.name, appName]);
|
|
549
457
|
// Tx
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
// Gas budget
|
|
569
|
-
if (setGasBudget && gasBudget !== "")
|
|
570
|
-
_transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
571
|
-
.times(Math.pow(10, SUI_DECIMALS))
|
|
572
|
-
.integerValue(BigNumber.ROUND_DOWN));
|
|
573
|
-
// Set sender for simulation
|
|
574
|
-
_transaction.setSender(_address !== null && _address !== void 0 ? _address : "0x0000000000000000000000000000000000000000000000000000000000000000");
|
|
575
|
-
return [4 /*yield*/, suiGrpcClient.simulateTransaction({
|
|
576
|
-
transaction: _transaction,
|
|
577
|
-
checksEnabled: false,
|
|
578
|
-
include: { commandResults: true },
|
|
579
|
-
})];
|
|
580
|
-
case 2:
|
|
581
|
-
simResult = _c.sent();
|
|
582
|
-
console.log("[WalletContext] dryRunTransaction - simResult:", simResult);
|
|
583
|
-
if (simResult.FailedTransaction)
|
|
584
|
-
throw new Error((_b = (_a = simResult.FailedTransaction.status.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : "Simulation failed");
|
|
585
|
-
return [2 /*return*/, simResult];
|
|
586
|
-
case 3:
|
|
587
|
-
err_2 = _c.sent();
|
|
588
|
-
console.error(err_2);
|
|
589
|
-
throw err_2;
|
|
590
|
-
case 4: return [2 /*return*/];
|
|
591
|
-
}
|
|
458
|
+
const { gasBudget } = useSettingsContext();
|
|
459
|
+
const dryRunTransaction = useCallback(async (transaction, setGasBudget = true) => {
|
|
460
|
+
const _address = impersonatedAddress ?? account?.address;
|
|
461
|
+
const _transaction = Transaction.from(transaction);
|
|
462
|
+
try {
|
|
463
|
+
// Gas budget
|
|
464
|
+
if (setGasBudget && gasBudget !== "")
|
|
465
|
+
_transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
466
|
+
.times(10 ** SUI_DECIMALS)
|
|
467
|
+
.integerValue(BigNumber.ROUND_DOWN));
|
|
468
|
+
// Set sender for simulation
|
|
469
|
+
_transaction.setSender(_address ??
|
|
470
|
+
"0x0000000000000000000000000000000000000000000000000000000000000000");
|
|
471
|
+
// Simulate
|
|
472
|
+
const simResult = await suiGrpcClient.simulateTransaction({
|
|
473
|
+
transaction: _transaction,
|
|
474
|
+
checksEnabled: false,
|
|
475
|
+
include: { commandResults: true },
|
|
592
476
|
});
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
case 1:
|
|
610
|
-
_e.trys.push([1, 9, , 10]);
|
|
611
|
-
// Gas budget
|
|
612
|
-
if (gasBudget !== "")
|
|
613
|
-
transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
614
|
-
.times(Math.pow(10, SUI_DECIMALS))
|
|
615
|
-
.integerValue(BigNumber.ROUND_DOWN));
|
|
616
|
-
onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
|
|
617
|
-
// Log
|
|
618
|
-
console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
|
|
619
|
-
signedTransaction = void 0;
|
|
620
|
-
if (!(sessionAddress && universalConnector)) return [3 /*break*/, 4];
|
|
621
|
-
transaction.setSender(sessionAddress);
|
|
622
|
-
return [4 /*yield*/, transaction.build({ client: suiGrpcClient })];
|
|
623
|
-
case 2:
|
|
624
|
-
txBytes = _e.sent();
|
|
625
|
-
return [4 /*yield*/, universalConnector.request({
|
|
626
|
-
method: "sui_signTransaction",
|
|
627
|
-
params: {
|
|
628
|
-
transaction: toBase64(txBytes),
|
|
629
|
-
address: sessionAddress,
|
|
630
|
-
},
|
|
631
|
-
}, "sui:mainnet")];
|
|
632
|
-
case 3:
|
|
633
|
-
res = _e.sent();
|
|
634
|
-
signedTransaction = {
|
|
635
|
-
bytes: res.transactionBytes,
|
|
636
|
-
signature: res.signature,
|
|
637
|
-
};
|
|
638
|
-
return [3 /*break*/, 6];
|
|
639
|
-
case 4: return [4 /*yield*/, dAppKit.signTransaction({
|
|
640
|
-
transaction: transaction,
|
|
641
|
-
})];
|
|
642
|
-
case 5:
|
|
643
|
-
// Sign
|
|
644
|
-
signedTransaction = _e.sent();
|
|
645
|
-
_e.label = 6;
|
|
646
|
-
case 6:
|
|
647
|
-
if (!signedTransaction)
|
|
648
|
-
throw new Error("Failed to sign transaction");
|
|
649
|
-
onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
|
|
650
|
-
return [4 /*yield*/, suiGrpcClient.executeTransaction({
|
|
651
|
-
transaction: fromBase64(signedTransaction.bytes),
|
|
652
|
-
signatures: [signedTransaction.signature],
|
|
653
|
-
})];
|
|
654
|
-
case 7:
|
|
655
|
-
execResult = _e.sent();
|
|
656
|
-
execTx = (_a = execResult.Transaction) !== null && _a !== void 0 ? _a : execResult.FailedTransaction;
|
|
657
|
-
if (!execTx)
|
|
658
|
-
throw new Error("Transaction not found");
|
|
659
|
-
onExecute === null || onExecute === void 0 ? void 0 : onExecute(execTx);
|
|
660
|
-
return [4 /*yield*/, suiGrpcClient.waitForTransaction({
|
|
661
|
-
digest: execTx.digest,
|
|
662
|
-
include: {
|
|
663
|
-
effects: true,
|
|
664
|
-
events: true,
|
|
665
|
-
balanceChanges: true,
|
|
666
|
-
},
|
|
667
|
-
})];
|
|
668
|
-
case 8:
|
|
669
|
-
waitResult = _e.sent();
|
|
670
|
-
tx = (_b = waitResult.Transaction) !== null && _b !== void 0 ? _b : waitResult.FailedTransaction;
|
|
671
|
-
if (!tx)
|
|
672
|
-
throw new Error("Transaction not found");
|
|
673
|
-
if (!tx.status.success)
|
|
674
|
-
throw new Error((_d = (_c = tx.status.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : "Transaction failed");
|
|
675
|
-
return [2 /*return*/, tx];
|
|
676
|
-
case 9:
|
|
677
|
-
err_3 = _e.sent();
|
|
678
|
-
console.error(err_3);
|
|
679
|
-
throw err_3;
|
|
680
|
-
case 10: return [2 /*return*/];
|
|
477
|
+
console.log("[WalletContext] dryRunTransaction - simResult:", simResult);
|
|
478
|
+
if (simResult.FailedTransaction)
|
|
479
|
+
throw new Error(simResult.FailedTransaction.status.error?.message ??
|
|
480
|
+
"Simulation failed");
|
|
481
|
+
return simResult;
|
|
482
|
+
}
|
|
483
|
+
catch (err) {
|
|
484
|
+
console.error(err);
|
|
485
|
+
throw err;
|
|
486
|
+
}
|
|
487
|
+
}, [impersonatedAddress, account?.address, gasBudget, suiGrpcClient]);
|
|
488
|
+
const signExecuteAndWaitForTransaction = useCallback(async (transaction, onSetGasBudget, onSign, onExecute) => {
|
|
489
|
+
const _address = impersonatedAddress ?? account?.address;
|
|
490
|
+
if (_address) {
|
|
491
|
+
try {
|
|
492
|
+
dryRunTransaction(transaction, false); // Do not await
|
|
681
493
|
}
|
|
682
|
-
|
|
683
|
-
|
|
494
|
+
catch {
|
|
495
|
+
// Dry run is best-effort; ignore failures
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
try {
|
|
499
|
+
// Gas budget
|
|
500
|
+
if (gasBudget !== "")
|
|
501
|
+
transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
502
|
+
.times(10 ** SUI_DECIMALS)
|
|
503
|
+
.integerValue(BigNumber.ROUND_DOWN));
|
|
504
|
+
onSetGasBudget?.(transaction);
|
|
505
|
+
// Log
|
|
506
|
+
console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
|
|
507
|
+
let signedTransaction;
|
|
508
|
+
if (sessionAddress && universalConnector) {
|
|
509
|
+
transaction.setSender(sessionAddress);
|
|
510
|
+
const txBytes = await transaction.build({ client: suiGrpcClient });
|
|
511
|
+
const res = (await universalConnector.request({
|
|
512
|
+
method: "sui_signTransaction",
|
|
513
|
+
params: {
|
|
514
|
+
transaction: toBase64(txBytes),
|
|
515
|
+
address: sessionAddress,
|
|
516
|
+
},
|
|
517
|
+
}, "sui:mainnet"));
|
|
518
|
+
signedTransaction = {
|
|
519
|
+
bytes: res.transactionBytes,
|
|
520
|
+
signature: res.signature,
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
// Sign
|
|
525
|
+
signedTransaction = await dAppKit.signTransaction({
|
|
526
|
+
transaction,
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
if (!signedTransaction)
|
|
530
|
+
throw new Error("Failed to sign transaction");
|
|
531
|
+
onSign?.(signedTransaction);
|
|
532
|
+
// Execute
|
|
533
|
+
const execResult = await suiGrpcClient.executeTransaction({
|
|
534
|
+
transaction: fromBase64(signedTransaction.bytes),
|
|
535
|
+
signatures: [signedTransaction.signature],
|
|
536
|
+
});
|
|
537
|
+
const execTx = execResult.Transaction ?? execResult.FailedTransaction;
|
|
538
|
+
if (!execTx)
|
|
539
|
+
throw new Error("Transaction not found");
|
|
540
|
+
onExecute?.(execTx);
|
|
541
|
+
// Wait
|
|
542
|
+
const waitResult = await suiGrpcClient.waitForTransaction({
|
|
543
|
+
digest: execTx.digest,
|
|
544
|
+
include: {
|
|
545
|
+
effects: true,
|
|
546
|
+
events: true,
|
|
547
|
+
balanceChanges: true,
|
|
548
|
+
},
|
|
549
|
+
});
|
|
550
|
+
const tx = waitResult.Transaction ?? waitResult.FailedTransaction;
|
|
551
|
+
if (!tx)
|
|
552
|
+
throw new Error("Transaction not found");
|
|
553
|
+
if (!tx.status.success)
|
|
554
|
+
throw new Error(tx.status.error?.message ?? "Transaction failed");
|
|
555
|
+
return tx;
|
|
556
|
+
}
|
|
557
|
+
catch (err) {
|
|
558
|
+
console.error(err);
|
|
559
|
+
throw err;
|
|
560
|
+
}
|
|
561
|
+
}, [
|
|
684
562
|
impersonatedAddress,
|
|
685
|
-
account
|
|
563
|
+
account?.address,
|
|
686
564
|
dryRunTransaction,
|
|
687
565
|
gasBudget,
|
|
688
566
|
sessionAddress,
|
|
@@ -691,26 +569,26 @@ function Inner(_a) {
|
|
|
691
569
|
dAppKit,
|
|
692
570
|
]);
|
|
693
571
|
// Using Ledger
|
|
694
|
-
|
|
572
|
+
const [isUsingLedger, setIsUsingLedger] = useLocalStorage(`isUsingLedger-${impersonatedAddress ?? account?.address}`, false);
|
|
695
573
|
// Context
|
|
696
|
-
|
|
574
|
+
const contextValue = useMemo(() => {
|
|
697
575
|
return {
|
|
698
576
|
isImpersonating: !!impersonatedAddress,
|
|
699
|
-
isConnectWalletDropdownOpen
|
|
700
|
-
setIsConnectWalletDropdownOpen
|
|
701
|
-
wallets
|
|
702
|
-
wallet
|
|
577
|
+
isConnectWalletDropdownOpen,
|
|
578
|
+
setIsConnectWalletDropdownOpen,
|
|
579
|
+
wallets,
|
|
580
|
+
wallet,
|
|
703
581
|
connectWallet: connectWalletWrapper,
|
|
704
582
|
disconnectWallet: disconnectWalletWrapper,
|
|
705
|
-
accounts
|
|
706
|
-
account
|
|
583
|
+
accounts,
|
|
584
|
+
account,
|
|
707
585
|
switchAccount: switchAccountWrapper,
|
|
708
|
-
address: impersonatedAddress
|
|
709
|
-
dryRunTransaction
|
|
710
|
-
signExecuteAndWaitForTransaction
|
|
711
|
-
isUsingLedger
|
|
712
|
-
setIsUsingLedger
|
|
713
|
-
signPersonalMessage
|
|
586
|
+
address: impersonatedAddress ?? account?.address,
|
|
587
|
+
dryRunTransaction,
|
|
588
|
+
signExecuteAndWaitForTransaction,
|
|
589
|
+
isUsingLedger,
|
|
590
|
+
setIsUsingLedger,
|
|
591
|
+
signPersonalMessage,
|
|
714
592
|
};
|
|
715
593
|
}, [
|
|
716
594
|
impersonatedAddress,
|
|
@@ -728,24 +606,19 @@ function Inner(_a) {
|
|
|
728
606
|
setIsUsingLedger,
|
|
729
607
|
signPersonalMessage,
|
|
730
608
|
]);
|
|
731
|
-
return (<WalletContext.Provider value={contextValue}>
|
|
732
|
-
{children}
|
|
733
|
-
</WalletContext.Provider>);
|
|
609
|
+
return (<WalletContext.Provider value={contextValue}>{children}</WalletContext.Provider>);
|
|
734
610
|
}
|
|
735
|
-
export function WalletContextProvider(
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
slushWalletConfig: { appName: appName },
|
|
746
|
-
});
|
|
747
|
-
}, [rpc.url, appName]);
|
|
611
|
+
export function WalletContextProvider({ appName, children }) {
|
|
612
|
+
const { rpc } = useSettingsContext();
|
|
613
|
+
const dAppKitInstance = useMemo(() => createDAppKit({
|
|
614
|
+
networks: ["mainnet"],
|
|
615
|
+
createClient(network) {
|
|
616
|
+
return new SuiGrpcClient({ network, baseUrl: rpc.url });
|
|
617
|
+
},
|
|
618
|
+
autoConnect: true,
|
|
619
|
+
slushWalletConfig: { appName },
|
|
620
|
+
}), [rpc.url, appName]);
|
|
748
621
|
return (<DAppKitProvider dAppKit={dAppKitInstance}>
|
|
749
|
-
|
|
750
|
-
|
|
622
|
+
<Inner appName={appName}>{children}</Inner>
|
|
623
|
+
</DAppKitProvider>);
|
|
751
624
|
}
|