@suilend/sui-fe-next 3.0.9 → 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 +330 -463
- 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,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",
|
|
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,41 +326,41 @@ function Inner(_a) {
|
|
|
402
326
|
throw new Error("Missing wallet");
|
|
403
327
|
dAppKit
|
|
404
328
|
.connectWallet({ wallet: _wallet.raw })
|
|
405
|
-
.then(
|
|
329
|
+
.then(() => {
|
|
406
330
|
// Tear down any WalletConnect session. Swallow the error thrown
|
|
407
331
|
// when no session exists ("call connect() before enable()").
|
|
408
332
|
Promise.resolve()
|
|
409
|
-
.then(
|
|
410
|
-
.catch(
|
|
333
|
+
.then(() => universalConnector.disconnect())
|
|
334
|
+
.catch(() => { });
|
|
411
335
|
setSession(null);
|
|
412
|
-
showInfoToast(
|
|
336
|
+
showInfoToast(`Connected ${_wallet.name}`);
|
|
413
337
|
setIsConnectWalletDropdownOpen(false);
|
|
414
338
|
})
|
|
415
|
-
.catch(
|
|
416
|
-
showErrorToast(
|
|
339
|
+
.catch((err) => {
|
|
340
|
+
showErrorToast(`Failed to connect ${_wallet.name}`, err);
|
|
417
341
|
console.error(err);
|
|
418
342
|
});
|
|
419
343
|
}
|
|
420
344
|
catch (err) {
|
|
421
|
-
showErrorToast(
|
|
345
|
+
showErrorToast(`Failed to connect ${_wallet.name}`, err);
|
|
422
346
|
console.error(err);
|
|
423
347
|
}
|
|
424
348
|
}, [universalConnector, dAppKit]);
|
|
425
|
-
|
|
349
|
+
const disconnectWalletWrapper = useCallback(() => {
|
|
426
350
|
try {
|
|
427
351
|
if (sessionAddress) {
|
|
428
352
|
Promise.resolve()
|
|
429
|
-
.then(
|
|
430
|
-
.catch(
|
|
353
|
+
.then(() => universalConnector.disconnect())
|
|
354
|
+
.catch(() => { });
|
|
431
355
|
setSession(null);
|
|
432
356
|
}
|
|
433
357
|
else {
|
|
434
358
|
dAppKit
|
|
435
359
|
.disconnectWallet()
|
|
436
|
-
.then(
|
|
360
|
+
.then(() => {
|
|
437
361
|
showInfoToast("Disconnected wallet");
|
|
438
362
|
})
|
|
439
|
-
.catch(
|
|
363
|
+
.catch((err) => {
|
|
440
364
|
showErrorToast("Failed to disconnect wallet", err);
|
|
441
365
|
console.error(err);
|
|
442
366
|
});
|
|
@@ -448,247 +372,195 @@ function Inner(_a) {
|
|
|
448
372
|
}
|
|
449
373
|
}, [sessionAddress, universalConnector, dAppKit]);
|
|
450
374
|
// Accounts
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
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
|
+
{
|
|
457
389
|
address: sessionAddress,
|
|
458
390
|
publicKey: new Uint8Array(),
|
|
459
391
|
chains: ["sui:mainnet"],
|
|
460
392
|
features: [],
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
features: [],
|
|
472
|
-
},
|
|
473
|
-
]
|
|
474
|
-
: accountsRes;
|
|
475
|
-
}, [sessionAddress, accountsRes]);
|
|
476
|
-
var signPersonalMessage = useMemo(function () {
|
|
477
|
-
return sessionAddress
|
|
478
|
-
? walletConnectSignPersonalMessage
|
|
479
|
-
: function (message) { return dAppKit.signPersonalMessage({ message: message }); };
|
|
480
|
-
}, [sessionAddress, walletConnectSignPersonalMessage, dAppKit]);
|
|
481
|
-
var switchAccountWrapper = useCallback(function (_account, addressNameServiceName) {
|
|
482
|
-
var _a, _b;
|
|
483
|
-
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);
|
|
484
403
|
try {
|
|
485
404
|
dAppKit.switchAccount({
|
|
486
405
|
account: _account,
|
|
487
406
|
});
|
|
488
|
-
showInfoToast(
|
|
489
|
-
description:
|
|
490
|
-
? (addressNameServiceName
|
|
407
|
+
showInfoToast(`Switched to ${accountLabel}`, {
|
|
408
|
+
description: _account?.label
|
|
409
|
+
? (addressNameServiceName ?? formatAddress(_account.address))
|
|
491
410
|
: undefined,
|
|
492
411
|
});
|
|
493
412
|
}
|
|
494
413
|
catch (err) {
|
|
495
|
-
showErrorToast(
|
|
414
|
+
showErrorToast(`Failed to switch to ${accountLabel}`, err);
|
|
496
415
|
console.error(err);
|
|
497
416
|
}
|
|
498
417
|
}, [dAppKit]);
|
|
499
418
|
// LaunchDarkly
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
useEffect(
|
|
419
|
+
const ldClient = useLDClient();
|
|
420
|
+
const ldKeyRef = useRef(undefined);
|
|
421
|
+
useEffect(() => {
|
|
503
422
|
if (!ldClient)
|
|
504
423
|
return;
|
|
505
|
-
|
|
424
|
+
const key = impersonatedAddress ?? account?.address;
|
|
506
425
|
if (ldKeyRef.current === key)
|
|
507
426
|
return;
|
|
508
|
-
(
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
_a.sent();
|
|
514
|
-
ldKeyRef.current = key;
|
|
515
|
-
return [2 /*return*/];
|
|
516
|
-
}
|
|
517
|
-
});
|
|
518
|
-
}); })();
|
|
519
|
-
}, [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]);
|
|
520
432
|
// Wallet name logging
|
|
521
|
-
useEffect(
|
|
522
|
-
if (impersonatedAddress || !
|
|
433
|
+
useEffect(() => {
|
|
434
|
+
if (impersonatedAddress || !account?.address)
|
|
523
435
|
return;
|
|
524
|
-
if (!
|
|
436
|
+
if (!wallet?.name)
|
|
525
437
|
return;
|
|
526
|
-
(
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
return [3 /*break*/, 3];
|
|
546
|
-
case 2:
|
|
547
|
-
err_1 = _a.sent();
|
|
548
|
-
console.error(err_1);
|
|
549
|
-
return [3 /*break*/, 3];
|
|
550
|
-
case 3: return [2 /*return*/];
|
|
551
|
-
}
|
|
552
|
-
});
|
|
553
|
-
}); })();
|
|
554
|
-
}, [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]);
|
|
555
457
|
// Tx
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
// Gas budget
|
|
575
|
-
if (setGasBudget && gasBudget !== "")
|
|
576
|
-
_transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
577
|
-
.times(Math.pow(10, SUI_DECIMALS))
|
|
578
|
-
.integerValue(BigNumber.ROUND_DOWN));
|
|
579
|
-
// Set sender for simulation
|
|
580
|
-
_transaction.setSender(_address !== null && _address !== void 0 ? _address : "0x0000000000000000000000000000000000000000000000000000000000000000");
|
|
581
|
-
return [4 /*yield*/, suiGrpcClient.simulateTransaction({
|
|
582
|
-
transaction: _transaction,
|
|
583
|
-
checksEnabled: false,
|
|
584
|
-
include: { commandResults: true },
|
|
585
|
-
})];
|
|
586
|
-
case 2:
|
|
587
|
-
simResult = _c.sent();
|
|
588
|
-
console.log("[WalletContext] dryRunTransaction - simResult:", simResult);
|
|
589
|
-
if (simResult.FailedTransaction)
|
|
590
|
-
throw new Error((_b = (_a = simResult.FailedTransaction.status.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : "Simulation failed");
|
|
591
|
-
return [2 /*return*/, simResult];
|
|
592
|
-
case 3:
|
|
593
|
-
err_2 = _c.sent();
|
|
594
|
-
console.error(err_2);
|
|
595
|
-
throw err_2;
|
|
596
|
-
case 4: return [2 /*return*/];
|
|
597
|
-
}
|
|
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 },
|
|
598
476
|
});
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
case 1:
|
|
616
|
-
_e.trys.push([1, 9, , 10]);
|
|
617
|
-
// Gas budget
|
|
618
|
-
if (gasBudget !== "")
|
|
619
|
-
transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
620
|
-
.times(Math.pow(10, SUI_DECIMALS))
|
|
621
|
-
.integerValue(BigNumber.ROUND_DOWN));
|
|
622
|
-
onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
|
|
623
|
-
// Log
|
|
624
|
-
console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
|
|
625
|
-
signedTransaction = void 0;
|
|
626
|
-
if (!(sessionAddress && universalConnector)) return [3 /*break*/, 4];
|
|
627
|
-
transaction.setSender(sessionAddress);
|
|
628
|
-
return [4 /*yield*/, transaction.build({ client: suiGrpcClient })];
|
|
629
|
-
case 2:
|
|
630
|
-
txBytes = _e.sent();
|
|
631
|
-
return [4 /*yield*/, universalConnector.request({
|
|
632
|
-
method: "sui_signTransaction",
|
|
633
|
-
params: {
|
|
634
|
-
transaction: toBase64(txBytes),
|
|
635
|
-
address: sessionAddress,
|
|
636
|
-
},
|
|
637
|
-
}, "sui:mainnet")];
|
|
638
|
-
case 3:
|
|
639
|
-
res = _e.sent();
|
|
640
|
-
signedTransaction = {
|
|
641
|
-
bytes: res.transactionBytes,
|
|
642
|
-
signature: res.signature,
|
|
643
|
-
};
|
|
644
|
-
return [3 /*break*/, 6];
|
|
645
|
-
case 4: return [4 /*yield*/, dAppKit.signTransaction({
|
|
646
|
-
transaction: transaction,
|
|
647
|
-
})];
|
|
648
|
-
case 5:
|
|
649
|
-
// Sign
|
|
650
|
-
signedTransaction = _e.sent();
|
|
651
|
-
_e.label = 6;
|
|
652
|
-
case 6:
|
|
653
|
-
if (!signedTransaction)
|
|
654
|
-
throw new Error("Failed to sign transaction");
|
|
655
|
-
onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
|
|
656
|
-
return [4 /*yield*/, suiGrpcClient.executeTransaction({
|
|
657
|
-
transaction: fromBase64(signedTransaction.bytes),
|
|
658
|
-
signatures: [signedTransaction.signature],
|
|
659
|
-
})];
|
|
660
|
-
case 7:
|
|
661
|
-
execResult = _e.sent();
|
|
662
|
-
execTx = (_a = execResult.Transaction) !== null && _a !== void 0 ? _a : execResult.FailedTransaction;
|
|
663
|
-
if (!execTx)
|
|
664
|
-
throw new Error("Transaction not found");
|
|
665
|
-
onExecute === null || onExecute === void 0 ? void 0 : onExecute(execTx);
|
|
666
|
-
return [4 /*yield*/, suiGrpcClient.waitForTransaction({
|
|
667
|
-
digest: execTx.digest,
|
|
668
|
-
include: {
|
|
669
|
-
effects: true,
|
|
670
|
-
events: true,
|
|
671
|
-
balanceChanges: true,
|
|
672
|
-
},
|
|
673
|
-
})];
|
|
674
|
-
case 8:
|
|
675
|
-
waitResult = _e.sent();
|
|
676
|
-
tx = (_b = waitResult.Transaction) !== null && _b !== void 0 ? _b : waitResult.FailedTransaction;
|
|
677
|
-
if (!tx)
|
|
678
|
-
throw new Error("Transaction not found");
|
|
679
|
-
if (!tx.status.success)
|
|
680
|
-
throw new Error((_d = (_c = tx.status.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : "Transaction failed");
|
|
681
|
-
return [2 /*return*/, tx];
|
|
682
|
-
case 9:
|
|
683
|
-
err_3 = _e.sent();
|
|
684
|
-
console.error(err_3);
|
|
685
|
-
throw err_3;
|
|
686
|
-
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
|
|
687
493
|
}
|
|
688
|
-
|
|
689
|
-
|
|
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
|
+
}, [
|
|
690
562
|
impersonatedAddress,
|
|
691
|
-
account
|
|
563
|
+
account?.address,
|
|
692
564
|
dryRunTransaction,
|
|
693
565
|
gasBudget,
|
|
694
566
|
sessionAddress,
|
|
@@ -697,26 +569,26 @@ function Inner(_a) {
|
|
|
697
569
|
dAppKit,
|
|
698
570
|
]);
|
|
699
571
|
// Using Ledger
|
|
700
|
-
|
|
572
|
+
const [isUsingLedger, setIsUsingLedger] = useLocalStorage(`isUsingLedger-${impersonatedAddress ?? account?.address}`, false);
|
|
701
573
|
// Context
|
|
702
|
-
|
|
574
|
+
const contextValue = useMemo(() => {
|
|
703
575
|
return {
|
|
704
576
|
isImpersonating: !!impersonatedAddress,
|
|
705
|
-
isConnectWalletDropdownOpen
|
|
706
|
-
setIsConnectWalletDropdownOpen
|
|
707
|
-
wallets
|
|
708
|
-
wallet
|
|
577
|
+
isConnectWalletDropdownOpen,
|
|
578
|
+
setIsConnectWalletDropdownOpen,
|
|
579
|
+
wallets,
|
|
580
|
+
wallet,
|
|
709
581
|
connectWallet: connectWalletWrapper,
|
|
710
582
|
disconnectWallet: disconnectWalletWrapper,
|
|
711
|
-
accounts
|
|
712
|
-
account
|
|
583
|
+
accounts,
|
|
584
|
+
account,
|
|
713
585
|
switchAccount: switchAccountWrapper,
|
|
714
|
-
address: impersonatedAddress
|
|
715
|
-
dryRunTransaction
|
|
716
|
-
signExecuteAndWaitForTransaction
|
|
717
|
-
isUsingLedger
|
|
718
|
-
setIsUsingLedger
|
|
719
|
-
signPersonalMessage
|
|
586
|
+
address: impersonatedAddress ?? account?.address,
|
|
587
|
+
dryRunTransaction,
|
|
588
|
+
signExecuteAndWaitForTransaction,
|
|
589
|
+
isUsingLedger,
|
|
590
|
+
setIsUsingLedger,
|
|
591
|
+
signPersonalMessage,
|
|
720
592
|
};
|
|
721
593
|
}, [
|
|
722
594
|
impersonatedAddress,
|
|
@@ -734,24 +606,19 @@ function Inner(_a) {
|
|
|
734
606
|
setIsUsingLedger,
|
|
735
607
|
signPersonalMessage,
|
|
736
608
|
]);
|
|
737
|
-
return (<WalletContext.Provider value={contextValue}>
|
|
738
|
-
{children}
|
|
739
|
-
</WalletContext.Provider>);
|
|
609
|
+
return (<WalletContext.Provider value={contextValue}>{children}</WalletContext.Provider>);
|
|
740
610
|
}
|
|
741
|
-
export function WalletContextProvider(
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
slushWalletConfig: { appName: appName },
|
|
752
|
-
});
|
|
753
|
-
}, [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]);
|
|
754
621
|
return (<DAppKitProvider dAppKit={dAppKitInstance}>
|
|
755
|
-
|
|
756
|
-
|
|
622
|
+
<Inner appName={appName}>{children}</Inner>
|
|
623
|
+
</DAppKitProvider>);
|
|
757
624
|
}
|