@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/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as ethers from 'ethers';
2
- import { InterfaceAbi, Eip1193Provider, BrowserProvider, JsonRpcProvider, JsonRpcSigner } from 'ethers';
2
+ import { Eip1193Provider, BrowserProvider, JsonRpcProvider, InterfaceAbi, JsonRpcSigner } from 'ethers';
3
3
 
4
4
  /**
5
- * EVM 十六进制 chainId 转换为十进制 chainId。
6
- * 钱包 `chainChanged` / `eth_chainId` 返回的通常是 `0x` 前缀 hex 字符串。
7
- * @param chainId - 十六进制 chainId,如 `"0x38"`(56)或 `"0x61"`(97)。
8
- * @param fallback - 解析失败时的回退值;未传则返回 `NaN`。
9
- * @returns 十进制 chainId 数值,或 `fallback` / `NaN`。
5
+ * @en Convert hex chainId to decimal.
6
+ * @zh 将十六进制 chainId 转为十进制。
7
+ * @param {string} chainId @en Hex chainId, e.g. `"0x38"`. @zh 十六进制 chainId,如 `"0x38"`。
8
+ * @param {number} [fallback] @en Fallback when parse fails. @zh 解析失败时的回退值。
9
+ * @returns @en Decimal chainId or fallback / `NaN`. @zh 十进制 chainId 或回退值 / `NaN`。
10
10
  */
11
11
  declare function toChainIdDecimal(chainId: string, fallback?: number): number;
12
12
 
