@earthworm/wallet-sdk 0.2.1 → 0.2.3
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 +55 -5
- package/dist/account-sync-77HMBIWC.js +2 -0
- package/dist/chunk-BUZ26NFL.js +48 -0
- package/dist/chunk-TPFOHQNS.js +40 -0
- package/dist/chunk-Z2EMFRMV.js +1065 -0
- package/dist/index.d.ts +453 -243
- package/dist/index.js +150 -686
- package/dist/network-WJN3S7KB.js +2 -0
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,26 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const decimal = Number.parseInt(chainId, 16);
|
|
6
|
-
if (Number.isFinite(decimal)) return decimal;
|
|
7
|
-
if (fallback !== void 0) return fallback;
|
|
8
|
-
return Number.NaN;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// src/utils/env.ts
|
|
12
|
-
var isBrowser = typeof window !== "undefined";
|
|
13
|
-
function assertBrowser(apiName) {
|
|
14
|
-
if (!isBrowser) {
|
|
15
|
-
throw new Error(`[wallet-sdk] ${apiName} is only available in the browser`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
export { applyWalletAccountsChangedEffect } from './chunk-BUZ26NFL.js';
|
|
2
|
+
export { ensureTargetNetwork, switchToConfiguredNetwork } from './chunk-TPFOHQNS.js';
|
|
3
|
+
import { isBrowser } from './chunk-Z2EMFRMV.js';
|
|
4
|
+
export { BSC_NETWORK, BSC_TESTNET_NETWORK, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, SUPPORTED_BSC_CHAIN_IDS, USDT_CONFIG, WalletEvents, assertBrowser, bindBrowserProvider, bindWalletProvider, clearJsonRpcReadProviderCache, clearWalletRuntime, connectWallet, connectWalletAccount, createJsonRpcReadProvider, disconnectWallet, emitWalletEvent, getActiveWalletKey, getConfiguredReadProvider, getConnectedAddress, getContractDecimals, getContractPrice, getReadProviderWithFallback, getSelectedWalletProvider, getSharedBrowserProvider, getWalletAccounts, getWalletBrowserProvider, getWalletEventProvider, getWalletSdkConfig, getWalletSigner, hasDeployedContract, initWalletSdk, isBrowser, isContractDeployed, isWalletConnected, isWalletSdkInitialized, normalizeSupportedBscChainId, readConfiguredUsdtDecimals, readErc20Balance, readErc20Decimals, readUsdtBalance, refreshWalletAccounts, refreshWalletReadProvider, requestWallet, resetWalletSdkConfig, resolveChainConfig, resolveWalletKey, setWalletEventProvider, setWalletReadProvider, switchWalletAccount, syncConnectedWalletAccount, syncWalletAccountAddress, syncWalletRuntimeProvider, toChainIdDecimal, walletEvents } from './chunk-Z2EMFRMV.js';
|
|
18
5
|
|
|
19
6
|
// src/wallet/eip6963.ts
|
|
20
|
-
var
|
|
21
|
-
var
|
|
7
|
+
var EIP6963_ANNOUNCE = "eip6963:announceProvider";
|
|
8
|
+
var EIP6963_REQUEST = "eip6963:requestProvider";
|
|
9
|
+
var TIP6963_ANNOUNCE = "TIP6963:announceProvider";
|
|
10
|
+
var TIP6963_REQUEST = "TIP6963:requestProvider";
|
|
11
|
+
var Wallet6963Name = /* @__PURE__ */ ((Wallet6963Name2) => {
|
|
12
|
+
Wallet6963Name2["MetaMask"] = "metamask";
|
|
13
|
+
Wallet6963Name2["Coinbase"] = "coinbase";
|
|
14
|
+
Wallet6963Name2["TokenPocket"] = "tokenpocket";
|
|
15
|
+
Wallet6963Name2["TronLink"] = "tronlink";
|
|
16
|
+
return Wallet6963Name2;
|
|
17
|
+
})(Wallet6963Name || {});
|
|
18
|
+
var Wallet6963Rdns = /* @__PURE__ */ ((Wallet6963Rdns2) => {
|
|
19
|
+
Wallet6963Rdns2["MetaMask"] = "io.metamask";
|
|
20
|
+
Wallet6963Rdns2["Coinbase"] = "com.coinbase.wallet";
|
|
21
|
+
Wallet6963Rdns2["TokenPocket"] = "com.tokenpocket";
|
|
22
|
+
Wallet6963Rdns2["TronLink"] = "org.tronlink.www";
|
|
23
|
+
Wallet6963Rdns2["TronLinkAlt"] = "io.tronlink";
|
|
24
|
+
return Wallet6963Rdns2;
|
|
25
|
+
})(Wallet6963Rdns || {});
|
|
26
|
+
function normalizeWalletName(name) {
|
|
27
|
+
return name.toLowerCase();
|
|
28
|
+
}
|
|
29
|
+
function matchExactWalletName(name, walletName) {
|
|
30
|
+
return normalizeWalletName(name) === walletName;
|
|
31
|
+
}
|
|
32
|
+
function matchIncludesWalletName(name, walletName) {
|
|
33
|
+
return normalizeWalletName(name).includes(walletName);
|
|
34
|
+
}
|
|
35
|
+
var WALLET_6963_MATCHERS = {
|
|
36
|
+
metamask: {
|
|
37
|
+
rdns: ["io.metamask" /* MetaMask */],
|
|
38
|
+
matchName: (name) => matchExactWalletName(name, "metamask" /* MetaMask */)
|
|
39
|
+
},
|
|
40
|
+
coinbase: {
|
|
41
|
+
rdns: ["com.coinbase.wallet" /* Coinbase */],
|
|
42
|
+
matchName: (name) => matchIncludesWalletName(name, "coinbase" /* Coinbase */)
|
|
43
|
+
},
|
|
44
|
+
tokenpocket: {
|
|
45
|
+
rdns: ["com.tokenpocket" /* TokenPocket */],
|
|
46
|
+
matchName: (name) => matchIncludesWalletName(name, "tokenpocket" /* TokenPocket */)
|
|
47
|
+
},
|
|
48
|
+
tronlink: {
|
|
49
|
+
rdns: ["org.tronlink.www" /* TronLink */, "io.tronlink" /* TronLinkAlt */],
|
|
50
|
+
matchName: (name) => matchIncludesWalletName(name, "tronlink" /* TronLink */)
|
|
51
|
+
}
|
|
52
|
+
};
|
|
22
53
|
var discoveredProviders = [];
|
|
23
54
|
var discoveryPromise = null;
|
|
55
|
+
function getProviderDedupKey(detail) {
|
|
56
|
+
const rdns = detail.info.rdns?.trim().toLowerCase();
|
|
57
|
+
if (rdns) {
|
|
58
|
+
return `rdns:${rdns}`;
|
|
59
|
+
}
|
|
60
|
+
return `name:${normalizeWalletName(detail.info.name)}`;
|
|
61
|
+
}
|
|
62
|
+
function collectProviderDetail(providers, detail) {
|
|
63
|
+
if (!detail?.provider) return;
|
|
64
|
+
if (providers.some((item) => item.info.uuid === detail.info.uuid)) return;
|
|
65
|
+
const dedupKey = getProviderDedupKey(detail);
|
|
66
|
+
if (providers.some((item) => getProviderDedupKey(item) === dedupKey)) return;
|
|
67
|
+
providers.push(detail);
|
|
68
|
+
}
|
|
69
|
+
function matchesWallet6963(detail, matcher) {
|
|
70
|
+
const rdns = detail.info.rdns.toLowerCase();
|
|
71
|
+
return matcher.rdns.includes(rdns) || matcher.matchName(detail.info.name);
|
|
72
|
+
}
|
|
73
|
+
function defineWallet6963Provider(matcher) {
|
|
74
|
+
const find = () => findDiscoveredProvider((detail) => matchesWallet6963(detail, matcher));
|
|
75
|
+
const has = () => Boolean(find());
|
|
76
|
+
return { find, has };
|
|
77
|
+
}
|
|
78
|
+
var metamask6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.metamask);
|
|
79
|
+
var coinbase6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.coinbase);
|
|
80
|
+
var tokenPocket6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.tokenpocket);
|
|
81
|
+
var tronLink6963 = defineWallet6963Provider(WALLET_6963_MATCHERS.tronlink);
|
|
24
82
|
function discoverWalletProviders(timeoutMs = 500) {
|
|
25
83
|
if (!isBrowser) {
|
|
26
84
|
return Promise.resolve([]);
|
|
@@ -31,50 +89,35 @@ function discoverWalletProviders(timeoutMs = 500) {
|
|
|
31
89
|
discoveryPromise = new Promise((resolve) => {
|
|
32
90
|
const providers = [];
|
|
33
91
|
const onAnnounce = (event) => {
|
|
34
|
-
|
|
35
|
-
if (!detail?.provider) return;
|
|
36
|
-
if (providers.some((item) => item.info.uuid === detail.info.uuid)) return;
|
|
37
|
-
providers.push(detail);
|
|
92
|
+
collectProviderDetail(providers, event.detail);
|
|
38
93
|
};
|
|
39
|
-
window.addEventListener(
|
|
40
|
-
window.
|
|
94
|
+
window.addEventListener(EIP6963_ANNOUNCE, onAnnounce);
|
|
95
|
+
window.addEventListener(TIP6963_ANNOUNCE, onAnnounce);
|
|
96
|
+
window.dispatchEvent(new Event(EIP6963_REQUEST));
|
|
97
|
+
window.dispatchEvent(new Event(TIP6963_REQUEST));
|
|
41
98
|
window.setTimeout(() => {
|
|
42
|
-
window.removeEventListener(
|
|
99
|
+
window.removeEventListener(EIP6963_ANNOUNCE, onAnnounce);
|
|
100
|
+
window.removeEventListener(TIP6963_ANNOUNCE, onAnnounce);
|
|
43
101
|
discoveredProviders = providers;
|
|
44
102
|
resolve(providers);
|
|
45
103
|
}, timeoutMs);
|
|
46
104
|
});
|
|
47
105
|
return discoveryPromise;
|
|
48
106
|
}
|
|
107
|
+
if (isBrowser) {
|
|
108
|
+
void discoverWalletProviders();
|
|
109
|
+
}
|
|
49
110
|
function findDiscoveredProvider(match) {
|
|
50
111
|
return discoveredProviders.find(match)?.provider;
|
|
51
112
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
function hasMetaMaskEip6963Provider() {
|
|
63
|
-
return Boolean(findMetaMaskEip6963Provider());
|
|
64
|
-
}
|
|
65
|
-
function hasCoinbaseEip6963Provider() {
|
|
66
|
-
return Boolean(findCoinbaseEip6963Provider());
|
|
67
|
-
}
|
|
68
|
-
var providerCache = /* @__PURE__ */ new WeakMap();
|
|
69
|
-
function getSharedBrowserProvider(ethereum) {
|
|
70
|
-
const cached = providerCache.get(ethereum);
|
|
71
|
-
if (cached) {
|
|
72
|
-
return cached;
|
|
73
|
-
}
|
|
74
|
-
const provider = new BrowserProvider(ethereum);
|
|
75
|
-
providerCache.set(ethereum, provider);
|
|
76
|
-
return provider;
|
|
77
|
-
}
|
|
113
|
+
var findMetaMaskEip6963Provider = metamask6963.find;
|
|
114
|
+
var findCoinbaseEip6963Provider = coinbase6963.find;
|
|
115
|
+
var findTokenPocketEip6963Provider = tokenPocket6963.find;
|
|
116
|
+
var findTronLinkEip6963Provider = tronLink6963.find;
|
|
117
|
+
var hasMetaMaskEip6963Provider = metamask6963.has;
|
|
118
|
+
var hasCoinbaseEip6963Provider = coinbase6963.has;
|
|
119
|
+
var hasTokenPocketEip6963Provider = tokenPocket6963.has;
|
|
120
|
+
var hasTronLinkEip6963Provider = tronLink6963.has;
|
|
78
121
|
|
|
79
122
|
// src/wallet/injected-providers.ts
|
|
80
123
|
var isRequestableProvider = (provider) => {
|
|
@@ -90,12 +133,15 @@ function getInjectedEthereumProviders() {
|
|
|
90
133
|
}
|
|
91
134
|
var isMetaMaskLikeProvider = (provider) => {
|
|
92
135
|
return Boolean(
|
|
93
|
-
provider.isMetaMask && !provider.isCoinbaseWallet && !provider.isTronLink && !provider.isTronLinkWallet
|
|
136
|
+
provider.isMetaMask && !provider.isCoinbaseWallet && !provider.isTokenPocket && !provider.isTronLink && !provider.isTronLinkWallet
|
|
94
137
|
);
|
|
95
138
|
};
|
|
96
139
|
var isCoinbaseLikeProvider = (provider) => {
|
|
97
140
|
return Boolean(provider.isCoinbaseWallet && !provider.isTronLink && !provider.isTronLinkWallet);
|
|
98
141
|
};
|
|
142
|
+
var isTokenPocketLikeProvider = (provider) => {
|
|
143
|
+
return Boolean(provider.isTokenPocket && !provider.isTronLink && !provider.isTronLinkWallet);
|
|
144
|
+
};
|
|
99
145
|
var isTronLinkLikeProvider = (provider) => {
|
|
100
146
|
return Boolean(provider.isTronLink || provider.isTronLinkWallet);
|
|
101
147
|
};
|
|
@@ -163,6 +209,45 @@ function resolveCoinbaseInjectedProvider() {
|
|
|
163
209
|
}
|
|
164
210
|
return void 0;
|
|
165
211
|
}
|
|
212
|
+
function resolveTokenPocketInjectedProvider() {
|
|
213
|
+
if (isRequestableProvider(window.tokenpocket?.ethereum)) {
|
|
214
|
+
return window.tokenpocket.ethereum;
|
|
215
|
+
}
|
|
216
|
+
const fromEip6963 = findTokenPocketEip6963Provider();
|
|
217
|
+
if (fromEip6963 && isRequestableProvider(fromEip6963)) {
|
|
218
|
+
return fromEip6963;
|
|
219
|
+
}
|
|
220
|
+
const fromProviders = getInjectedEthereumProviders().find(isTokenPocketLikeProvider);
|
|
221
|
+
if (fromProviders) {
|
|
222
|
+
return fromProviders;
|
|
223
|
+
}
|
|
224
|
+
const ethereum = window.ethereum;
|
|
225
|
+
if (ethereum && isTokenPocketLikeProvider(ethereum)) {
|
|
226
|
+
return ethereum;
|
|
227
|
+
}
|
|
228
|
+
return void 0;
|
|
229
|
+
}
|
|
230
|
+
function resolveTronLinkInjectedProvider() {
|
|
231
|
+
const fromEip6963 = findTronLinkEip6963Provider();
|
|
232
|
+
if (fromEip6963 && isRequestableProvider(fromEip6963)) {
|
|
233
|
+
return fromEip6963;
|
|
234
|
+
}
|
|
235
|
+
const ethereum = window.ethereum;
|
|
236
|
+
const fromProviders = getInjectedEthereumProviders().find(isTronLinkLikeProvider);
|
|
237
|
+
if (fromProviders) {
|
|
238
|
+
return fromProviders;
|
|
239
|
+
}
|
|
240
|
+
if (ethereum && isTronLinkLikeProvider(ethereum)) {
|
|
241
|
+
return ethereum;
|
|
242
|
+
}
|
|
243
|
+
if (isRequestableProvider(window.tronLink)) {
|
|
244
|
+
return window.tronLink;
|
|
245
|
+
}
|
|
246
|
+
if (isRequestableProvider(window.tron)) {
|
|
247
|
+
return window.tron;
|
|
248
|
+
}
|
|
249
|
+
return void 0;
|
|
250
|
+
}
|
|
166
251
|
function hasMetaMaskInjectedProvider() {
|
|
167
252
|
return Boolean(resolveMetaMaskInjectedProvider());
|
|
168
253
|
}
|
|
@@ -171,6 +256,12 @@ function hasCoinbaseInjectedProvider() {
|
|
|
171
256
|
window.coinbaseWalletExtension || window.coinbaseWalletRequestProvider || window.coinbaseSolana || resolveCoinbaseInjectedProvider()
|
|
172
257
|
);
|
|
173
258
|
}
|
|
259
|
+
function hasTokenPocketInjectedProvider() {
|
|
260
|
+
return Boolean(resolveTokenPocketInjectedProvider());
|
|
261
|
+
}
|
|
262
|
+
function hasTronLinkInjectedProvider() {
|
|
263
|
+
return Boolean(resolveTronLinkInjectedProvider());
|
|
264
|
+
}
|
|
174
265
|
var cachedAggregatorProvider;
|
|
175
266
|
var cachedAggregatorProviderCount = 0;
|
|
176
267
|
var isMultiWalletAggregator = (provider) => {
|
|
@@ -232,637 +323,6 @@ function hasAggregatedInjectedProvider() {
|
|
|
232
323
|
return isRequestableProvider(window.ethereum);
|
|
233
324
|
}
|
|
234
325
|
|
|
235
|
-
// src/abi/erc20.ts
|
|
236
|
-
var ERC20_ABI = [
|
|
237
|
-
{
|
|
238
|
-
constant: true,
|
|
239
|
-
inputs: [],
|
|
240
|
-
name: "name",
|
|
241
|
-
outputs: [
|
|
242
|
-
{
|
|
243
|
-
name: "",
|
|
244
|
-
type: "string"
|
|
245
|
-
}
|
|
246
|
-
],
|
|
247
|
-
payable: false,
|
|
248
|
-
stateMutability: "view",
|
|
249
|
-
type: "function"
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
constant: false,
|
|
253
|
-
inputs: [
|
|
254
|
-
{
|
|
255
|
-
name: "_spender",
|
|
256
|
-
type: "address"
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
name: "_value",
|
|
260
|
-
type: "uint256"
|
|
261
|
-
}
|
|
262
|
-
],
|
|
263
|
-
name: "approve",
|
|
264
|
-
outputs: [
|
|
265
|
-
{
|
|
266
|
-
name: "success",
|
|
267
|
-
type: "bool"
|
|
268
|
-
}
|
|
269
|
-
],
|
|
270
|
-
payable: false,
|
|
271
|
-
stateMutability: "nonpayable",
|
|
272
|
-
type: "function"
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
constant: true,
|
|
276
|
-
inputs: [],
|
|
277
|
-
name: "totalSupply",
|
|
278
|
-
outputs: [
|
|
279
|
-
{
|
|
280
|
-
name: "",
|
|
281
|
-
type: "uint256"
|
|
282
|
-
}
|
|
283
|
-
],
|
|
284
|
-
payable: false,
|
|
285
|
-
stateMutability: "view",
|
|
286
|
-
type: "function"
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
constant: false,
|
|
290
|
-
inputs: [
|
|
291
|
-
{
|
|
292
|
-
name: "_from",
|
|
293
|
-
type: "address"
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
name: "_to",
|
|
297
|
-
type: "address"
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
name: "_value",
|
|
301
|
-
type: "uint256"
|
|
302
|
-
}
|
|
303
|
-
],
|
|
304
|
-
name: "transferFrom",
|
|
305
|
-
outputs: [
|
|
306
|
-
{
|
|
307
|
-
name: "success",
|
|
308
|
-
type: "bool"
|
|
309
|
-
}
|
|
310
|
-
],
|
|
311
|
-
payable: false,
|
|
312
|
-
stateMutability: "nonpayable",
|
|
313
|
-
type: "function"
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
constant: true,
|
|
317
|
-
inputs: [],
|
|
318
|
-
name: "decimals",
|
|
319
|
-
outputs: [
|
|
320
|
-
{
|
|
321
|
-
name: "",
|
|
322
|
-
type: "uint8"
|
|
323
|
-
}
|
|
324
|
-
],
|
|
325
|
-
payable: false,
|
|
326
|
-
stateMutability: "view",
|
|
327
|
-
type: "function"
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
constant: false,
|
|
331
|
-
inputs: [
|
|
332
|
-
{
|
|
333
|
-
name: "_value",
|
|
334
|
-
type: "uint256"
|
|
335
|
-
}
|
|
336
|
-
],
|
|
337
|
-
name: "burn",
|
|
338
|
-
outputs: [],
|
|
339
|
-
payable: false,
|
|
340
|
-
stateMutability: "nonpayable",
|
|
341
|
-
type: "function"
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
constant: true,
|
|
345
|
-
inputs: [
|
|
346
|
-
{
|
|
347
|
-
name: "_owner",
|
|
348
|
-
type: "address"
|
|
349
|
-
}
|
|
350
|
-
],
|
|
351
|
-
name: "balanceOf",
|
|
352
|
-
outputs: [
|
|
353
|
-
{
|
|
354
|
-
name: "balance",
|
|
355
|
-
type: "uint256"
|
|
356
|
-
}
|
|
357
|
-
],
|
|
358
|
-
payable: false,
|
|
359
|
-
stateMutability: "view",
|
|
360
|
-
type: "function"
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
constant: false,
|
|
364
|
-
inputs: [
|
|
365
|
-
{
|
|
366
|
-
name: "_from",
|
|
367
|
-
type: "address"
|
|
368
|
-
},
|
|
369
|
-
{
|
|
370
|
-
name: "_value",
|
|
371
|
-
type: "uint256"
|
|
372
|
-
}
|
|
373
|
-
],
|
|
374
|
-
name: "burnFrom",
|
|
375
|
-
outputs: [],
|
|
376
|
-
payable: false,
|
|
377
|
-
stateMutability: "nonpayable",
|
|
378
|
-
type: "function"
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
constant: false,
|
|
382
|
-
inputs: [
|
|
383
|
-
{
|
|
384
|
-
name: "_to",
|
|
385
|
-
type: "address[]"
|
|
386
|
-
},
|
|
387
|
-
{
|
|
388
|
-
name: "_value",
|
|
389
|
-
type: "uint256[]"
|
|
390
|
-
}
|
|
391
|
-
],
|
|
392
|
-
name: "transferArray",
|
|
393
|
-
outputs: [],
|
|
394
|
-
payable: false,
|
|
395
|
-
stateMutability: "nonpayable",
|
|
396
|
-
type: "function"
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
constant: true,
|
|
400
|
-
inputs: [],
|
|
401
|
-
name: "symbol",
|
|
402
|
-
outputs: [
|
|
403
|
-
{
|
|
404
|
-
name: "",
|
|
405
|
-
type: "string"
|
|
406
|
-
}
|
|
407
|
-
],
|
|
408
|
-
payable: false,
|
|
409
|
-
stateMutability: "view",
|
|
410
|
-
type: "function"
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
constant: false,
|
|
414
|
-
inputs: [
|
|
415
|
-
{
|
|
416
|
-
name: "_to",
|
|
417
|
-
type: "address"
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
name: "_value",
|
|
421
|
-
type: "uint256"
|
|
422
|
-
}
|
|
423
|
-
],
|
|
424
|
-
name: "transfer",
|
|
425
|
-
outputs: [
|
|
426
|
-
{
|
|
427
|
-
name: "success",
|
|
428
|
-
type: "bool"
|
|
429
|
-
}
|
|
430
|
-
],
|
|
431
|
-
payable: false,
|
|
432
|
-
stateMutability: "nonpayable",
|
|
433
|
-
type: "function"
|
|
434
|
-
},
|
|
435
|
-
{
|
|
436
|
-
constant: true,
|
|
437
|
-
inputs: [
|
|
438
|
-
{
|
|
439
|
-
name: "_owner",
|
|
440
|
-
type: "address"
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
name: "_spender",
|
|
444
|
-
type: "address"
|
|
445
|
-
}
|
|
446
|
-
],
|
|
447
|
-
name: "allowance",
|
|
448
|
-
outputs: [
|
|
449
|
-
{
|
|
450
|
-
name: "remaining",
|
|
451
|
-
type: "uint256"
|
|
452
|
-
}
|
|
453
|
-
],
|
|
454
|
-
payable: false,
|
|
455
|
-
stateMutability: "view",
|
|
456
|
-
type: "function"
|
|
457
|
-
},
|
|
458
|
-
{
|
|
459
|
-
inputs: [
|
|
460
|
-
{
|
|
461
|
-
name: "_tokenName",
|
|
462
|
-
type: "string"
|
|
463
|
-
},
|
|
464
|
-
{
|
|
465
|
-
name: "_tokenSymbol",
|
|
466
|
-
type: "string"
|
|
467
|
-
},
|
|
468
|
-
{
|
|
469
|
-
name: "_decimalUnits",
|
|
470
|
-
type: "uint8"
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
name: "_initialAmount",
|
|
474
|
-
type: "uint256"
|
|
475
|
-
}
|
|
476
|
-
],
|
|
477
|
-
payable: false,
|
|
478
|
-
stateMutability: "nonpayable",
|
|
479
|
-
type: "constructor"
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
anonymous: false,
|
|
483
|
-
inputs: [
|
|
484
|
-
{
|
|
485
|
-
indexed: true,
|
|
486
|
-
name: "from",
|
|
487
|
-
type: "address"
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
indexed: true,
|
|
491
|
-
name: "to",
|
|
492
|
-
type: "address"
|
|
493
|
-
},
|
|
494
|
-
{
|
|
495
|
-
indexed: false,
|
|
496
|
-
name: "value",
|
|
497
|
-
type: "uint256"
|
|
498
|
-
}
|
|
499
|
-
],
|
|
500
|
-
name: "Transfer",
|
|
501
|
-
type: "event"
|
|
502
|
-
},
|
|
503
|
-
{
|
|
504
|
-
anonymous: false,
|
|
505
|
-
inputs: [
|
|
506
|
-
{
|
|
507
|
-
indexed: true,
|
|
508
|
-
name: "owner",
|
|
509
|
-
type: "address"
|
|
510
|
-
},
|
|
511
|
-
{
|
|
512
|
-
indexed: true,
|
|
513
|
-
name: "spender",
|
|
514
|
-
type: "address"
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
indexed: false,
|
|
518
|
-
name: "value",
|
|
519
|
-
type: "uint256"
|
|
520
|
-
}
|
|
521
|
-
],
|
|
522
|
-
name: "Approval",
|
|
523
|
-
type: "event"
|
|
524
|
-
}
|
|
525
|
-
];
|
|
526
|
-
|
|
527
|
-
// src/config/networks.ts
|
|
528
|
-
var BSC_NETWORK = {
|
|
529
|
-
chainId: "0x38",
|
|
530
|
-
chainName: "BNB Smart Chain",
|
|
531
|
-
nativeCurrency: {
|
|
532
|
-
name: "BNB",
|
|
533
|
-
symbol: "BNB",
|
|
534
|
-
decimals: 18
|
|
535
|
-
},
|
|
536
|
-
rpcUrls: [
|
|
537
|
-
"https://bsc-dataseed.binance.org/",
|
|
538
|
-
"https://bsc-dataseed1.binance.org/",
|
|
539
|
-
"https://bsc-dataseed2.binance.org/"
|
|
540
|
-
],
|
|
541
|
-
blockExplorerUrls: ["https://bscscan.com"]
|
|
542
|
-
};
|
|
543
|
-
var BSC_TESTNET_NETWORK = {
|
|
544
|
-
chainId: "0x61",
|
|
545
|
-
chainName: "BNB Smart Chain Testnet",
|
|
546
|
-
nativeCurrency: {
|
|
547
|
-
name: "tBNB",
|
|
548
|
-
symbol: "tBNB",
|
|
549
|
-
decimals: 18
|
|
550
|
-
},
|
|
551
|
-
rpcUrls: [
|
|
552
|
-
"https://data-seed-prebsc-1-s1.bnbchain.org:8545/",
|
|
553
|
-
"https://data-seed-prebsc-2-s1.bnbchain.org:8545/",
|
|
554
|
-
"https://data-seed-prebsc-1-s2.bnbchain.org:8545/"
|
|
555
|
-
],
|
|
556
|
-
blockExplorerUrls: ["https://testnet.bscscan.com"]
|
|
557
|
-
};
|
|
558
|
-
|
|
559
|
-
// src/config/resolve-chain.ts
|
|
560
|
-
var USDT_CONTRACT_ADDRESSES = {
|
|
561
|
-
[BSC_NETWORK.chainId]: "0x55d398326f99059fF775485246999027B3197955",
|
|
562
|
-
[BSC_TESTNET_NETWORK.chainId]: "0x66E972502A34A625828C544a1914E8D8cc2A9dE5"
|
|
563
|
-
};
|
|
564
|
-
function resolveUsdtContractAddress(chainId) {
|
|
565
|
-
const address = USDT_CONTRACT_ADDRESSES[chainId];
|
|
566
|
-
if (!address) {
|
|
567
|
-
throw new Error(`[wallet-sdk] Unsupported chainId for USDT: ${chainId}`);
|
|
568
|
-
}
|
|
569
|
-
return address;
|
|
570
|
-
}
|
|
571
|
-
function resolveChainByMainnet(isMainnet) {
|
|
572
|
-
return isMainnet ? BSC_NETWORK : BSC_TESTNET_NETWORK;
|
|
573
|
-
}
|
|
574
|
-
function resolveUsdtByMainnet(isMainnet) {
|
|
575
|
-
return resolveUsdtContractAddress(resolveChainByMainnet(isMainnet).chainId);
|
|
576
|
-
}
|
|
577
|
-
function resolveChainConfig(chainId) {
|
|
578
|
-
if (chainId === BSC_NETWORK.chainId) {
|
|
579
|
-
return BSC_NETWORK;
|
|
580
|
-
}
|
|
581
|
-
if (chainId === BSC_TESTNET_NETWORK.chainId) {
|
|
582
|
-
return BSC_TESTNET_NETWORK;
|
|
583
|
-
}
|
|
584
|
-
throw new Error(`[wallet-sdk] Unsupported chainId: ${chainId}`);
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
// src/config/usdt.ts
|
|
588
|
-
var USDT_CONFIG = {
|
|
589
|
-
symbol: "USDT",
|
|
590
|
-
name: "Tether USD",
|
|
591
|
-
decimals: 18,
|
|
592
|
-
contractAbi: ERC20_ABI
|
|
593
|
-
};
|
|
594
|
-
var ERC20_DECIMALS = USDT_CONFIG.decimals;
|
|
595
|
-
|
|
596
|
-
// src/core/contract.ts
|
|
597
|
-
var ERC20_DECIMALS_ABI = ["function decimals() view returns (uint8)"];
|
|
598
|
-
async function hasDeployedContract(readProvider, address) {
|
|
599
|
-
const code = await readProvider.getCode(address);
|
|
600
|
-
return Boolean(code && code !== "0x");
|
|
601
|
-
}
|
|
602
|
-
async function readErc20Decimals(readProvider, tokenAddress, erc20Abi = ERC20_DECIMALS_ABI, fallback = ERC20_DECIMALS) {
|
|
603
|
-
if (!await hasDeployedContract(readProvider, tokenAddress)) {
|
|
604
|
-
throw new Error(`[wallet-sdk] Token contract not deployed: ${tokenAddress}`);
|
|
605
|
-
}
|
|
606
|
-
try {
|
|
607
|
-
const tokenContract = new Contract(tokenAddress, erc20Abi, readProvider);
|
|
608
|
-
const decimals = Number(await tokenContract.getFunction("decimals").staticCall());
|
|
609
|
-
return Number.isFinite(decimals) && decimals >= 0 ? decimals : fallback;
|
|
610
|
-
} catch {
|
|
611
|
-
return fallback;
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
// src/core/init.ts
|
|
616
|
-
var CONFIG_KEY = "__WALLET_SDK_CONFIG__";
|
|
617
|
-
function getStoredConfig() {
|
|
618
|
-
return globalThis[CONFIG_KEY] ?? null;
|
|
619
|
-
}
|
|
620
|
-
function storeConfig(config) {
|
|
621
|
-
globalThis[CONFIG_KEY] = config;
|
|
622
|
-
}
|
|
623
|
-
function buildConfig(options) {
|
|
624
|
-
const chain = resolveChainByMainnet(options.isMainnet);
|
|
625
|
-
return {
|
|
626
|
-
isMainnet: options.isMainnet,
|
|
627
|
-
chainId: chain.chainId,
|
|
628
|
-
chain,
|
|
629
|
-
contract: {
|
|
630
|
-
address: options.contract.address,
|
|
631
|
-
abi: options.contract.abi
|
|
632
|
-
},
|
|
633
|
-
usdt: {
|
|
634
|
-
address: resolveUsdtByMainnet(options.isMainnet),
|
|
635
|
-
abi: USDT_CONFIG.contractAbi,
|
|
636
|
-
symbol: USDT_CONFIG.symbol,
|
|
637
|
-
name: USDT_CONFIG.name,
|
|
638
|
-
decimals: USDT_CONFIG.decimals
|
|
639
|
-
}
|
|
640
|
-
};
|
|
641
|
-
}
|
|
642
|
-
function initWalletSdk(options) {
|
|
643
|
-
const config = buildConfig(options);
|
|
644
|
-
storeConfig(config);
|
|
645
|
-
return config;
|
|
646
|
-
}
|
|
647
|
-
function getWalletSdkConfig() {
|
|
648
|
-
const config = getStoredConfig();
|
|
649
|
-
if (!config) {
|
|
650
|
-
throw new Error("[wallet-sdk] initWalletSdk() must be called before using the library");
|
|
651
|
-
}
|
|
652
|
-
return config;
|
|
653
|
-
}
|
|
654
|
-
function isWalletSdkInitialized() {
|
|
655
|
-
return getStoredConfig() !== null;
|
|
656
|
-
}
|
|
657
|
-
function resetWalletSdkConfig() {
|
|
658
|
-
delete globalThis[CONFIG_KEY];
|
|
659
|
-
}
|
|
660
|
-
function createJsonRpcReadProvider(rpcUrl, chainIdHex, cache) {
|
|
661
|
-
if (cache?.current) return cache.current;
|
|
662
|
-
const provider = new JsonRpcProvider(rpcUrl, toChainIdDecimal(chainIdHex), {
|
|
663
|
-
staticNetwork: true
|
|
664
|
-
});
|
|
665
|
-
if (cache) {
|
|
666
|
-
cache.current = provider;
|
|
667
|
-
}
|
|
668
|
-
return provider;
|
|
669
|
-
}
|
|
670
|
-
function getReadProviderWithFallback(walletProvider, rpcConfig, fallbackCache) {
|
|
671
|
-
if (walletProvider) return walletProvider;
|
|
672
|
-
const rpcUrl = rpcConfig.rpcUrls[0];
|
|
673
|
-
if (!rpcUrl || !rpcConfig.chainId) {
|
|
674
|
-
throw new Error("RPC config is missing");
|
|
675
|
-
}
|
|
676
|
-
return createJsonRpcReadProvider(rpcUrl, rpcConfig.chainId, fallbackCache);
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
// src/core/contract-read.ts
|
|
680
|
-
var readProviderCache = { current: null };
|
|
681
|
-
var walletReadProvider = null;
|
|
682
|
-
function setWalletReadProvider(provider) {
|
|
683
|
-
walletReadProvider = provider;
|
|
684
|
-
}
|
|
685
|
-
function getConfiguredReadProvider() {
|
|
686
|
-
const { chain } = getWalletSdkConfig();
|
|
687
|
-
return getReadProviderWithFallback(walletReadProvider, chain, readProviderCache);
|
|
688
|
-
}
|
|
689
|
-
async function isContractDeployed(contractAddress) {
|
|
690
|
-
return hasDeployedContract(getConfiguredReadProvider(), contractAddress);
|
|
691
|
-
}
|
|
692
|
-
async function getContractDecimals(contractAddress, options) {
|
|
693
|
-
const readProvider = getConfiguredReadProvider();
|
|
694
|
-
if (!await hasDeployedContract(readProvider, contractAddress)) {
|
|
695
|
-
throw new Error(`[wallet-sdk] Contract not deployed: ${contractAddress}`);
|
|
696
|
-
}
|
|
697
|
-
const tokenContract = new Contract(contractAddress, options.abi, readProvider);
|
|
698
|
-
const decimals = await tokenContract.getFunction(options.method).staticCall();
|
|
699
|
-
return Number(decimals);
|
|
700
|
-
}
|
|
701
|
-
async function getContractPrice(contractAddress, options) {
|
|
702
|
-
const readProvider = getConfiguredReadProvider();
|
|
703
|
-
if (!await hasDeployedContract(readProvider, contractAddress)) {
|
|
704
|
-
throw new Error(`[wallet-sdk] Contract not deployed: ${contractAddress}`);
|
|
705
|
-
}
|
|
706
|
-
const tokenContract = new Contract(contractAddress, options.abi, readProvider);
|
|
707
|
-
const price = await tokenContract.getFunction(options.method).staticCall();
|
|
708
|
-
const decimals = await getContractDecimals(contractAddress, { abi: options.abi, method: "decimals" });
|
|
709
|
-
return formatUnits(price, decimals);
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
// src/core/network.ts
|
|
713
|
-
async function ensureTargetNetwork(options) {
|
|
714
|
-
const currentChainId = await options.getCurrentChainId();
|
|
715
|
-
if (currentChainId.toLowerCase() === options.targetChainId.toLowerCase()) return;
|
|
716
|
-
try {
|
|
717
|
-
await options.switchChain(options.targetChainId);
|
|
718
|
-
} catch (err) {
|
|
719
|
-
const error = err;
|
|
720
|
-
if (error?.code !== 4902 && error?.info?.error?.code !== 4902) {
|
|
721
|
-
throw err;
|
|
722
|
-
}
|
|
723
|
-
await options.addChain(options.chainParams);
|
|
724
|
-
await options.switchChain(options.targetChainId);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
// src/wallet/common.ts
|
|
729
|
-
function bindBrowserProvider(eip1193, cache) {
|
|
730
|
-
const nextProvider = getSharedBrowserProvider(eip1193);
|
|
731
|
-
if (cache.value !== nextProvider) {
|
|
732
|
-
cache.value = nextProvider;
|
|
733
|
-
}
|
|
734
|
-
return nextProvider;
|
|
735
|
-
}
|
|
736
|
-
async function requestWallet(eip1193, method, params) {
|
|
737
|
-
return eip1193.request({
|
|
738
|
-
method,
|
|
739
|
-
...params === void 0 ? {} : { params }
|
|
740
|
-
});
|
|
741
|
-
}
|
|
742
|
-
async function connectWalletAccount(requestAccounts, getProvider, setSigner, markConnected) {
|
|
743
|
-
const accounts = await requestAccounts() || [];
|
|
744
|
-
if (!accounts.length) {
|
|
745
|
-
throw new Error("No accounts returned");
|
|
746
|
-
}
|
|
747
|
-
const sourceProvider = getProvider();
|
|
748
|
-
const nextSigner = await sourceProvider.getSigner();
|
|
749
|
-
const address = await nextSigner.getAddress();
|
|
750
|
-
setSigner(nextSigner);
|
|
751
|
-
markConnected();
|
|
752
|
-
return { address, signer: nextSigner };
|
|
753
|
-
}
|
|
754
|
-
async function syncWalletAccountAddress(getProvider, setSigner, markConnected, nextAddress) {
|
|
755
|
-
const sourceProvider = getProvider();
|
|
756
|
-
const nextSigner = nextAddress ? await sourceProvider.getSigner(nextAddress) : await sourceProvider.getSigner();
|
|
757
|
-
const address = nextAddress || await nextSigner.getAddress();
|
|
758
|
-
setSigner(nextSigner);
|
|
759
|
-
markConnected();
|
|
760
|
-
return { address, signer: nextSigner };
|
|
761
|
-
}
|
|
762
|
-
function clearWalletRuntime(cache) {
|
|
763
|
-
cache.provider.value = null;
|
|
764
|
-
cache.signer.value = null;
|
|
765
|
-
if (cache.selectedProvider) {
|
|
766
|
-
cache.selectedProvider.value = null;
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
// src/wallet/events.ts
|
|
771
|
-
var eventHandlers = {};
|
|
772
|
-
var providerBridges = /* @__PURE__ */ new WeakMap();
|
|
773
|
-
var walletEventProvider = null;
|
|
774
|
-
var boundProvider = null;
|
|
775
|
-
function hasRegisteredHandlers() {
|
|
776
|
-
return Object.values(eventHandlers).some((handlers) => handlers && handlers.size > 0);
|
|
777
|
-
}
|
|
778
|
-
function dispatch(event, payload) {
|
|
779
|
-
const handlers = eventHandlers[event];
|
|
780
|
-
if (!handlers) return;
|
|
781
|
-
for (const handler of handlers) {
|
|
782
|
-
void handler(payload);
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
function unbindProvider(provider) {
|
|
786
|
-
const bridgeHandlers = providerBridges.get(provider);
|
|
787
|
-
if (!bridgeHandlers) return;
|
|
788
|
-
for (const [event, handler] of Object.entries(bridgeHandlers)) {
|
|
789
|
-
provider.removeListener(event, handler);
|
|
790
|
-
}
|
|
791
|
-
providerBridges.delete(provider);
|
|
792
|
-
}
|
|
793
|
-
function syncProviderBinding() {
|
|
794
|
-
if (boundProvider) {
|
|
795
|
-
unbindProvider(boundProvider);
|
|
796
|
-
boundProvider = null;
|
|
797
|
-
}
|
|
798
|
-
if (!walletEventProvider || !hasRegisteredHandlers()) {
|
|
799
|
-
return;
|
|
800
|
-
}
|
|
801
|
-
const bridgeHandlers = {};
|
|
802
|
-
if (eventHandlers.accountsChanged?.size) {
|
|
803
|
-
bridgeHandlers.accountsChanged = (...args) => {
|
|
804
|
-
dispatch("accountsChanged", args[0] ?? []);
|
|
805
|
-
};
|
|
806
|
-
}
|
|
807
|
-
if (eventHandlers.chainChanged?.size) {
|
|
808
|
-
bridgeHandlers.chainChanged = (...args) => {
|
|
809
|
-
dispatch("chainChanged", String(args[0] ?? ""));
|
|
810
|
-
};
|
|
811
|
-
}
|
|
812
|
-
for (const [event, handler] of Object.entries(bridgeHandlers)) {
|
|
813
|
-
walletEventProvider.removeListener(event, handler);
|
|
814
|
-
walletEventProvider.on(event, handler);
|
|
815
|
-
}
|
|
816
|
-
providerBridges.set(walletEventProvider, bridgeHandlers);
|
|
817
|
-
boundProvider = walletEventProvider;
|
|
818
|
-
}
|
|
819
|
-
function setWalletEventProvider(provider) {
|
|
820
|
-
walletEventProvider = provider;
|
|
821
|
-
syncProviderBinding();
|
|
822
|
-
}
|
|
823
|
-
function getWalletEventProvider() {
|
|
824
|
-
if (!walletEventProvider) {
|
|
825
|
-
throw new Error("[wallet-sdk] Wallet event provider is not set");
|
|
826
|
-
}
|
|
827
|
-
return walletEventProvider;
|
|
828
|
-
}
|
|
829
|
-
function registerEvent(event, listener) {
|
|
830
|
-
assertBrowser("walletEvents.on");
|
|
831
|
-
if (!eventHandlers[event]) {
|
|
832
|
-
eventHandlers[event] = /* @__PURE__ */ new Set();
|
|
833
|
-
}
|
|
834
|
-
eventHandlers[event].add(listener);
|
|
835
|
-
syncProviderBinding();
|
|
836
|
-
}
|
|
837
|
-
function unregisterEvent(event, listener) {
|
|
838
|
-
if (!isBrowser) return;
|
|
839
|
-
if (listener) {
|
|
840
|
-
eventHandlers[event]?.delete(listener);
|
|
841
|
-
} else {
|
|
842
|
-
eventHandlers[event]?.clear();
|
|
843
|
-
}
|
|
844
|
-
syncProviderBinding();
|
|
845
|
-
}
|
|
846
|
-
function clearEvents() {
|
|
847
|
-
if (!isBrowser) return;
|
|
848
|
-
for (const event of Object.keys(eventHandlers)) {
|
|
849
|
-
eventHandlers[event]?.clear();
|
|
850
|
-
}
|
|
851
|
-
syncProviderBinding();
|
|
852
|
-
}
|
|
853
|
-
var WalletEventsEmitter = class {
|
|
854
|
-
on(event, listener) {
|
|
855
|
-
registerEvent(event, listener);
|
|
856
|
-
}
|
|
857
|
-
off(event, listener) {
|
|
858
|
-
unregisterEvent(event, listener);
|
|
859
|
-
}
|
|
860
|
-
clear() {
|
|
861
|
-
clearEvents();
|
|
862
|
-
}
|
|
863
|
-
};
|
|
864
|
-
var walletEvents = new WalletEventsEmitter();
|
|
865
|
-
|
|
866
326
|
// src/wallet/detection.ts
|
|
867
327
|
function isEthereumProvider() {
|
|
868
328
|
if (!isBrowser) return false;
|
|
@@ -872,13 +332,17 @@ function isCoinbaseProvider() {
|
|
|
872
332
|
if (!isBrowser) return false;
|
|
873
333
|
return hasCoinbaseInjectedProvider();
|
|
874
334
|
}
|
|
335
|
+
function isTokenPocketProvider() {
|
|
336
|
+
if (!isBrowser) return false;
|
|
337
|
+
return hasTokenPocketInjectedProvider() || hasTokenPocketEip6963Provider();
|
|
338
|
+
}
|
|
875
339
|
function isInjectedProvider() {
|
|
876
340
|
if (!isBrowser) return false;
|
|
877
341
|
return hasAggregatedInjectedProvider();
|
|
878
342
|
}
|
|
879
343
|
function isTronLinkProvider() {
|
|
880
344
|
if (!isBrowser) return false;
|
|
881
|
-
return
|
|
345
|
+
return hasTronLinkInjectedProvider() || hasTronLinkEip6963Provider();
|
|
882
346
|
}
|
|
883
347
|
|
|
884
|
-
export {
|
|
348
|
+
export { Wallet6963Name, Wallet6963Rdns, discoverWalletProviders, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, findTokenPocketEip6963Provider, findTronLinkEip6963Provider, getAggregatedInjectedProvider, getInjectedEthereumProviders, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, hasTokenPocketEip6963Provider, hasTokenPocketInjectedProvider, hasTronLinkEip6963Provider, hasTronLinkInjectedProvider, isCoinbaseProvider, isEthereumProvider, isInjectedProvider, isTokenPocketProvider, isTronLinkProvider, rememberAggregatorProvider, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveTokenPocketInjectedProvider, resolveTronLinkInjectedProvider };
|