@@ -20,6 +20,7 @@ type WalletEventProvider = Eip1193Provider & {
20
20
  type InjectedEthereumProvider = WalletEventProvider & {
21
21
  isMetaMask?: boolean;
22
22
  isCoinbaseWallet?: boolean;
23
+ isTokenPocket?: boolean;
23
24
  isTronLink?: boolean;
24
25
  isTronLinkWallet?: boolean;
25
26
  providers?: InjectedEthereumProvider[];
@@ -35,8 +36,10 @@ type ChainNativeCurrency = {
35
36
  symbol: string;
36
37
  decimals: number;
37
38
  };
39
+ /** @en Supported BSC chain IDs: mainnet `0x38`, testnet `0x61`. @zh 支持的 BSC chainId:主网 `0x38`、测试网 `0x61`。 */
40
+ type SupportedBscChainId = "0x38" | "0x61";
38
41
  type ChainConfig = {
39
- chainId: string;
42
+ chainId: SupportedBscChainId;
40
43
  chainName: string;
41
44
  nativeCurrency: ChainNativeCurrency;
42
45
  rpcUrls: string[];
@@ -52,20 +55,15 @@ type Eip6963ProviderDetail = {
52
55
  info: Eip6963ProviderInfo;
53
56
  provider: Eip1193Provider;
54
57
  };
55
- type ContractConfig = {
58
+ type UsdtInitConfig = {
59
+ /** @en USDT contract address. @zh USDT 合约地址。 */
56
60
  address: string;
57
- abi: InterfaceAbi;
58
61
  };
59
62
  type WalletSdkInitOptions = {
60
- /** `true` BSC 主网,`false` BSC 测试网 */
61
- isMainnet: boolean;
62
- contract: ContractConfig;
63
+ /** @en USDT contract address (mainnet or testnet, caller decides). @zh USDT 合约地址(主网/测试网由调用方决定)。 */
64
+ usdt: UsdtInitConfig;
63
65
  };
64
66
  type WalletSdkConfig = {
65
- isMainnet: boolean;
66
- chainId: string;
67
- chain: ChainConfig;
68
- contract: ContractConfig;
69
67
  usdt: {
70
68
  address: string;
71
69
  abi: InterfaceAbi;
@@ -74,348 +72,575 @@ type WalletSdkConfig = {
74
72
  decimals: number;
75
73
  };
76
74
  };
75
+ type NetworkSwitchResult = {
76
+ chainId: SupportedBscChainId;
77
+ previousChainId: string;
78
+ /** @en `true` if switch was invoked; `false` if already on target chain. @zh `true` 已发起切链;`false` 已在目标链。 */
79
+ switched: boolean;
80
+ };
81
+ type ConnectWalletOptions = {
82
+ /** @en Switch wallet to this BSC chain after connect. @zh 连接后切换到指定 BSC 链。 */
83
+ chainId?: SupportedBscChainId;
84
+ };
77
85
 
86
+ declare enum Wallet6963Name {
87
+ MetaMask = "metamask",
88
+ Coinbase = "coinbase",
89
+ TokenPocket = "tokenpocket",
90
+ TronLink = "tronlink"
91
+ }
92
+ declare enum Wallet6963Rdns {
93
+ MetaMask = "io.metamask",
94
+ Coinbase = "com.coinbase.wallet",
95
+ TokenPocket = "com.tokenpocket",
96
+ /** @en TronLink browser extension rdns. @zh TronLink 浏览器扩展 rdns。 */
97
+ TronLink = "org.tronlink.www",
98
+ /** @en TronLink App WebView rdns. @zh TronLink App 内置 WebView rdns。 */
99
+ TronLinkAlt = "io.tronlink"
100
+ }
78
101
  /**
79
- * 通过 EIP-6963 发现并收集浏览器中的钱包 provider。
80
- * 非浏览器环境直接返回空数组;多次调用共享同一次发现结果。
81
- * @param timeoutMs - 等待 `eip6963:announceProvider` 的超时毫秒数,默认 `500`。
82
- * @returns 已发现的 {@link Eip6963ProviderDetail} 列表。
102
+ * @en Discover wallet providers via EIP-6963 / TIP-6963.
103
+ * @zh 通过 EIP-6963 / TIP-6963 发现浏览器中的钱包 provider。
104
+ * @param {number} [timeoutMs] @en Timeout in ms, default `500`. @zh 等待 announce 的超时毫秒数,默认 `500`。
105
+ * @returns @en List of {@link Eip6963ProviderDetail}. @zh {@link Eip6963ProviderDetail} 列表。
83
106
  */
84
107
  declare function discoverWalletProviders(timeoutMs?: number): Promise<Eip6963ProviderDetail[]>;
85
108
  /**
86
- * 从已发现的 EIP-6963 provider 中按条件查找。
87
- * @param match - 匹配函数,入参为 {@link Eip6963ProviderDetail}。
88
- * @returns 匹配到的 EIP-1193 provider;未找到为 `undefined`。
109
+ * @en Find a provider from discovered EIP-6963 providers.
110
+ * @zh 从已发现的 EIP-6963 provider 中按条件查找。
111
+ * @param {(detail: Eip6963ProviderDetail) => boolean} match @en Match function. @zh 匹配函数。
112
+ * @returns @en EIP-1193 provider or `undefined`. @zh EIP-1193 provider 或 `undefined`。
89
113
  */
90
114
  declare function findDiscoveredProvider(match: (detail: Eip6963ProviderDetail) => boolean): ethers.Eip1193Provider | undefined;
91
- /**
92
- * 查找 MetaMask EIP-6963 provider。
93
- * @returns MetaMask EIP-1193 provider;未找到为 `undefined`。
94
- */
95
- declare function findMetaMaskEip6963Provider(): ethers.Eip1193Provider | undefined;
96
- /**
97
- * 查找 Coinbase Wallet 的 EIP-6963 provider。
98
- * @returns Coinbase EIP-1193 provider;未找到为 `undefined`。
99
- */
100
- declare function findCoinbaseEip6963Provider(): ethers.Eip1193Provider | undefined;
101
- /**
102
- * 是否通过 EIP-6963 检测到 MetaMask。
103
- * @returns 检测到为 `true`,否则 `false`。
104
- */
105
- declare function hasMetaMaskEip6963Provider(): boolean;
106
- /**
107
- * 是否通过 EIP-6963 检测到 Coinbase Wallet。
108
- * @returns 检测到为 `true`,否则 `false`。
109
- */
110
- declare function hasCoinbaseEip6963Provider(): boolean;
115
+ /** @en Find MetaMask EIP-6963 provider. @zh 查找 MetaMask 的 EIP-6963 provider。 */
116
+ declare const findMetaMaskEip6963Provider: () => ethers.Eip1193Provider | undefined;
117
+ /** @en Find Coinbase Wallet EIP-6963 provider. @zh 查找 Coinbase Wallet 的 EIP-6963 provider */
118
+ declare const findCoinbaseEip6963Provider: () => ethers.Eip1193Provider | undefined;
119
+ /** @en Find TokenPocket EIP-6963 provider. @zh 查找 TokenPocket 的 EIP-6963 provider。 */
120
+ declare const findTokenPocketEip6963Provider: () => ethers.Eip1193Provider | undefined;
121
+ /** @en Find TronLink EIP/TIP-6963 provider. @zh 查找 TronLink 的 EIP/TIP-6963 provider。 */
122
+ declare const findTronLinkEip6963Provider: () => ethers.Eip1193Provider | undefined;
123
+ /** @en Whether MetaMask is detected via EIP-6963. @zh 是否通过 EIP-6963 检测到 MetaMask。 */
124
+ declare const hasMetaMaskEip6963Provider: () => boolean;
125
+ /** @en Whether Coinbase Wallet is detected via EIP-6963. @zh 是否通过 EIP-6963 检测到 Coinbase Wallet。 */
126
+ declare const hasCoinbaseEip6963Provider: () => boolean;
127
+ /** @en Whether TokenPocket is detected via EIP-6963. @zh 是否通过 EIP-6963 检测到 TokenPocket。 */
128
+ declare const hasTokenPocketEip6963Provider: () => boolean;
129
+ /** @en Whether TronLink is detected via EIP/TIP-6963. @zh 是否通过 EIP/TIP-6963 检测到 TronLink。 */
130
+ declare const hasTronLinkEip6963Provider: () => boolean;
111
131
 
112
132
  /**
113
- * 获取与 EIP-1193 provider 绑定的共享 BrowserProvider(同一实例复用)。
114
- * @param ethereum - EIP-1193 provider,如 MetaMask 的 `window.ethereum`。
115
- * @returns ethers `BrowserProvider`。
133
+ * @en Get shared BrowserProvider bound to EIP-1193 provider.
134
+ * @zh 获取与 EIP-1193 provider 绑定的共享 BrowserProvider。
135
+ * @param {Eip1193Provider} ethereum @en EIP-1193 provider. @zh EIP-1193 provider。
136
+ * @returns @en ethers `BrowserProvider`. @zh ethers `BrowserProvider`。
116
137
  */
117
138
  declare function getSharedBrowserProvider(ethereum: Eip1193Provider): BrowserProvider;
118
139
 
119
140
  /**
120
- * 获取浏览器中所有 injected 以太坊 provider。
121
- * @returns {@link InjectedEthereumProvider} 数组;无 `window.ethereum` 时返回 `[]`。
141
+ * @en Get all injected Ethereum providers in the browser.
142
+ * @zh 获取浏览器中所有 injected 以太坊 provider。
143
+ * @returns @en Array of {@link InjectedEthereumProvider}. @zh {@link InjectedEthereumProvider} 数组。
122
144
  */
123
145
  declare function getInjectedEthereumProviders(): InjectedEthereumProvider[];
124
146
  /**
125
- * 解析 MetaMask injected provider(EIP-6963 → providerMap → providers 数组 → 根 ethereum)。
126
- * @returns MetaMask {@link WalletEventProvider};未找到为 `undefined`。
147
+ * @en Resolve MetaMask injected provider.
148
+ * @zh 解析 MetaMask injected provider。
149
+ * @returns @en MetaMask {@link WalletEventProvider} or `undefined`. @zh MetaMask provider 或 `undefined`。
127
150
  */
128
151
  declare function resolveMetaMaskInjectedProvider(): WalletEventProvider | undefined;
129
152
  /**
130
- * 解析 Coinbase Wallet injected provider(扩展 → EIP-6963 → providerMap → providers 数组 → 根 ethereum)。
131
- * @returns Coinbase {@link WalletEventProvider};未找到为 `undefined`。
153
+ * @en Resolve Coinbase Wallet injected provider.
154
+ * @zh 解析 Coinbase Wallet injected provider。
155
+ * @returns @en Coinbase {@link WalletEventProvider} or `undefined`. @zh Coinbase provider 或 `undefined`。
132
156
  */
133
157
  declare function resolveCoinbaseInjectedProvider(): WalletEventProvider | undefined;
134
158
  /**
135
- * 是否检测到 MetaMask injected provider
136
- * @returns 检测到为 `true`,否则 `false`。
159
+ * @en Resolve TokenPocket injected provider.
160
+ * @zh 解析 TokenPocket injected provider。
161
+ * @returns @en TokenPocket {@link WalletEventProvider} or `undefined`. @zh TokenPocket provider 或 `undefined`。
162
+ */
163
+ declare function resolveTokenPocketInjectedProvider(): WalletEventProvider | undefined;
164
+ /**
165
+ * @en Resolve TronLink injected provider.
166
+ * @zh 解析 TronLink injected provider。
167
+ * @returns @en TronLink {@link WalletEventProvider} or `undefined`. @zh TronLink provider 或 `undefined`。
168
+ */
169
+ declare function resolveTronLinkInjectedProvider(): WalletEventProvider | undefined;
170
+ /**
171
+ * @en Whether MetaMask injected provider is detected.
172
+ * @zh 是否检测到 MetaMask injected provider。
173
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
137
174
  */
138
175
  declare function hasMetaMaskInjectedProvider(): boolean;
139
176
  /**
140
- * 是否检测到 Coinbase Wallet(扩展、request provider 或 injected)。
141
- * @returns 检测到为 `true`,否则 `false`。
177
+ * @en Whether Coinbase Wallet is detected.
178
+ * @zh 是否检测到 Coinbase Wallet。
179
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
142
180
  */
143
181
  declare function hasCoinbaseInjectedProvider(): boolean;
144
182
  /**
145
- * 缓存当前可用的多钱包聚合根 provider(`ethereum.providers.length > 1`)。
146
- * 非浏览器环境无操作。
183
+ * @en Whether TokenPocket is detected.
184
+ * @zh 是否检测到 TokenPocket。
185
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
186
+ */
187
+ declare function hasTokenPocketInjectedProvider(): boolean;
188
+ /**
189
+ * @en Whether TronLink injected provider is detected.
190
+ * @zh 是否检测到 TronLink injected provider。
191
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
192
+ */
193
+ declare function hasTronLinkInjectedProvider(): boolean;
194
+ /**
195
+ * @en Cache the current multi-wallet aggregator root provider.
196
+ * @zh 缓存当前可用的多钱包聚合根 provider。
147
197
  */
148
198
  declare function rememberAggregatorProvider(): void;
149
199
  /**
150
- * 是否存在可恢复的多钱包聚合 provider(当前页面或历史缓存)。
151
- * @returns 存在为 `true`,否则 `false`。
200
+ * @en Whether a recoverable multi-wallet aggregator provider exists.
201
+ * @zh 是否存在可恢复的多钱包聚合 provider。
202
+ * @returns @en `true` if exists. @zh 存在为 `true`。
152
203
  */
153
204
  declare function hasRecoverableAggregatorProvider(): boolean;
154
205
  /**
155
- * 获取聚合 injected provider(多钱包根节点或 TronLink + Coinbase 组合场景)。
156
- * @returns {@link InjectedEthereumProvider};未找到为 `undefined`。
206
+ * @en Get aggregated injected provider.
207
+ * @zh 获取聚合 injected provider。
208
+ * @returns @en {@link InjectedEthereumProvider} or `undefined`. @zh provider 或 `undefined`。
157
209
  */
158
210
  declare function getAggregatedInjectedProvider(): WalletEventProvider | undefined;
159
211
  /**
160
- * 是否存在可用的聚合 injected 以太坊 provider
161
- * @returns 存在为 `true`;非浏览器为 `false`。
212
+ * @en Whether an aggregated injected Ethereum provider is available.
213
+ * @zh 是否存在可用的聚合 injected 以太坊 provider。
214
+ * @returns @en `true` if available. @zh 存在为 `true`。
162
215
  */
163
216
  declare function hasAggregatedInjectedProvider(): boolean;
164
217
 
165
218
  declare const ERC20_DECIMALS_ABI: readonly ["function decimals() view returns (uint8)"];
219
+ type Erc20BalanceResult = {
220
+ accountAddress: string;
221
+ balance: string;
222
+ decimals: number;
223
+ };
166
224
  /**
167
- * 检查地址在链上是否已部署合约(有 bytecode 才算合约地址)。
168
- * @param readProvider - 只读 provider,ethers `BrowserProvider` 或 `JsonRpcProvider`。
169
- * @param address - 待检查的地址,如 `"0x..."`。
170
- * @returns 已部署为 `true`,无 bytecode `false`。
225
+ * @en Check whether an address has deployed contract bytecode.
226
+ * @zh 检查地址在链上是否已部署合约。
227
+ * @param {EvmReadProvider} readProvider @en Read provider. @zh 只读 provider。
228
+ * @param {string} address @en Address to check. @zh 待检查的地址。
229
+ * @returns @en `true` if deployed. @zh 已部署为 `true`。
171
230
  */
172
231
  declare function hasDeployedContract(readProvider: EvmReadProvider, address: string): Promise<boolean>;
173
232
  /**
174
- * 读取 ERC20 代币 decimals
175
- * @param readProvider - 只读 provider,ethers `BrowserProvider` 或 `JsonRpcProvider`。
176
- * @param tokenAddress - ERC20 合约地址。
177
- * @param erc20Abi - 合约 ABI,默认 {@link ERC20_DECIMALS_ABI}。
178
- * @param fallback - `decimals()` 调用失败时的回退值,默认 {@link ERC20_DECIMALS}(18)。
179
- * @returns token decimals 数值。
180
- * @throws 合约未部署时抛错。
233
+ * @en Read ERC20 token decimals.
234
+ * @zh 读取 ERC20 代币 decimals。
235
+ * @param {EvmReadProvider} readProvider @en Read provider. @zh 只读 provider。
236
+ * @param {string} tokenAddress @en ERC20 contract address. @zh ERC20 合约地址。
237
+ * @param {InterfaceAbi} [erc20Abi] @en Contract ABI. @zh 合约 ABI。
238
+ * @param {number} [fallback] @en Fallback when call fails. @zh 调用失败时的回退值。
239
+ * @returns @en Token decimals. @zh token decimals 数值。
181
240
  */
182
241
  declare function readErc20Decimals(readProvider: EvmReadProvider, tokenAddress: string, erc20Abi?: InterfaceAbi, fallback?: 18): Promise<number>;
242
+ /**
243
+ * @en Read ERC20 token balance as formatted string.
244
+ * @zh 读取 ERC20 代币余额(格式化为人类可读字符串)。
245
+ * @param {EvmReadProvider} readProvider @en Read provider. @zh 只读 provider。
246
+ * @param {string} tokenAddress @en ERC20 contract address. @zh ERC20 合约地址。
247
+ * @param {string} accountAddress @en Holder account address. @zh 持有账户地址。
248
+ * @param {InterfaceAbi} [erc20Abi] @en Contract ABI. @zh 合约 ABI。
249
+ * @returns @en {@link Erc20BalanceResult}. @zh {@link Erc20BalanceResult}。
250
+ */
251
+ declare function readErc20Balance(readProvider: EvmReadProvider, tokenAddress: string, accountAddress: string, erc20Abi?: InterfaceAbi): Promise<Erc20BalanceResult>;
252
+
253
+ /**
254
+ * @en Clear JsonRpc read provider cache.
255
+ * @zh 清除 JsonRpc 只读 provider 缓存。
256
+ */
257
+ declare function clearJsonRpcReadProviderCache(): void;
258
+ /**
259
+ * @en Create and cache a JsonRpc read provider.
260
+ * @zh 创建并缓存 JsonRpc 只读 provider。
261
+ * @param {string} rpcUrl @en RPC node URL. @zh RPC 节点 URL。
262
+ * @param {string} chainIdHex @en Hex chainId. @zh 十六进制 chainId。
263
+ * @param {{ current: JsonRpcProvider | null }} [cache] @en Optional cache object. @zh 可选缓存对象。
264
+ * @returns @en ethers `JsonRpcProvider`. @zh ethers `JsonRpcProvider`。
265
+ */
266
+ declare function createJsonRpcReadProvider(rpcUrl: string, chainIdHex: string, cache?: {
267
+ current: JsonRpcProvider | null;
268
+ }): JsonRpcProvider;
269
+ type ReadProviderRpcConfig = {
270
+ rpcUrls: string[];
271
+ chainId: string;
272
+ };
273
+ /**
274
+ * @en Get read provider: wallet BrowserProvider first, JsonRpc fallback.
275
+ * @zh 获取只读 provider:优先钱包 BrowserProvider,否则 JsonRpc 回退。
276
+ * @param {BrowserProvider | null} walletProvider @en Wallet BrowserProvider or `null`. @zh 钱包 BrowserProvider 或 `null`。
277
+ * @param {ReadProviderRpcConfig} rpcConfig @en RPC config. @zh RPC 配置。
278
+ * @param {string[]} rpcConfig.rpcUrls @en RPC URL list. @zh RPC 节点 URL 列表。
279
+ * @param {string} rpcConfig.chainId @en Hex chainId. @zh 十六进制 chainId。
280
+ * @param {{ current: JsonRpcProvider | null }} [fallbackCache] @en Optional JsonRpc cache. @zh 可选 JsonRpc 缓存。
281
+ * @returns @en {@link EvmReadProvider}. @zh {@link EvmReadProvider}。
282
+ */
283
+ declare function getReadProviderWithFallback(walletProvider: BrowserProvider | null, rpcConfig: ReadProviderRpcConfig, fallbackCache?: {
284
+ current: JsonRpcProvider | null;
285
+ }): EvmReadProvider;
183
286
 
287
+ type GetConfiguredReadProviderOptions = {
288
+ /** @en BSC chain ID for JsonRpc fallback when wallet is not connected. @zh 未连接钱包时用于 JsonRpc 回退的 BSC chainId。 */
289
+ chainId?: SupportedBscChainId;
290
+ };
184
291
  /**
185
- * 合约只读调用选项。
186
- * @property abi - 合约 ABI(`InterfaceAbi`),需包含目标读方法。
187
- * @property method - `staticCall` 的合约方法名,如 `"decimals"`、`"getPrice"`。
292
+ * @en Options for contract read calls.
293
+ * @zh 合约只读调用选项。
294
+ * @property {InterfaceAbi} abi @en Contract ABI. @zh 合约 ABI。
295
+ * @property {string} method @en Method name for staticCall. @zh 用于 staticCall 的合约方法名。
188
296
  */
189
297
  type GetContractReadOptions = {
190
298
  abi: InterfaceAbi;
191
299
  method: string;
192
300
  };
193
301
  /**
194
- * 设置用于链上只读调用的钱包 BrowserProvider
195
- * 设置后 `getConfiguredReadProvider` 会优先走钱包,否则回退到 init 配置中的 RPC
196
- * @param provider - ethers `BrowserProvider`;传 `null` 则清除并回退到 RPC。
302
+ * @en Set wallet BrowserProvider for on-chain read calls.
303
+ * @zh 设置用于链上只读调用的钱包 BrowserProvider
304
+ * @param {BrowserProvider | null} provider @en BrowserProvider or `null` to clear. @zh BrowserProvider;传 `null` 则清除。
197
305
  */
198
306
  declare function setWalletReadProvider(provider: BrowserProvider | null): void;
199
307
  /**
200
- * 获取当前配置的只读 provider。
201
- * 需先调用 `initWalletSdk`;优先返回已设置的钱包 BrowserProvider,否则使用 RPC fallback。
202
- * @returns ethers `BrowserProvider` `JsonRpcProvider`。
203
- * @throws 未初始化 SDK,或 RPC 配置缺失时抛错。
308
+ * @en Rebuild wallet BrowserProvider after chain switch to avoid NETWORK_ERROR.
309
+ * @zh 切链后重建钱包 BrowserProvider,避免 ethers `NETWORK_ERROR`。
310
+ * @param {WalletEventProvider} eip1193 @en Current wallet EIP-1193 provider. @zh 当前钱包 EIP-1193 provider。
204
311
  */
205
- declare function getConfiguredReadProvider(): EvmReadProvider;
312
+ declare function refreshWalletReadProvider(eip1193: WalletEventProvider): void;
313
+
314
+ /**
315
+ * @en Get read provider: wallet first, otherwise JsonRpc via `chainId`.
316
+ * @zh 获取只读 provider:优先钱包,否则通过 `chainId` 使用 JsonRpc。
317
+ */
318
+ declare function getConfiguredReadProvider(options?: GetConfiguredReadProviderOptions): EvmReadProvider;
206
319
  /**
207
- * 检查指定地址在当前链上是否已部署合约(是否存在 bytecode)。
208
- * @param contractAddress - 合约地址,如 `"0x55d398326f99059fF775485246999027B3197955"`。
209
- * @returns 已部署为 `true`,无 bytecode `false`。
320
+ * @en Check whether a contract is deployed at the given address.
321
+ * @zh 检查指定地址在当前链上是否已部署合约。
322
+ * @param {string} contractAddress @en Contract address. @zh 合约地址。
323
+ * @returns @en `true` if deployed. @zh 已部署为 `true`。
210
324
  */
211
325
  declare function isContractDeployed(contractAddress: string): Promise<boolean>;
212
326
  /**
213
- * 读取 token 合约的 decimals
214
- * @param contractAddress - 代币合约地址。
215
- * @param options - 读调用选项,见 {@link GetContractReadOptions}。
216
- * @param options.abi - 合约 ABI,需包含 `options.method` 对应的方法。
217
- * @param options.method - decimals 方法名,通常为 `"decimals"`。
218
- * @returns token decimals 数值,如 `18`。
219
- * @throws 合约未部署时抛错。
327
+ * @en Read token contract decimals.
328
+ * @zh 读取 token 合约的 decimals。
329
+ * @param {string} contractAddress @en Token contract address. @zh 代币合约地址。
330
+ * @param {GetContractReadOptions} options @en Read options. @zh 读调用选项。
331
+ * @returns @en Decimals number. @zh decimals 数值。
220
332
  */
221
333
  declare function getContractDecimals(contractAddress: string, options: GetContractReadOptions): Promise<number>;
222
334
  /**
223
- * 读取合约价格,并按 token decimals 格式化为人类可读字符串。
224
- * 内部会额外调用 `decimals()` `formatUnits` 换算。
225
- * @param contractAddress - 价格合约地址。
226
- * @param options - 读调用选项,见 {@link GetContractReadOptions}。
227
- * @param options.abi - 合约 ABI,需包含价格读方法与 `decimals` 方法。
228
- * @param options.method - 价格读方法名,如 `"getPrice"`。
229
- * @returns 格式化后的价格字符串(ethers `formatUnits` 结果)。
230
- * @throws 合约未部署时抛错。
335
+ * @en Read contract price formatted with token decimals.
336
+ * @zh 读取合约价格,并按 token decimals 格式化为人类可读字符串。
337
+ * @param {string} contractAddress @en Price contract address. @zh 价格合约地址。
338
+ * @param {GetContractReadOptions} options @en Read options. @zh 读调用选项。
339
+ * @returns @en Formatted price string. @zh 格式化后的价格字符串。
231
340
  */
232
341
  declare function getContractPrice(contractAddress: string, options: GetContractReadOptions): Promise<string>;
233
-
234
342
  /**
235
- * 确保钱包切换到目标网络;链未添加时自动调用 `wallet_addEthereumChain`。
236
- * @param options - 切链选项。
237
- * @param options.targetChainId - 目标十六进制 chainId,如 `"0x38"`。
238
- * @param options.getCurrentChainId - 获取当前 chainId 的异步函数(通常 `eth_chainId`)。
239
- * @param options.switchChain - 切换链的异步函数(通常 `wallet_switchEthereumChain`)。
240
- * @param options.addChain - 添加链的异步函数(通常 `wallet_addEthereumChain`);参数为 {@link ChainConfig} 兼容对象。
241
- * @param options.chainParams - 传给 `addChain` 的链参数,可直接使用 `getWalletSdkConfig().chain`。
242
- * @returns 已在目标链上或切链成功时 resolve;非 4902 错误会向上抛出。
343
+ * @en Read configured USDT decimals from `initWalletSdk`.
344
+ * @zh 读取 `initWalletSdk` 配置的 USDT decimals。
345
+ * @returns @en USDT decimals. @zh USDT decimals 数值。
243
346
  */
244
- declare function ensureTargetNetwork(options: {
347
+ declare function readConfiguredUsdtDecimals(chainId?: SupportedBscChainId): Promise<number>;
348
+ /**
349
+ * @en Read configured USDT balance from `initWalletSdk`.
350
+ * @zh 读取 `initWalletSdk` 配置的 USDT 余额。
351
+ * @param {string} accountAddress @en Holder account address. @zh 持有账户地址。
352
+ * @returns @en {@link Erc20BalanceResult}. @zh {@link Erc20BalanceResult}。
353
+ */
354
+ declare function readUsdtBalance(accountAddress: string, chainId?: SupportedBscChainId): Promise<Erc20BalanceResult>;
355
+
356
+ type EnsureTargetNetworkOptions = {
245
357
  targetChainId: string;
246
358
  getCurrentChainId: () => Promise<string>;
247
359
  switchChain: (chainId: string) => Promise<unknown>;
248
360
  addChain: (chainParams: Record<string, unknown>) => Promise<unknown>;
249
361
  chainParams: Record<string, unknown>;
250
- }): Promise<void>;
251
-
362
+ };
252
363
  /**
253
- * 创建并缓存 JsonRpc 只读 provider。
254
- * @param rpcUrl - RPC 节点 URL,如 `"https://bsc-dataseed.binance.org/"`。
255
- * @param chainIdHex - 十六进制 chainId,如 `"0x38"`(BSC 主网)或 `"0x61"`(测试网)。
256
- * @param cache - 可选缓存对象;传入后复用同一 `JsonRpcProvider` 实例。
257
- * @returns ethers `JsonRpcProvider`。
364
+ * @en Ensure the wallet is on the target network; adds chain if missing.
365
+ * @zh 确保钱包切换到目标网络;链未添加时自动调用 `wallet_addEthereumChain`。
366
+ * @param {EnsureTargetNetworkOptions} options @en Network switch options. @zh 切链选项。
367
+ * @param {string} options.targetChainId @en Target hex chainId. @zh 目标十六进制 chainId。
368
+ * @param {() => Promise<string>} options.getCurrentChainId @en Async fn to get current chainId. @zh 获取当前 chainId 的异步函数。
369
+ * @param {(chainId: string) => Promise<unknown>} options.switchChain @en Async fn to switch chain. @zh 切换链的异步函数。
370
+ * @param {(chainParams: Record<string, unknown>) => Promise<unknown>} options.addChain @en Async fn to add chain. @zh 添加链的异步函数。
371
+ * @param {Record<string, unknown>} options.chainParams @en Chain params for addChain. @zh 传给 addChain 的链参数。
258
372
  */
259
- declare function createJsonRpcReadProvider(rpcUrl: string, chainIdHex: string, cache?: {
260
- current: JsonRpcProvider | null;
261
- }): JsonRpcProvider;
373
+ declare function ensureTargetNetwork(options: EnsureTargetNetworkOptions): Promise<void>;
262
374
  /**
263
- * 获取只读 provider:优先使用钱包 BrowserProvider,否则回退到 JsonRpcProvider。
264
- * @param walletProvider - 钱包 BrowserProvider;为 `null` 时使用 RPC fallback。
265
- * @param rpcConfig - RPC 配置。
266
- * @param rpcConfig.rpcUrls - RPC 节点 URL 列表,取第一个作为 fallback。
267
- * @param rpcConfig.chainId - 十六进制 chainId,如 `"0x38"`。
268
- * @param fallbackCache - 可选 JsonRpc provider 缓存。
269
- * @returns ethers `BrowserProvider` 或 `JsonRpcProvider`。
270
- * @throws `rpcUrls[0]` 或 `chainId` 缺失时抛错。
375
+ * @en Switch wallet to specified BSC chain (`0x38` or `0x61`).
376
+ * @zh 将钱包切换到指定 BSC 链(主网 `0x38` / 测试网 `0x61`)。
271
377
  */
272
- declare function getReadProviderWithFallback(walletProvider: BrowserProvider | null, rpcConfig: {
273
- rpcUrls: string[];
274
- chainId: string;
275
- }, fallbackCache?: {
276
- current: JsonRpcProvider | null;
277
- }): EvmReadProvider;
378
+ declare function switchToConfiguredNetwork(chainId: SupportedBscChainId): Promise<NetworkSwitchResult>;
278
379
 
279
380
  /**
280
- * EIP-1193 provider 绑定为 BrowserProvider 并写入缓存。
281
- * @param eip1193 - 钱包 EIP-1193 provider
282
- * @param cache - BrowserProvider 缓存引用 `{ value: BrowserProvider | null }`。
283
- * @returns ethers `BrowserProvider`。
381
+ * @en Bind EIP-1193 provider as BrowserProvider and update cache.
382
+ * @zh EIP-1193 provider 绑定为 BrowserProvider 并写入缓存。
383
+ * @param {WalletEventProvider} eip1193 @en Wallet EIP-1193 provider. @zh 钱包 EIP-1193 provider。
384
+ * @param {MutableRef<BrowserProvider | null>} cache @en BrowserProvider cache ref. @zh BrowserProvider 缓存引用。
385
+ * @returns @en ethers `BrowserProvider`. @zh ethers `BrowserProvider`。
284
386
  */
285
387
  declare function bindBrowserProvider(eip1193: WalletEventProvider, cache: MutableRef<BrowserProvider | null>): BrowserProvider;
286
388
  /**
287
- * 向钱包发起 JSON-RPC 请求。
288
- * @param eip1193 - 钱包 EIP-1193 provider。
289
- * @param method - JSON-RPC 方法名,如 `"eth_requestAccounts"`。
290
- * @param params - 可选请求参数,数组或对象。
291
- * @returns provider `request` 的原始返回值。
389
+ * @en Send a JSON-RPC request to the wallet.
390
+ * @zh 向钱包发起 JSON-RPC 请求。
391
+ * @param {WalletEventProvider} eip1193 @en Wallet EIP-1193 provider. @zh 钱包 EIP-1193 provider。
392
+ * @param {string} method @en JSON-RPC method name. @zh JSON-RPC 方法名。
393
+ * @param {EthereumRequestParams} [params] @en Optional request params. @zh 可选请求参数。
394
+ * @returns @en Raw provider response. @zh provider 原始返回值。
292
395
  */
293
396
  declare function requestWallet(eip1193: WalletEventProvider, method: string, params?: EthereumRequestParams): Promise<any>;
294
397
  /**
295
- * 连接钱包账户并初始化 signer
296
- * @param requestAccounts - 请求账户的函数,通常调用 `eth_requestAccounts`。
297
- * @param getProvider - 获取当前 BrowserProvider 的函数。
298
- * @param setSigner - 设置 signer 的回调。
299
- * @param markConnected - 标记已连接的回调。
300
- * @returns 连接结果 `{ address: string; signer: JsonRpcSigner }`。
301
- * @throws 钱包未返回账户时抛错。
398
+ * @en Connect wallet account and initialize signer.
399
+ * @zh 连接钱包账户并初始化 signer。
400
+ * @param {() => Promise<unknown>} requestAccounts @en Function to request accounts. @zh 请求账户的函数。
401
+ * @param {() => BrowserProvider} getProvider @en Function to get BrowserProvider. @zh 获取 BrowserProvider 的函数。
402
+ * @param {(signer: JsonRpcSigner) => void} setSigner @en Callback to set signer. @zh 设置 signer 的回调。
403
+ * @param {() => void} markConnected @en Callback to mark connected. @zh 标记已连接的回调。
404
+ * @returns @en `{ address, signer }`. @zh `{ address, signer }`。
302
405
  */
303
406
  declare function connectWalletAccount(requestAccounts: () => Promise<unknown>, getProvider: () => BrowserProvider, setSigner: (signer: JsonRpcSigner) => void, markConnected: () => void): Promise<{
304
407
  address: string;
305
408
  signer: JsonRpcSigner;
306
409
  }>;
410
+ type ClearWalletRuntimeCache = {
411
+ provider: MutableRef<BrowserProvider | null>;
412
+ signer: MutableRef<JsonRpcSigner | null>;
413
+ selectedProvider?: MutableRef<WalletEventProvider | null>;
414
+ };
307
415
  /**
308
- * 同步当前钱包账户地址与 signer(不触发授权弹窗)。
309
- * @param getProvider - 获取当前 BrowserProvider 的函数。
310
- * @param setSigner - 设置 signer 的回调。
311
- * @param markConnected - 标记已连接的回调。
312
- * @param nextAddress - 可选指定账户地址;未传则使用 provider 默认账户。
313
- * @returns 同步结果 `{ address: string; signer: JsonRpcSigner }`。
416
+ * @en Sync wallet account address and signer without authorization prompt.
417
+ * @zh 同步当前钱包账户地址与 signer(不触发授权弹窗)。
418
+ * @param {() => BrowserProvider} getProvider @en Function to get BrowserProvider. @zh 获取 BrowserProvider 的函数。
419
+ * @param {(signer: JsonRpcSigner) => void} setSigner @en Callback to set signer. @zh 设置 signer 的回调。
420
+ * @param {() => void} markConnected @en Callback to mark connected. @zh 标记已连接的回调。
421
+ * @param {string} [nextAddress] @en Optional account address. @zh 可选指定账户地址。
422
+ * @returns @en `{ address, signer }`. @zh `{ address, signer }`。
314
423
  */
315
424
  declare function syncWalletAccountAddress(getProvider: () => BrowserProvider, setSigner: (signer: JsonRpcSigner) => void, markConnected: () => void, nextAddress?: string): Promise<{
316
425
  address: string;
317
426
  signer: JsonRpcSigner;
318
427
  }>;
319
428
  /**
320
- * 清除钱包运行时缓存(provider、signer、可选 selectedProvider)。
321
- * @param cache - 运行时缓存对象。
322
- * @param cache.provider - BrowserProvider 缓存引用。
323
- * @param cache.signer - Signer 缓存引用。
324
- * @param cache.selectedProvider - 可选,当前选中的 EIP-1193 provider 缓存引用。
429
+ * @en Clear wallet runtime cache.
430
+ * @zh 清除钱包运行时缓存。
431
+ * @param {ClearWalletRuntimeCache} cache @en Runtime cache object. @zh 运行时缓存对象。
432
+ * @param {MutableRef<BrowserProvider | null>} cache.provider @en BrowserProvider cache ref. @zh BrowserProvider 缓存引用。
433
+ * @param {MutableRef<JsonRpcSigner | null>} cache.signer @en Signer cache ref. @zh Signer 缓存引用。
434
+ * @param {MutableRef<WalletEventProvider | null>} [cache.selectedProvider] @en Optional selected EIP-1193 provider ref. @zh 可选选中的 EIP-1193 provider 引用。
325
435
  */
326
- declare function clearWalletRuntime(cache: {
327
- provider: MutableRef<BrowserProvider | null>;
328
- signer: MutableRef<JsonRpcSigner | null>;
329
- selectedProvider?: MutableRef<WalletEventProvider | null>;
330
- }): void;
436
+ declare function clearWalletRuntime(cache: ClearWalletRuntimeCache): void;
331
437
 
332
- type WalletProviderEventMap = {
438
+ /**
439
+ * @en Whether the wallet is connected.
440
+ * @zh 是否已连接钱包。
441
+ * @returns @en `true` if connected. @zh 已连接为 `true`。
442
+ */
443
+ declare function isWalletConnected(): boolean;
444
+ /**
445
+ * @en Get the connected signer.
446
+ * @zh 获取当前连接的 signer。
447
+ * @returns @en Connected {@link JsonRpcSigner}. @zh 已连接的 {@link JsonRpcSigner}。
448
+ */
449
+ declare function getWalletSigner(): JsonRpcSigner;
450
+ /**
451
+ * @en Get the connected account address.
452
+ * @zh 获取当前连接账户地址。
453
+ * @returns @en Account address string. @zh 账户地址字符串。
454
+ */
455
+ declare function getConnectedAddress(): Promise<string>;
456
+ /**
457
+ * @en Get the selected EIP-1193 provider.
458
+ * @zh 获取当前选中的 EIP-1193 provider。
459
+ * @returns @en {@link WalletEventProvider} or `null`. @zh {@link WalletEventProvider} 或 `null`。
460
+ */
461
+ declare function getSelectedWalletProvider(): WalletEventProvider | null;
462
+ /**
463
+ * @en Get the current BrowserProvider.
464
+ * @zh 获取当前 BrowserProvider。
465
+ * @returns @en `BrowserProvider` or `null`. @zh `BrowserProvider` 或 `null`。
466
+ */
467
+ declare function getWalletBrowserProvider(): BrowserProvider | null;
468
+ /**
469
+ * @en Bind the wallet provider.
470
+ * @zh 绑定钱包 provider。
471
+ * @param {WalletEventProvider} eip1193 @en Wallet EIP-1193 provider. @zh 钱包 EIP-1193 provider。
472
+ * @returns @en Bound `BrowserProvider`. @zh 绑定后的 `BrowserProvider`。
473
+ */
474
+ declare function bindWalletProvider(eip1193: WalletEventProvider): BrowserProvider;
475
+ /**
476
+ * @en Sync the wallet provider after chain switch.
477
+ * @zh 切链后同步钱包 provider。
478
+ */
479
+ declare function syncWalletRuntimeProvider(): void;
480
+ /**
481
+ * @en Connect the wallet; optionally switch to a BSC chain when `chainId` is provided.
482
+ * @zh 连接钱包;传入 `chainId` 时在连接后切换到对应 BSC 链。
483
+ */
484
+ declare function connectWallet(eip1193: WalletEventProvider, options?: ConnectWalletOptions): Promise<{
485
+ address: string;
486
+ signer: JsonRpcSigner;
487
+ }>;
488
+ /**
489
+ * @en Sync the connected wallet signer.
490
+ * @zh 同步已连接钱包的 signer。
491
+ * @param {string} [nextAddress] @en Optional account address. @zh 可选账户地址。
492
+ * @returns @en `{ address, signer }`. @zh `{ address, signer }`。
493
+ */
494
+ declare function syncConnectedWalletAccount(nextAddress?: string): Promise<{
495
+ address: string;
496
+ signer: JsonRpcSigner;
497
+ }>;
498
+ /**
499
+ * @en Get authorized accounts from the connected wallet (`eth_accounts`).
500
+ * @zh 获取已连接钱包的授权账户列表(`eth_accounts`)。
501
+ * @returns @en Account address strings. @zh 账户地址列表。
502
+ */
503
+ declare function getWalletAccounts(): Promise<string[]>;
504
+ /**
505
+ * @en Refresh authorized accounts from the wallet.
506
+ * @zh 向钱包重新请求授权账户;已连接时优先调用 `wallet_requestPermissions` 以弹出 MetaMask / Coinbase 账户选择。
507
+ * @returns @en Account address strings. @zh 账户地址列表。
508
+ */
509
+ declare function refreshWalletAccounts(): Promise<string[]>;
510
+ /**
511
+ * @en Switch the active signer to another authorized account address.
512
+ * @zh 切换到钱包内另一个已授权账户地址。
513
+ * @param {string} address @en Target account address. @zh 目标账户地址。
514
+ * @returns @en `{ address, signer }`. @zh `{ address, signer }`。
515
+ */
516
+ declare function switchWalletAccount(address: string): Promise<{
517
+ address: string;
518
+ signer: JsonRpcSigner;
519
+ }>;
520
+ /**
521
+ * @en Disconnect the wallet.
522
+ * @zh 断开钱包连接。
523
+ */
524
+ declare function disconnectWallet(): void;
525
+
526
+ type SupportedWalletKey = "metamask" | "tronlink" | "coinbase" | "tokenpocket" | "unknown";
527
+ /**
528
+ * @en Resolve wallet key from an injected EIP-1193 provider.
529
+ * @zh 从 injected EIP-1193 provider 解析钱包 key。
530
+ */
531
+ declare function resolveWalletKey(provider: WalletEventProvider | null | undefined): SupportedWalletKey;
532
+
533
+ type WalletNativeEvent<TPayload = unknown> = {
534
+ name: string;
535
+ payload: TPayload;
536
+ raw: unknown[];
537
+ };
538
+
539
+ type WalletSdkEventMap = {
333
540
  accountsChanged: string[];
334
541
  chainChanged: string;
542
+ networkSwitched: NetworkSwitchResult;
335
543
  };
336
- type WalletProviderEventName = keyof WalletProviderEventMap;
337
- type WalletProviderEventListener<K extends WalletProviderEventName = WalletProviderEventName> = (payload: WalletProviderEventMap[K]) => void | Promise<void>;
544
+ type WalletSdkEventName = keyof WalletSdkEventMap;
545
+ type WalletScopedEventListener<K extends WalletSdkEventName = WalletSdkEventName> = (wallet: SupportedWalletKey, event: WalletNativeEvent<WalletSdkEventMap[K]>) => void | Promise<void>;
338
546
  /**
339
- * 设置当前钱包 EIP-1193 provider,供 `walletEvents` 事件监听使用。
340
- * @param provider - 钱包 EIP-1193 provider;传 `null` 则解除绑定。
547
+ * @en Emit an SDK wallet event (e.g. `networkSwitched`).
548
+ * @zh 触发 SDK 钱包事件(如 `networkSwitched`)。
549
+ */
550
+ declare function emitWalletEvent<K extends WalletSdkEventName>(sdkEvent: K, wallet: SupportedWalletKey, event: WalletNativeEvent<WalletSdkEventMap[K]>): void;
551
+ /**
552
+ * @en Set wallet EIP-1193 provider for `walletEvents` listening.
553
+ * @zh 设置当前钱包 EIP-1193 provider,供 `walletEvents` 事件监听使用。
341
554
  */
342
555
  declare function setWalletEventProvider(provider: WalletEventProvider | null): void;
343
556
  /**
344
- * 获取当前已设置的钱包 EIP-1193 provider
345
- * @returns {@link WalletEventProvider}
346
- * @throws 未调用 `setWalletEventProvider` 时抛错。
557
+ * @en Get the current wallet EIP-1193 provider.
558
+ * @zh 获取当前已设置的钱包 EIP-1193 provider
347
559
  */
348
560
  declare function getWalletEventProvider(): WalletEventProvider;
349
- declare class WalletEventsEmitter {
350
- on(event: "accountsChanged", listener: WalletProviderEventListener<"accountsChanged">): void;
351
- on(event: "chainChanged", listener: WalletProviderEventListener<"chainChanged">): void;
352
- on(event: WalletProviderEventName, listener: (...args: any[]) => void | Promise<void>): void;
353
- off(event: "accountsChanged", listener: WalletProviderEventListener<"accountsChanged">): void;
354
- off(event: "chainChanged", listener: WalletProviderEventListener<"chainChanged">): void;
355
- off(event: WalletProviderEventName, listener?: (...args: any[]) => void | Promise<void>): void;
561
+ /** @en Active wallet key for the bound provider. @zh 当前绑定 provider 的钱包 key。 */
562
+ declare function getActiveWalletKey(): SupportedWalletKey;
563
+ declare class WalletEvents {
564
+ on<K extends WalletSdkEventName>(event: K, listener: WalletScopedEventListener<K>): void;
565
+ off<K extends WalletSdkEventName>(event: K, listener?: WalletScopedEventListener<K>): void;
356
566
  clear(): void;
357
567
  }
358
- type WalletEvents = WalletEventsEmitter;
359
- /** 钱包事件总线,支持 `accountsChanged` / `chainChanged` 监听。需先 `setWalletEventProvider`。 */
360
- declare const walletEvents: WalletEventsEmitter;
568
+ declare const walletEvents: WalletEvents;
569
+
570
+ type WalletAccountsSyncResult = {
571
+ action: "synced" | "disconnected" | "ignored";
572
+ address?: string;
573
+ };
574
+ /**
575
+ * @en Apply wallet-specific account sync/disconnect side effects.
576
+ * @zh 按钱包类型应用账户同步/断开副作用。
577
+ */
578
+ declare function applyWalletAccountsChangedEffect(wallet: SupportedWalletKey, accounts: string[]): Promise<WalletAccountsSyncResult>;
361
579
 
362
- /** 是否在浏览器环境(模块加载时判定一次)。 */
580
+ /** @en Whether running in a browser environment. @zh 是否在浏览器环境。 */
363
581
  declare const isBrowser: boolean;
364
582
  /**
365
- * 断言当前为浏览器环境;非浏览器时抛错。
366
- * 检测类 API 请先用 {@link isBrowser} 判断后返回,而非调用此函数。
367
- * @param apiName - 调用方 API 名称,用于错误信息,如 `"walletEvents.on"`。
368
- * @throws 非浏览器环境时抛错。
583
+ * @en Assert browser environment; throws if not in browser.
584
+ * @zh 断言当前为浏览器环境;非浏览器时抛错。
585
+ * @param {string} apiName @en API name for error message. @zh 用于错误信息的 API 名称。
369
586
  */
370
587
  declare function assertBrowser(apiName: string): void;
371
588
 
372
589
  /**
373
- * 是否检测到 MetaMaskinjected EIP-6963)。
374
- * @returns 浏览器中检测到 MetaMask `true`;非浏览器或未检测到为 `false`。
590
+ * @en Whether MetaMask is detected (injected or EIP-6963).
591
+ * @zh 是否检测到 MetaMask(injected EIP-6963)。
592
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
375
593
  */
376
594
  declare function isEthereumProvider(): boolean;
377
595
  /**
378
- * 是否检测到 Coinbase Wallet
379
- * @returns 浏览器中检测到 Coinbase 为 `true`;非浏览器或未检测到为 `false`。
596
+ * @en Whether Coinbase Wallet is detected.
597
+ * @zh 是否检测到 Coinbase Wallet。
598
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
380
599
  */
381
600
  declare function isCoinbaseProvider(): boolean;
382
601
  /**
383
- * 是否检测到通用 injected 以太坊钱包(含多钱包聚合器)。
384
- * @returns 浏览器中存在可用 injected provider 为 `true`;否则 `false`。
602
+ * @en Whether TokenPocket is detected (injected or EIP-6963).
603
+ * @zh 是否检测到 TokenPocket(injected EIP-6963)。
604
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
605
+ */
606
+ declare function isTokenPocketProvider(): boolean;
607
+ /**
608
+ * @en Whether a generic injected Ethereum wallet is detected.
609
+ * @zh 是否检测到通用 injected 以太坊钱包。
610
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
385
611
  */
386
612
  declare function isInjectedProvider(): boolean;
387
613
  /**
388
- * 是否检测到 TronLink
389
- * @returns 浏览器中 `window.tron``window.tronLink` 可用为 `true`;否则 `false`。
614
+ * @en Whether TronLink is detected (injected or EIP/TIP-6963).
615
+ * @zh 是否检测到 TronLink(injectedEIP/TIP-6963)。
616
+ * @returns @en `true` if detected. @zh 检测到为 `true`。
390
617
  */
391
618
  declare function isTronLinkProvider(): boolean;
392
619
 
393
620
  /**
394
- * 初始化 SDK 并将配置持久化到 `globalThis`,供各模块通过 `getWalletSdkConfig` 读取。
395
- * @param options - 初始化选项,见 {@link WalletSdkInitOptions}。
396
- * @param options.isMainnet - `true` 使用 BSC 主网,`false` 使用 BSC 测试网。
397
- * @param options.contract - 业务合约配置(`address` + `abi`)。
398
- * @returns 完整 SDK 配置 {@link WalletSdkConfig}。
621
+ * @en Initialize SDK and persist config to `globalThis`.
622
+ * @zh 初始化 SDK 并将配置持久化到 `globalThis`。
399
623
  */
400
624
  declare function initWalletSdk(options: WalletSdkInitOptions): WalletSdkConfig;
401
625
  /**
402
- * 读取已初始化的 SDK 配置。
403
- * @returns 当前 {@link WalletSdkConfig}。
404
- * @throws 未调用 `initWalletSdk` 时抛错。
626
+ * @en Get initialized SDK config.
627
+ * @zh 读取已初始化的 SDK 配置。
405
628
  */
406
629
  declare function getWalletSdkConfig(): WalletSdkConfig;
407
630
  /**
408
- * 判断 SDK 是否已完成初始化。
409
- * @returns 已调用 `initWalletSdk` 为 `true`,否则 `false`。
631
+ * @en Whether SDK is initialized.
632
+ * @zh 判断 SDK 是否已完成初始化。
410
633
  */
411
634
  declare function isWalletSdkInitialized(): boolean;
412
635
  /**
413
- * 清除已持久化的 SDK 配置(主要用于测试或热重载)。
636
+ * @en Reset persisted SDK config (mainly for tests or hot reload).
637
+ * @zh 清除已持久化的 SDK 配置与初始化状态。
414
638
  */
415
639
  declare function resetWalletSdkConfig(): void;
416
640
 
641
+ /** @en BSC mainnet configuration. @zh BSC 主网配置。 */
417
642
  declare const BSC_NETWORK: {
418
- chainId: string;
643
+ chainId: "0x38";
419
644
  chainName: string;
420
645
  nativeCurrency: {
421
646
  name: string;
@@ -425,8 +650,9 @@ declare const BSC_NETWORK: {
425
650
  rpcUrls: string[];
426
651
  blockExplorerUrls: string[];
427
652
  };
653
+ /** @en BSC testnet configuration. @zh BSC 测试网配置。 */
428
654
  declare const BSC_TESTNET_NETWORK: {
429
- chainId: string;
655
+ chainId: "0x61";
430
656
  chainName: string;
431
657
  nativeCurrency: {
432
658
  name: string;
@@ -437,37 +663,21 @@ declare const BSC_TESTNET_NETWORK: {
437
663
  blockExplorerUrls: string[];
438
664
  };
439
665
 
440
- /** BSC 主网 / 测试网 USDT 合约地址,key 为十六进制 chainId。 */
441
- declare const USDT_CONTRACT_ADDRESSES: {
442
- readonly [BSC_NETWORK.chainId]: "0x55d398326f99059fF775485246999027B3197955";
443
- readonly [BSC_TESTNET_NETWORK.chainId]: "0x66E972502A34A625828C544a1914E8D8cc2A9dE5";
444
- };
445
- /**
446
- * 根据 chainId 解析 BSC USDT 合约地址。
447
- * @param chainId - 十六进制 chainId,如 `"0x38"` 或 `"0x61"`。
448
- * @returns USDT 合约地址字符串。
449
- * @throws 不支持的 chainId 时抛错。
450
- */
451
- declare function resolveUsdtContractAddress(chainId: string): "0x55d398326f99059fF775485246999027B3197955" | "0x66E972502A34A625828C544a1914E8D8cc2A9dE5";
452
- /**
453
- * 根据是否主网解析 BSC 链配置。
454
- * @param isMainnet - `true` 返回 BSC 主网,`false` 返回 BSC 测试网。
455
- * @returns {@link ChainConfig}。
456
- */
457
- declare function resolveChainByMainnet(isMainnet: boolean): ChainConfig;
666
+ declare const SUPPORTED_BSC_CHAIN_IDS: ["0x38", "0x61"];
458
667
  /**
459
- * 根据是否主网解析 BSC USDT 合约地址。
460
- * @param isMainnet - `true` 主网 USDT,`false` 测试网 USDT。
461
- * @returns USDT 合约地址字符串。
668
+ * @en Normalize and validate supported BSC chainId (`0x38` or `0x61`).
669
+ * @zh 校验并规范化为支持的 BSC chainId(主网 `0x38` / 测试网 `0x61`)。
670
+ * @param {string | number} chainId @en Hex or decimal chainId. @zh 十六进制或十进制 chainId。
671
+ * @returns @en {@link SupportedBscChainId}. @zh {@link SupportedBscChainId}。
462
672
  */
463
- declare function resolveUsdtByMainnet(isMainnet: boolean): "0x55d398326f99059fF775485246999027B3197955" | "0x66E972502A34A625828C544a1914E8D8cc2A9dE5";
673
+ declare function normalizeSupportedBscChainId(chainId: string | number): SupportedBscChainId;
464
674
  /**
465
- * 根据 chainId 解析 BSC 链配置。
466
- * @param chainId - 十六进制 chainId,如 `"0x38"` `"0x61"`。
467
- * @returns {@link ChainConfig}
468
- * @throws 不支持的 chainId 时抛错。
675
+ * @en Resolve BSC chain config by chainId.
676
+ * @zh 根据 chainId 解析 BSC 链配置。
677
+ * @param {SupportedBscChainId} chainId @en Supported BSC chain ID. @zh 支持的 BSC chainId
678
+ * @returns @en {@link ChainConfig}. @zh {@link ChainConfig}。
469
679
  */
470
- declare function resolveChainConfig(chainId: string): ChainConfig;
680
+ declare function resolveChainConfig(chainId: SupportedBscChainId): ChainConfig;
471
681
 
472
682
  declare const USDT_CONFIG: {
473
683
  readonly symbol: "USDT";
@@ -515,7 +725,7 @@ declare const USDT_CONFIG: {
515
725
  stateMutability?: undefined;
516
726
  })[];
517
727
  };
518
- /** BSC 上 ERC20 代币统一 decimals(如 USDT 为 18 */
728
+ /** @en Unified ERC20 decimals on BSC (USDT is 18). @zh BSC 上 ERC20 代币统一 decimalsUSDT 为 18)。 */
519
729
  declare const ERC20_DECIMALS: 18;
520
730
 
521
731
  declare const ERC20_ABI: ({
@@ -560,4 +770,4 @@ declare const ERC20_ABI: ({
560
770
  stateMutability?: undefined;
561
771
  })[];
562
772
 
563
- export { BSC_NETWORK, BSC_TESTNET_NETWORK, type ChainConfig, type ChainNativeCurrency, type ContractConfig, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, type Eip6963ProviderDetail, type Eip6963ProviderInfo, type EthereumRequestParams, type EvmReadProvider, type GetContractReadOptions, type InjectedEthereumProvider, type MutableRef, USDT_CONFIG, USDT_CONTRACT_ADDRESSES, type WalletEventProvider, type WalletEvents, type WalletProviderEventListener, type WalletProviderEventMap, type WalletProviderEventName, type WalletSdkConfig, type WalletSdkInitOptions, assertBrowser, bindBrowserProvider, clearWalletRuntime, connectWalletAccount, createJsonRpcReadProvider, discoverWalletProviders, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, getAggregatedInjectedProvider, getConfiguredReadProvider, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSharedBrowserProvider, getWalletEventProvider, getWalletSdkConfig, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTronLinkProvider, isWalletSdkInitialized, readErc20Decimals, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainByMainnet, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveUsdtByMainnet, resolveUsdtContractAddress, setWalletEventProvider, setWalletReadProvider, syncWalletAccountAddress, toChainIdDecimal, walletEvents };
773
+ export { BSC_NETWORK, BSC_TESTNET_NETWORK, type ChainConfig, type ChainNativeCurrency, type ConnectWalletOptions, ERC20_ABI, ERC20_DECIMALS, ERC20_DECIMALS_ABI, type Eip6963ProviderDetail, type Eip6963ProviderInfo, type Erc20BalanceResult, type EthereumRequestParams, type EvmReadProvider, type GetConfiguredReadProviderOptions, type GetContractReadOptions, type InjectedEthereumProvider, type MutableRef, type NetworkSwitchResult, SUPPORTED_BSC_CHAIN_IDS, type SupportedBscChainId, type SupportedWalletKey, USDT_CONFIG, type UsdtInitConfig, Wallet6963Name, Wallet6963Rdns, type WalletAccountsSyncResult, type WalletEventProvider, WalletEvents, type WalletNativeEvent, type WalletScopedEventListener, type WalletSdkConfig, type WalletSdkEventMap, type WalletSdkEventName, type WalletSdkInitOptions, applyWalletAccountsChangedEffect, assertBrowser, bindBrowserProvider, bindWalletProvider, clearJsonRpcReadProviderCache, clearWalletRuntime, connectWallet, connectWalletAccount, createJsonRpcReadProvider, disconnectWallet, discoverWalletProviders, emitWalletEvent, ensureTargetNetwork, findCoinbaseEip6963Provider, findDiscoveredProvider, findMetaMaskEip6963Provider, findTokenPocketEip6963Provider, findTronLinkEip6963Provider, getActiveWalletKey, getAggregatedInjectedProvider, getConfiguredReadProvider, getConnectedAddress, getContractDecimals, getContractPrice, getInjectedEthereumProviders, getReadProviderWithFallback, getSelectedWalletProvider, getSharedBrowserProvider, getWalletAccounts, getWalletBrowserProvider, getWalletEventProvider, getWalletSdkConfig, getWalletSigner, hasAggregatedInjectedProvider, hasCoinbaseEip6963Provider, hasCoinbaseInjectedProvider, hasDeployedContract, hasMetaMaskEip6963Provider, hasMetaMaskInjectedProvider, hasRecoverableAggregatorProvider, hasTokenPocketEip6963Provider, hasTokenPocketInjectedProvider, hasTronLinkEip6963Provider, hasTronLinkInjectedProvider, initWalletSdk, isBrowser, isCoinbaseProvider, isContractDeployed, isEthereumProvider, isInjectedProvider, isTokenPocketProvider, isTronLinkProvider, isWalletConnected, isWalletSdkInitialized, normalizeSupportedBscChainId, readConfiguredUsdtDecimals, readErc20Balance, readErc20Decimals, readUsdtBalance, refreshWalletAccounts, refreshWalletReadProvider, rememberAggregatorProvider, requestWallet, resetWalletSdkConfig, resolveChainConfig, resolveCoinbaseInjectedProvider, resolveMetaMaskInjectedProvider, resolveTokenPocketInjectedProvider, resolveTronLinkInjectedProvider, resolveWalletKey, setWalletEventProvider, setWalletReadProvider, switchToConfiguredNetwork, switchWalletAccount, syncConnectedWalletAccount, syncWalletAccountAddress, syncWalletRuntimeProvider, toChainIdDecimal, walletEvents };